【发布时间】:2011-05-12 19:33:07
【问题描述】:
我使用该 API 在 Java 中读取 wav 文件:Reading and Writing Wav Files in Java
我用 Java 读取了一个 wav 文件,并希望将所有值放入一个数组列表中。我写道:
// 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:我之前的问题:
How to divide a wav file into 1 second pieces with Java?
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
【问题讨论】:
-
很好的文档并标记为很好的评论。还有一件事,那篇文章说原因与 Thread.sleep() 相关。但是代码中没有 sleep() 方法。它是从任何其他方法调用的吗?(即 FileInputStream 的 read 方法或其他任何方法?)
-
这可能是 WavFile API 在内部执行的操作,除非您以多线程方式进行这些调用。