2017-01-26 1 views
0

私はオブジェクト自体はコンソールでULAWエンコーディングを返しULAWjava AudioSystem.getTargetEncodings(AudioFormat)は、私たちが提供するAudioFormatのエンコーディングと異なるエンコーディングを返すのはなぜですか?

System.out.println(audioInput.getFormat().getEncoding()); 

としてエンコーディングを持っていたAudioInputStream audioInputを持っています。

事がある
PCM_SIGNED 

、私は仕事をしなければならない:私はAudioSystem.getTargetEncodings(audioInput)を使用する場合

ULAW 

しかし、それは返すエンコーディング

Encoding availableEncoding[] = AudioSystem.getTargetEncodings(audioIn.getFormat()); 
    for (Encoding encode : availableEncoding) 
    { 
     System.out.println(encode); 
    } 

の異なるセットを返しますこれらのファイルの多くでは、オブジェクトのエンコーディングとターゲットエンコーディングが一致しません。これらのオーディオファイルがAudioSystemのクリップで開かれ、私はターゲットエンコーディング

audioInput = AudioSystem.getAudioInputStream(Encoding.PCM_SIGNED , audioInput); 
audioClip.open(audioInput); //it works !! 

の一つにオーディオを変換する場合、このアプローチは、すべての音のために働くように見えるが、

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. 

ただし例外をスローすることはできません私がやっていることについての知識はほとんどありません。 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." 

長い詳細は申し訳ありませんが、ここは私の質問です:

  1. なぜJavaのAudioSystemのはありません。 getTargetEncodings(AudioFormat)は、パラメータで指定したAudioFormatのエンコーディングとは異なる結果を返します。

  2. これは、私自身の場合、ファイル自体のエンコーディングがULAWであっても、システムがPCM_SIGNEDエンコーディングでしかファイルを認識して処理できないことを意味しますか?

  3. 私の解決策はありますか?それは本当にバグ私を私がこれまで学んだことによる

+2

ここでは講義の内容はわかりませんが、うまくいけば機能します - AudioSystem.getTargetEncodingsはシステムが変換できるものを返すので、PCM - Fineに変換できます。私は完全な話を知っていないので、あなたがうまくいけば、短期的にはその合法性があるとコメントすることはできません - 問題に遭遇した場合、 – gpasch

+0

母親、講演をおねがいします。私は本当にこれまでに学んだ情報を可能な限り提供したいと思っています。私はちょっとそれが逆光していると感じました – LameLoura

答えて

2

正当な理由なしに動作するように思われる解決策を持っていることがたくさん:

Javaはのデフォルトの設定を見ている
  1. オーディオファイルのフォーマットではなく、システムの設定に合わせて再生してください。多くの(ほとんどの)コンピュータシステムは、PCM_SIGNEDを再生するように設定されています。

  2. 「のみ」とは何かを意味します。あなたのシステムの再生設定を変更する方法はおそらくありますが、私はいつもデフォルトまたは "サポートされている"オプションの1つになっています。

  3. 解決策は完全に合法です!ストリーミング変換は、このような状況のために書かれました。多くのオーディオファイルタイプは、限定されたサブセットを再生するように設定されたシステムです。また、ファイルを新しい形式でプログラムで変換して保存する場合にも役立ちます。

しかし、私のオーディオ用途(ゲームの手がかりのためのSF/X - 私は、さまざまな種類のファイルに遭遇)のために、私は、前のゲームでそれらをパッケージにはAudacityを使用して、外部から、それらすべてを変換する傾向がありますゲーム中に変換を行わないようにします。

関連する問題