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

标签 java audio openimaj

大家好。

我正在围绕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/

相关文章:

java - dao(或者可能是存储库)应该将 id 或实体作为参数

java - 即时添加产品以订购

java - OpenImaj - 人脸检测 - 显示找到的人脸

java - 如何在数据库中保存时区信息?

java - 使用 MediaProjection API 截取屏幕截图时的额外填充

android - 如何使用 Android AudioRecord 和 MediaCodec 作为音频编码器正确处理 PTS?

java - 获取java.lang.IllegalStateException

reactjs - 为什么我的 “Audio-Button”不播放声音(onClick)

java - 如何为 openimaj 创建 pom.xml?

java - OpenImaj - 识别形状