使用Ogg Vorbis SPI解码.ogg文件对于小文件大小会失败

时间:2014-05-19 22:03:24

标签: java audio ogg

我使用Ogg Vorbis SPI作为解码.ogg文件的方法。

我用于加载.ogg文件并转换为PCM的代码段与文档中建议的文件没有太大区别:

// The streams are valid at this point.
try (InputStream bin = new BufferedInputStream(file.getInputStream(entry) );
     AudioInputStream in = AudioSystem.getAudioInputStream(bin) ) {

    AudioFormat baseFormat = in.getFormat();
    // At this point the format is valid:
    // VORBISENC 44100.0 Hz, unknown bits per sample, mono, 1 bytes/frame, 12000.0 frames/second, 
    // I can't make a Clip directly from this or it will be all buzzy, so I convert to PCM

    // Decoding to PCM
    AudioFormat decodedFormat =
        new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
                        baseFormat.getSampleRate(),
                        16,
                        baseFormat.getChannels(),
                        baseFormat.getChannels() * 2,
                        baseFormat.getSampleRate(),
                        false);

    // This is where the issues appear...
    AudioInputStream decodedInputStream = AudioSystem.getAudioInputStream(decodedFormat, in);

    Clip clip = AudioSystem.getClip();
    clip.open(decodedInputStream);

    // entry.getName is basically the filename. Any files with '0' frame length didn't get converted properly.
    System.out.println("Clip " + entry.getName() + " loaded at " + clip.getFrameLength() + " frame length");

    return clip;
} catch { ... }

发生的事情是我正在加载几个小的声音文件,范围从5K到32K的高(ogg格式)。但是,一些文件无法正确转换为PCM。我注意到他们都有共同点;它们的大小从5K到6K不等。声音文件似乎开始在7K左右正确转换。我测试了这个,听了11K的声音并将其切断,直到它不再转换(~6K)

我认为绕过它的方法是添加一些听不见的噪音来填充大小,但我更喜欢正确转换声音文件而不管大小。除了API本身之外,对声音表示的概念完全陌生,我不知道从哪里开始寻找可能发生这种情况的原因。

0 个答案:

没有答案