2010-06-03 28 views
13

Voglio leggere i file MP3 in C++ e preferisco scrivere il mio codice per questo. Fondamentalmente per imparare come funziona il filetype. Voglio leggere tutti i bit dei dati esadecimali di un file MP3 e farli riprodurre dai miei altoparlanti. :) Non ho idea da dove iniziare poiché non so ancora come i dati vengano effettivamente archiviati in un file MP3.Lettura di file MP3

Grazie per il vostro aiuto

+10

Se hai bisogno di chiedere in questo modo, ti consiglio di abbandonare l'idea di scriverlo da solo, e piuttosto di usare qualche libreria. – nothrow

risposta

17

È possibile acquistare le specifiche per il formato MP3 da here. È circa 160EUR.

Oh, e, a proposito, non è "dati esadecimali". Se sei ancora nel punto in cui ti riferisci a qualsiasi dato non umano leggibile come "esadecimale" (che è un sistema numerico), scavare a capo in un formato di dati binari che coinvolge complessi algoritmi di decodifica/codifica potrebbe essere un po ' troppo per te per il momento

Che ne dici di iniziare scrivendo un lettore in grado di riprodurre file .wav? (Qualsiasi file wav ragionevole, vi occupate di, tenendo conto del formato di file e diversi formati audio)

+1

Qual è la differenza tra le specifiche acquistabili e i link forniti da altre risposte? – Pindatjuh

+0

+1 per il suggerimento di iniziare con i file .wav –

+1

@Pindatjuh: direi completezza (e probabilmente in alcune parti del mondo, legalità). Inoltre molti link sembrano parlare del formato del file (che è ragionevolmente semplice) e non dell'algoritmo di decompressione vero e proprio. –

4

Beh, che sarebbe stata dura :)

in ogni caso, l'applicazione deve essere costituito da due parti - libreria di decompressione/routine e la vostra principale backend, che avrebbe prendere un po 'dat decompresso un blocco e in realtà riprodurlo.

Suggerirei "Data Compression" libro di David Salomon per capire come il decoder dovrebbe in realtà farlo. Le varianti per le tue seconde parti sono, purtroppo, troppo larghe per coprirle in una sola frase.

Si potrebbe anche provare indagare alcuni open-source mp3 decoder/libs decodifica come this one.

+1

+1 per raccomandare la lettura del codice esistente. –

5

Ho fatto un po 'di ricerche, forse ti aiuterà.

enter image description here Un file MP3 Struttura del file è composto da più frame MP3, che consistono in un header e un blocco di dati.Questa sequenza di frame è chiamata stream elementare. I frame non sono elementi indipendenti ("byte reservoir") e pertanto non possono essere estratti su limiti di frame arbitrari. I blocchi di dati MP3 contengono le informazioni audio (compresse) in termini di frequenze e ampiezze. Il diagramma mostra che l'intestazione MP3 è costituita da una parola di sincronizzazione, che viene utilizzata per identificare l'inizio di un frame valido. Questo è seguito da un bit che indica che questo è lo standard MPEG e due bit che indicano che viene usato il layer 3; quindi MPEG-1 Audio Layer 3 o MP3. Dopo questo, i valori saranno diversi, a seconda del file MP3. ISO/IEC 11172-3 definisce l'intervallo di valori per ogni sezione dell'intestazione insieme alle specifiche dell'intestazione. La maggior parte dei file MP3 contiene metadati ID3, che precedono o seguono i frame MP3; come indicato nello schema.

Il codice sorgente di LAME

LAME è un libary MP3, ma è anche open-source, wich significa che è possibile scaricare il codice sorgente e esaminare il problema. http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz/download Ho dato un'occhiata a me stesso, e sembra essere scritto in C o C++, quindi sei fortunato. Se esamini il codice sorgente di LAME e capisci come funziona, forse puoi riuscire a creare una tua libreria MP3. Basta notare che LAME non è una libreria per riprodurre file MP3, ma per codificarli. Ma mentre crea gli MP3 invece di leggerli, penso che la struttura dovrebbe essere un po 'più chiara di qualsiasi altra libreria di lettori MP3.

Spiegazione del formato di file MP3

Questo sembra anche di spiegare come MP3 funziona abbastanza bene, ma è pura teoria, quindi avrai bisogno di un sacco di pazienza. http://www.mp3-converter.com/mp3codec/