大家好。
我正在围绕OpenIMAJ库编写一个简单的包装器类,该类能够加载.ogg文件音频并返回采样数据。
这是我为获取 double 数组作为输出而实现的代码:
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;
}
该代码似乎运行良好,但是在调试 session 后,我发现解码的第一个缓冲区内部只有零,例如:
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提取的数据,我尝试删除了第一个缓冲区,之后的数据是正确的,但是我不确定这种解决方法。
预先感谢您的回答。
最佳答案
不知道为什么会这样-我可以用自己的ogg文件复制它。但是,wav文件不会发生这种情况。根本原因似乎是Xuggler内部的某个地方,而不是OpenIMAJ代码库内部的任何地方。
关于java - Java OpenIMAJ .ogg解码器-第一个缓冲区将全零解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40221917/