我的AudioInputStream audioInput該對象本身具有編碼爲ULAW爲什麼java AudioSystem.getTargetEncodings(AudioFormat)返回與我們提供的AudioFormat的編碼不同的Encoding?
System.out.println(audioInput.getFormat().getEncoding());
其中在控制檯返回ULAW編碼。
ULAW
然而,當我使用AudioSystem.getTargetEncodings(audioInput)它返回一組不同的編碼
Encoding availableEncoding[] = AudioSystem.getTargetEncodings(audioIn.getFormat());
for (Encoding encode : availableEncoding)
{
System.out.println(encode);
}
的其中返回:
PCM_SIGNED
的事情是,我要工作有很多這些文件,其中對象編碼和目標編碼不匹配。這些音頻文件無法被AudioSystem夾被打開,拋出一個異常
Clip audioClip = AudioSystem.getClip();
audioClip.open(audioInput);
// this throws error javax.sound.sampled.LineUnavailableException: line with format ULAW 8000.0 Hz, 8 bit, mono, 1 bytes/frame, not supported.
但是,如果我的聲音轉換爲目標編碼
audioInput = AudioSystem.getAudioInputStream(Encoding.PCM_SIGNED , audioInput);
audioClip.open(audioInput); //it works !!
之一。雖然這種做法似乎爲所有發出的聲音與我一起工作的文件,我幾乎不知道我在做什麼。根據Java文檔,在AudioSystem.getTargetEncodings說明(如果它可以幫助):
"Obtains the encodings that the system can obtain from an audio input stream with the specified format using the set of installed format converters."
對不起,長細節,但這裏是我的問題:
爲什麼java的AudioSystem。 getTargetEncodings(AudioFormat)返回與我們在參數中提供的AudioFormat的編碼不同的結果?
因此,在我的情況下,這是否意味着即使文件本身的編碼是ULAW,系統也只能用PCM_SIGNED編碼來感知和處理文件?
我的解決方案是否合法?這真的竊聽了我很多有,似乎沒有一個很好的理由
我不知道這裏講什麼,但如果它的工作原理 - AudioSystem.getTargetEncodings返回系統可以轉換到 - 所以它可以轉換爲PCM - 好!我不知道完整的故事,所以我不能評論,如果它的合法短期內,如果它的工作你很好 - 如果你遇到問題回來 – gpasch
哈哈,爲講課抱歉。我很想盡可能地提供我所學到的信息。我有點覺得它也是惹火 – LameLoura