0

BatteryBeeper というタイトルの個人用ソフトウェアを作成しています。充電がリマインダーに設定したものになると、ラップトップを充電するようにリマインダーが表示されます。

充電が設定されたしきい値に達したときにサウンドを再生することになっています。

私は答えを見ました:ジャーで音が鳴らず、ジガー・AudioInputStreamジョシが言及したのと同じように構成されています。

ただし、null 例外が発生します。

java.lang.NullPointerException
    at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
    at demo.BatteryBeeper.setupSoundPlayback(BatteryBeeper.java:169)
    at demo.BatteryBeeper.<init>(BatteryBeeper.java:41)
    at demo.BatteryBeeper.main(BatteryBeeper.java:35)  

サウンドをロードするコードは次のとおりです。

public void setupSoundPlayback(){
        try{
            buzzer = AudioSystem.getClip();
            in = AudioSystem.getAudioInputStream(BatteryBeeper.class.
                    getResourceAsStream("sound/buzzer3_x.wav"));
            buzzer.open(in);
        }catch(Exception e){
            e.printStackTrace();
        }

    }  

これを再生するコードは次のとおりです。

public void playSound(){
        buzzer.start();
    }  

問題の原因は何ですか?

その他

これは通常の Eclipse プロジェクトです。その下にwaveファイルが あるsoundフォルダがありますsrc

編集

AlexR の回答の後、パスを変更し、新しい例外を取得しました。

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
    at demo.BatteryBeeper.setupSoundPlayback(BatteryBeeper.java:169)
    at demo.BatteryBeeper.<init>(BatteryBeeper.java:41)
    at demo.BatteryBeeper.main(BatteryBeeper.java:35)
4

2 に答える 2

5

あなたの問題は音の再生ではありません。あなたの問題は、埋め込みリソースへのアクセスにあります。使用している場合BatteryBeeper.class.getResourceAsStream("sound/buzzer3_x.wav")、クラスと同じパッケージにあるリソースを取得しようとしますBatteryBeeper。これは、ファイルが/demo/sound/buzzer3_x.wav. これは間違っているようです。ファイルが実際にsound/buzzer3_x.wav使用されている場合getResourceAsStream("/sound/buzzer3_x.wav")(パスの先頭のスラッシュに注意してください)。

于 2013-01-17T09:05:06.557 に答える
0

それでも「InputStreamからAudioInputStreamを取得できませんでした」というメッセージが表示される場合は、InputStreamステージが情報エラーをスローしないことが問題である可能性があります。

AudioSystem.getAudioInputStream(InputStream)の仕様を見ると、Mark / Resetアクションがサポートされていないために入力ストリームが失敗する可能性があることがわかりますが、何らかの理由で、他のエラーメッセージをスローすることを選択します!!

http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream%28java.io.InputStream%29

より良いのは、AudioSystem.getAudioInputStream(URL)の形式を使用することです。中間のInputStreamがafaikで作成されることはないため、オーディオファイルのマーク付け可能性は問題になりません。

http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream%28java.net.URL%29

URLフォームには、Jarに埋め込まれたファイルをうまく処理できるという追加の利点があります。もちろん、正しいアドレスを指定する必要があります。

于 2013-01-18T20:07:42.647 に答える