1

私は2つの同様のウェーブ(同様の形式)を持っており、このコードでそれらをプリロードします

Clip click1;
Clip click2;

File soundFile = new File("click1.wav");
AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile);
DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
click1 = (Clip) AudioSystem.getLine(info);
click1.open(sound);

soundFile = new File("click2.wav");
sound = AudioSystem.getAudioInputStream(soundFile);
info = new DataLine.Info(Clip.class, sound.getFormat());
click2 = (Clip) AudioSystem.getLine(info);
click2.open(sound);

最初のファイルはロードされますが、2 番目のファイルは例外をスローします。

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.
    at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:492)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1278)
    at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:107)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1059)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1149)

click2 のクリップに click1.wav を設定しようとしましたが、同じエラーが発生しました。

私はUbuntu 11.04を持っていますが、これは java -version の結果です

java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode

編集

これは、DataLine.Info の System.out.println の結果です。

click1 = インターフェイス クリップ サポート形式 PCM_SIGNED 11025.0 Hz、16 ビット、モノラル、2 バイト/フレーム、リトル エンディアン

click2 = インターフェイス クリップ サポート形式 PCM_SIGNED 11025.0 Hz、16 ビット、モノラル、2 バイト/フレーム、リトル エンディアン

4

1 に答える 1

0

2 つのトラブルシューティングのアイデア:

1) ファイルを切り替えます。エラーは最初のロードに切り替わりますか? そうでない場合、問題はおそらく次の提案によるものです。

2) 'info' や 'sound' を再利用しようとせず、新しい変数を作成してください。

エラーはどの行で発生しますか? Java ではサウンド変数を再利用できるとは思いません。理由はよくわかりません。変数を再利用しようとしたときに、Java で再利用できるようになる前に、'soundFile' 変数に戻る必要があったことを覚えています。

于 2013-03-28T20:50:19.853 に答える