Domanda

Sto lavorando su una libreria C che legge le informazioni dei tag dai file musicali. Ho già ID3v2 preso cura di, ma non riesco a capire come i file Ogg sono strutturati.

Ho aperto un file .ogg in un HexEditor e sono riuscito a trovare i dati dei tag perché era tutto leggibile. Ma tutto a partire dall'inizio del file per i dati tag sembrava spazzatura. Come viene codificato questi dati?

Non ho bisogno di alcun aiuto nel codice attuale, ho solo bisogno di aiuto per visualizzare ciò che un colpo di testa Ogg sembra e ciò che la codifica che utilizza in modo che io possa leggerlo. Mi piacerebbe usare un approccio non hacky per la lettura dei file Ogg.

Sono stato a guardare il Flac formato , che è stato utile.

Il file Flac sto guardando ha circa 350 byte tra l'identificatore "flac" e la sezione commenti leggibile, e nessuno di esso è leggibile nel mio editor esadecimale, quindi sono sicuro che ci deve essere < em> cosa importante in là.

sto usando Linux, e non ho nessuna intenzione di porting per Windows o OS X. Quindi, se ho bisogno di usare una glibc funzione solo per convertire la codifica, sto bene con quello.

È stato utile?

Soluzione

Come è descritto nel link che hai fornito, i seguenti blocchi di metadati possono verificarsi tra il marcatore "flac" e il blocco di metadati VORBIS_COMMENT.

  
      
  • STREAMINFO: Questo blocco contiene informazioni circa l'intero flusso, come frequenza di campionamento, numero di canali, il numero totale di campioni, ecc Deve essere presente come primo blocco metadati nel flusso. Altri blocchi metadati possono seguire, e quelli che il decodificatore non capisce, ignorerà.
  •   
  • APPLICAZIONE: Questo blocco è per l'uso da applicazioni di terze parti. L'unico campo obbligatorio è un identificatore a 32 bit. Questo ID è concessa su richiesta di una domanda da parte dei manutentori FLAC. Il resto è del blocco è definito dalla applicazione registrata. Visita la pagina di registrazione se si desidera registrare un ID per l'applicazione con FLAC.
  •   
  • IMBOTTITURA: Questo blocco consente una quantità arbitraria di imbottitura. Il contenuto di un blocco IMBOTTITURA non hanno alcun significato. Questo blocco è utile quando si sa che i metadati sarà modificato dopo la codifica; l'utente può istruire il codificatore per riservare un blocco IMBOTTITURA di dimensioni sufficienti in modo che quando si aggiunge metadati, sarà semplicemente sovrascrive l'imbottitura (che è relativamente breve) invece di dover inserirlo nel posto giusto nel file esistente (che sarebbe normalmente richiedono riscrivere l'intero file).
  •   
  • SEEKTABLE: Questo è un blocco opzionale per la memorizzazione di cercare punti. È possibile cercare di qualsiasi dato campione in un flusso FLAC senza una tabella cercare, ma il ritardo può essere imprevedibile quanto il bitrate può variare ampiamente all'interno di un flusso. Con l'aggiunta di cercare punti ad un corso d'acqua, questo ritardo può essere notevolmente ridotto. Ogni cercano punto richiede 18 byte, così risoluzione 1% all'interno di un flusso aggiunge meno di 2k. Ci può essere un solo SEEKTABLE in un ruscello, ma la tabella può avere qualsiasi numero di punti cercare. C'è anche una speciale seekpoint 'segnaposto', che verrà ignorato dal decoder, ma che può essere utilizzato per lo spazio di riserva per l'inserimento cercano punto.
  •   

Subito dopo la descrizione di cui sopra, c'è anche la specifica del formato di ciascuno di tali blocchi. Il collegamento dice anche

  

Tutti i numeri utilizzati in un flusso di bit FLAC sono interi; non ci sono rappresentazioni in virgola mobile. Tutti i numeri sono big-endian codificato. Tutti i numeri sono senza segno, se non diversamente specificato.

Allora, cosa stai perdendo? Dici

  

Vorrei un approccio non hacky per la lettura dei file Ogg.

Perché ri-scrivere una libreria a farlo quando già esistono?

Altri suggerimenti

Il formato del file Ogg è documentato qui . C'è una bella visualizzazione grafica come da voi richiesto, con una dettagliata descrizione scritta.

Si potrebbe anche voler guardare libogg che è una libreria con licenza BSD open source per la lettura e scrittura di file Ogg.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top