我正在使用Ogg Vorbis SPI作爲解碼.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本身之外,對於聲音表示的概念還完全陌生,我不知道從哪裏開始看看爲什麼會出現這種情況。
我在想如果AudioInputStream.getFormat()移動流中的位置並且不重置它。也許嘗試關閉並重新打開流? – GreyBeardedGeek
感謝您的關注;在我使用getFormat()後,我剛剛嘗試了reset()並關閉/打開一個新流。不幸的是,問題仍在發生。 –