2

Java でサウンドを再生しようとすると問題が発生します。私が使用する場合

AudioInputStream soundIn = AudioSystem.getAudioInputStream(new File("./sound.wav"));

AudioInputStream を取得すると、機能し、ファイルが正しく再生されます。ただし、使用する場合

AudioInputStream soundIn = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream("./sound.wav")));

私は得る

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream

私がやろうとしているのは、マイクから録音したオーディオを再生することです。メモリ内のバイト配列に WAV ファイルとして保存しましたが、再生できません。ただし、ファイルに保存して File オブジェクトを直接使用すると、再生されます。しかし、何らかの種類の InputStream を使用すると、次のコードを使用した場合を含め、その例外で失敗します。

AudioInputStream soundIn = AudioSystem.getAudioInputStream(new BufferedInputStream(new ByteArrayInputStream(recorder.getLastRecording())));

ここで、recorder.getLastRecording() はバイト配列を返します。何か案は?

4

2 に答える 2

1

このエラーは、実際にはさまざまな形で何度も発生しています。

私が考えているのは、InputStream を使用しようとするとき、または中間ステップの 1 つとして InputStream を必要とするコードを使用しようとするときはいつでも、Java はファイルが InputStream として有効かどうかをテストすることです。「マーキング」はそのようなものをサポートしていますか?ファイルが「リセット可能」かどうかもテストします。

エラー メッセージには、InputStream から有効なファイルを取得できないことが示されていることに注意してください。これはおそらく、Java がファイルに対していずれかのコマンドを実行できず、有効な InputStream と見なされないためです。

ファイルの場所またはより良い URL (私見) からファイルを開く場合、 AudioSystem.getAudioInputStream は、ファイルが有効な InputStream として機能できるかどうかをテストする中間ステップを通過しません。

実際、次の javadef は、私が言っていることをかなり明確にサポートしています。

http://docs.oracle.com/javase/6/docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream(java.io.InputStream )

「getAudioInputStream」のさまざまな形式を比較すると、URL およびファイル パラメータ バージョンと比較して、InputStream パラメータ バージョンのファイルに関する追加の要件があることがわかります。

URL は jar 内のファイルを見つけるのにうまく機能し、コードまたはクラスのルート ディレクトリとの関係でリソースを指定できるので、私は URL を使用するのが一番好きです。

于 2012-07-16T18:52:29.847 に答える
1
// lose the BufferedInputStream
AudioInputStream soundIn = AudioSystem.getAudioInputStream(
    new ByteArrayInputStream(recorder.getLastRecording()));
于 2012-07-16T03:14:14.643 に答える