为什么java AudioSystem.getTargetEncodings(AudioFormat)返回的编码与我们提供的AudioFormat的编码不同?
我有一个AudioInputStream audioInput,对象本身编码为ULAW为什么java AudioSystem.getTargetEncodings(AudioFormat)返回的编码与我们提供的AudioFormat的编码不同?,java,javasound,Java,Javasound,我有一个AudioInputStream audioInput,对象本身编码为ULAW System.out.println( audioInput.getFormat().getEncoding() ); 返回控制台中的ULAW编码 ULAW 但是,当我使用AudioSystem.getTargetEncodings(audioInput)时,它会返回一组不同的编码 Encoding availableEncoding[] = AudioSystem.getTargetEnco
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描述为(如果可能有帮助):
很抱歉说了这么多细节,但以下是我的问题:
根据我目前所了解的情况:
但对于我的音频用途(SF/X用于游戏提示——我遇到了不同类型的文件),我倾向于在将它们打包到游戏中之前,使用Audacity从外部将它们全部转换,以便在游戏过程中不必进行任何转换。根据我到目前为止学到的知识:
但对于我的音频用途(游戏提示的SF/X——我遇到了不同类型的文件),我倾向于在将它们打包到游戏之前,使用Audacity从外部转换它们,这样就不必在游戏过程中进行任何转换。我不知道这里讲的是什么,但如果它起作用,它就起作用了-AudioSystem.getTargetEncodings返回系统可以转换的内容-因此它可以转换为PCM-很好!我不知道完整的故事,所以我不能评论它是否在短期内是合法的,如果它起作用,你很好-如果你遇到问题,回来吧哈哈,很抱歉给你讲课。我真的想尽可能多地提供我所学到的信息。我有点觉得这会适得其反,因为我不知道这里讲的是什么,但如果它有效,它就有效了-AudioSystem.getTargetEncodings返回系统可以转换的内容-因此它可以转换为PCM-很好!我不知道完整的故事,所以我不能评论它是否在短期内是合法的,如果它起作用,你很好-如果你遇到问题,回来吧哈哈,很抱歉给你讲课。我真的想尽可能多地提供我所学到的信息。我觉得这也会适得其反
"Obtains the encodings that the system can obtain from an audio input stream with the specified format using the set of installed format converters."