Java OpenIMAJ .ogg解码器 - 第一个缓冲区解码全零

时间:2016-10-24 15:17:05

标签: java audio openimaj

Goodmornig所有人。

我正在围绕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提取的数据,但我不确定这个解决方法。

提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

不确定为什么会这样 - 我可以用我自己的ogg文件复制它。但是,wav文件不会发生这种情况。根本原因似乎在Xuggler内部,而不是OpenIMAJ代码库中的任何内容。