大家早安。
我正在围绕 OpenIMAJ 库编写一个简单的包装类,它能够加载 .ogg 文件音频并返回采样的数据。
这是我为获取双数组作为输出而实现的代码:
public List<double[]> getDoubleSample() throws AudioSamplerException {
if (audioSampler.getFormat().getJavaAudioFormat().getChannels() != 1)
throw new AudioSamplerException("Cannot decode multichannel track as array");
List<double[]> bufferedSamples = new LinkedList<>();
SampleChunk sc;
SampleBuffer sb;
while ((sc = audioSampler.nextSampleChunk()) != null) {
sb = sc.getSampleBuffer();
double[] data = sb.asDoubleArray();
bufferedSamples.add(data);
}
return bufferedSamples;
}
该代码似乎运行良好,但经过调试会话后,我发现第一个解码的缓冲区内部只有零,例如:
bufferedSamples = {LinkedList@1213} size = 218
0 = {double[96000]@1215}
0 = 0.0
1 = 0.0
2 = 0.0
3 = 0.0
4 = 0.0
5 = 0.0
6 = 0.0
7 = 0.0
and so on...
那个零是正确的还是我在解码文件时做错了什么,或者在返回数组之前我需要一个额外的步骤?
根据使用 Audacity 提取的数据,我尝试删除第一个缓冲区,之后的数据是正确的,但我不确定这个解决方法。
预先感谢您的回答。