從本質上說我要問的問題是,我怎麼看到一個wav文件的數據時,它會導致夾崩潰,由於是一個大文件,然後確定它隨着歌曲的播放而變化。想想那些像winamp一樣的節目中的振動,以便讓音樂變得可見。在這種情況下,我需要形成聲波的數字值。我需要一些幫助閱讀與Java中的WAV文件,並確定其各種幅度
我做了一些瘋狂研究的東西像採樣率,甚至設法找到了一些代碼,但它並沒有幫助我完成這項任務。
如果有人在哪裏這麼好心提供一個大致的輪廓和一些代碼量我將不勝感激。由於
從本質上說我要問的問題是,我怎麼看到一個wav文件的數據時,它會導致夾崩潰,由於是一個大文件,然後確定它隨着歌曲的播放而變化。想想那些像winamp一樣的節目中的振動,以便讓音樂變得可見。在這種情況下,我需要形成聲波的數字值。我需要一些幫助閱讀與Java中的WAV文件,並確定其各種幅度
我做了一些瘋狂研究的東西像採樣率,甚至設法找到了一些代碼,但它並沒有幫助我完成這項任務。
如果有人在哪裏這麼好心提供一個大致的輪廓和一些代碼量我將不勝感激。由於
此代碼未經測試,但這個大約是你應該做的:
File fileIn = new File("C:\\path\\to\\your\\file.wav");
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(fileIn);
int size = audioInputStream.available();
byte[] b = new byte[size];
if (size == audioInputStream.read(b)) {
// Do what you have to do
}
嗯我見過類似的代碼,但是你的代碼似乎只從我的wav文件中讀取0 ...有趣的是,當我打印b.length時,我得到了16個,因此可能會變得有用。感謝您爲我提供了一個很好的起點。我很感激! – casparcedro
如果文件開頭處有沉默,那麼值爲0是正常的,你是否完全讀取了你的文件? – madgangmixers
我做到了。但是,我相信這隻能讀取1個樣本,而Wav文件每秒有44100個樣本?好的,這裏有一些新的代碼,但我不知道自己在做什麼。 \t \t 文件\t = FILEIN新文件( 「yolo1.wav」); \t \t的AudioInputStream的AudioInputStream = AudioSystem.getAudioInputStream(FILEIN); 。 \t \t INT的採樣大小= audioInputStream.getFormat()getSampleSizeInBits(); \t \t byte [] b =新字節[sampleSize]; \t \t long framelength = audioInputStream.getFrameLength(); \t \t int i = 0; \t \t爲(I = 0;我<=幀長度;我++){ \t \t而(!audioInputStream.read(B)= - 1){ \t \t //讀取1個樣品 \t \t \t System.out的。的println第(i + 「:」 + 「」 + b [1]); – casparcedro
格式的音頻文件規格:http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/ WAVE.html –
有用,但我寧願不必重新發明關於java代碼的輪子,並會欣賞一些預製代碼。 – casparcedro