4

Javaサウンドライブラリと以下のコードを使用して、raspbery piでjavafxを使用してwavファイルを再生しようとしていますが、次のようなエラーが発生します

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian not supported.

グーグルで調べた後、私はそれを見つけました

ビッグ エンディアン オーディオ形式はラズベリー パイ サウンドカード ドライバーでサポートされていないため、getAudioFormat() 関数を変更してリトル エンディアン形式を要求する必要があります。

boolean bigEndian = false;

これまでのところ、次のものが必要だと考えました

private AudioFormat getAudioFormat() {
float sampleRate = 8000.0F;
int sampleInbits = 16;
int channels = 1;
boolean signed = true;
boolean bigEndian = false;
return new AudioFormat(sampleRate, sampleInbits, channels, signed, bigEndian);
}

getAudioFormat()しかし、次のコードからどこで呼び出すのですか。

URL url = this.getClass().getClassLoader().getResource("Audio/athan1.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream( url ); 
4

1 に答える 1

3

AudioSystem( API )のメソッド シグネチャを見てください。方法がありgetAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream)ます。

オーバーライドされた(または、以下を参照) をAudioFormat呼び出して を取得したら、次のことができるはずです (API からの引用)。getAudioFormat()

提供されたオーディオ入力ストリームを変換することにより、指定された形式のオーディオ入力ストリームを取得します。

上書きする代わりにgetAudioFormat()(将来、他のファイルタイプを再生したい場合はどうなりますか?)、質問Conflicting Jar Methodsの最初のスニペットを見てください。これは、メソッドを上書きすることなく、必要なことを正確に実行するようです。上記の方法でオーディオストリームを変換する例でもあります。

編集

これを試して。

URL url = this.getClass().getClassLoader().getResource("Audio/athan1.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url); 
AudioFormat littleEndianFormat = getAudioFormat();
AudioInputStream converted = AudioSystem.getAudioInputStream(littleEndianFormat, ais); 
于 2013-09-13T11:51:04.257 に答える