2012-10-23 16 views
6

Mi chiedo come posso ottenere informazioni musicali come l'ampiezza da un file audio?Ottenere il modello d'onda di un file audio in Java

Supponiamo di avere un file audio grezzo, quello che voglio estrarre i dati dal file che mi consente di generare una curva come http://www1.icsi.berkeley.edu/Speech/mr/nearfar.html. Una volta che ho ottenuto questa curva, io eseguire FFT, ecc

enter image description here

ho cercato per la ricerca di soluzioni in Java suono, ma quello che so solo finora è che posso versare i dati in byte[] utilizzando AudioInputStream. Ma come faccio a tradurre quello byte[] in un double[] che contiene informazioni reali sul suono? In questo caso, i valori nello double[] rappresentano l'ampiezza .

Qualcuno potrebbe fornire una soluzione per risolvere questo problema in Java?

risposta

5

file WAV tipica è 16 bit little endian, in modo da poter prendere ogni due byte consecutivi, B1 e B2, e ottenere l'ampiezza come segue:

(double) (b2 << 8 | b1 & 0xFF)/32767.0; 

se l'ingresso è stereo, primi due byte sarebbe essere lasciato canale, quindi due byte per canale destro.

+0

ovviamente, prima è necessario leggere oltre l'intestazione. –

+2

@BjornRoche: l'OP ha detto di usare 'AudioInputStream', salta l'intestazione e fornisce solo byte PCM validi. –

+0

Oops. Hai ragione, mi dispiace. –