0

大家早安。

我正在围绕 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 提取的数据,我尝试删除第一个缓冲区,之后的数据是正确的,但我不确定这个解决方法。

预先感谢您的回答。

4

1 回答 1

0

不知道为什么会这样 - 我可以用我自己的 ogg 文件复制它。但它不会发生在 wav 文件中。根本原因似乎在 Xuggler 的深处,而不是 OpenIMAJ 代码库中的任何东西。

于 2016-10-26T12:29:46.560 回答