[英]Problem with reading wav file with Java
我使用該API在Java上讀取wav文件:在Java中讀取和寫入Wav文件
我使用Java讀取了wav文件,並希望將所有值放入arraylist。 我寫:
// Open the wav file specified as the first argument
WavFile wavFile = WavFile.openWavFile(fileToRemoveSilence);
List<Double> allBuffer = new ArrayList<Double>();
....
do {
// Read frames into buffer
framesRead = wavFile.readFrames(buffer, 50);
for (double aBuffer : buffer) {
allBuffer.add(aBuffer);
}
} while (framesRead != 0);
當我在調試器中檢查allBuffer的大小時,它說:
74700
但是在我使用的代碼中:
wavFile.display();
它的輸出:
....
... Frames: 74613
....
我的allbuffer大於該API顯示的幀。 怎么來的?
PS:我以前對此有疑問:
PS2:我修復了錯誤,但是在運行程序時有時會出現該錯誤:可能是什么問題?
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at sun.java2d.Disposer.run(Disposer.java:127)
at java.lang.Thread.run(Thread.java:662)
刪除引用時發生異常:java.lang.InterruptedException
我想你想要這樣的東西:
// Open the wav file specified as the first argument
WavFile wavFile = WavFile.openWavFile(fileToRemoveSilence);
List<double[]> allBuffer = new List<double[]>();
int bufferSize = 44100; // 1 second, probably
double[] buffer;
....
do {
// Read frames into buffer
buffer = new double[bufferSize];
framesRead = wavFile.readFrames(buffer, bufferSize);
if (framesRead == bufferSize)
{
allBuffer.add(buffer);
}
else
{
double[] crippleBuffer = new double[framesRead];
Array.Copy(buffer, crippleBuffer, framesRead);
allBuffer.add(crippleBuffer);
break;
}
}
這將為您提供一個由1秒的double[]
個示例數組組成的List
(實際上,最后一個數組將小於一整秒)。 然后,您可以遍歷此數組集合,並將每個數組轉換為單獨的WAV文件。
從緩沖區復制到列表時,需要考慮framesRead。 在上次通話中,您復制的雙打內容比從文件中實際讀取的多。 (即與您第一個鏈接中的示例代碼完全一樣)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.