首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么java AudioSystem.getTargetEncodings( AudioFormat )返回与我们提供的AudioFormat编码不同的编码?

为什么java AudioSystem.getTargetEncodings( AudioFormat )返回与我们提供的AudioFormat编码不同的编码?
EN

Stack Overflow用户
提问于 2017-01-26 03:47:39
回答 1查看 194关注 0票数 0

我有一个AudioInputStream audioInput,对象本身将其编码为ULAW。

代码语言:javascript
复制
System.out.println( audioInput.getFormat().getEncoding() ); 

返回控制台中的ULAW编码。

代码语言:javascript
复制
ULAW

但是,当我使用AudioSystem.getTargetEncodings( audioInput )时,它返回一组不同的编码

代码语言:javascript
复制
    Encoding availableEncoding[] =  AudioSystem.getTargetEncodings( audioIn.getFormat() );
    for ( Encoding encode : availableEncoding ) 
    {
        System.out.println( encode );
    }

返回:

代码语言:javascript
复制
PCM_SIGNED

问题是,我必须处理很多这样的文件,在这些文件中,对象和目标编码的编码不匹配。这些音频文件不能被AudioSystem剪辑打开并引发异常

代码语言:javascript
复制
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.

但是,如果我将音频转换为目标编码之一

代码语言:javascript
复制
audioInput = AudioSystem.getAudioInputStream( Encoding.PCM_SIGNED , audioInput);
audioClip.open( audioInput );  //it works !!

虽然这种方法似乎适用于所有的声音文件工作,但我几乎没有足够的知识,我正在做什么。根据java文档,AudioSystem.getTargetEncodings描述是(万一可能有所帮助):

代码语言:javascript
复制
"Obtains the encodings that the system can obtain from an audio input stream with the specified format using the set of installed format converters."

很抱歉有这么长的细节,但以下是我的问题:

  1. 为什么java AudioSystem.getTargetEncodings( AudioFormat )返回的结果与我们在参数中提供的AudioFormat的编码不同?
  2. 因此,在我的例子中,这是否意味着系统只能使用PCM_SIGNED编码来感知和处理文件,即使文件本身的编码是ULAW?
  3. 我的解决方案合法吗?有一个似乎没有充分理由有效的解决方案真的让我很苦恼。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 19:11:23

根据我到目前为止学到的:

  1. Java正在查看系统配置的默认回放设置,而不是音频文件的格式。很多(大多数?)计算机系统被设置为回放PCM_SIGNED。
  2. 取决于你所说的“只”是什么意思。可能有一些方法可以更改您的系统的播放首选项,但我总是使用默认选项,或者“支持”选项之一。
  3. 解决办法是完全合法的!流转换就是针对这种情况编写的:许多音频文件类型,系统设置为播放有限的子集。如果您希望以新格式以编程方式转换和保存文件,它们也会有所帮助。

但是对于我的音频用途(SF/X用于游戏提示-我遇到不同类型的文件),我倾向于将它们全部转换,外部使用Audacity,然后再将它们打包到游戏中,这样就不必在游戏中进行任何转换了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41866599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档