0

Javaで音楽プレーヤーを作ろうとしています。私は多数の Web サイトにアクセスし、リソースを調べてどのように機能するかを確認しましたが、AudioInputStream は、私が最も期待していない場所で nullPointerException を返します! 以前に誰もこの質問をしたことがないようです (さらに、コメントするのに十分な担当者がいないため、これを別の質問にする必要がありました)。そのため、問題が発生しているコードを示します。

Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getInputStream(new File("mywav.wav"));
clip.open(ais);
clip.start();

これを Thread で囲んで Thread を起動したので、十分に再生されるはずです。しかし、「AudioInputStream ais = AudioSystem.getInputStream(....」という行で nullPointerException が発生します。

4

2 に答える 2

1

1) どこからでもサウンドをロードできます。「サウンド」という名前のフォルダーは、アート グラフィック用の「イメージ」という名前のフォルダーなど、単なる便利なフォルダーです。

2) 入力ソースとしてファイルの代わりに URL を使用すると、運が良くなると思います。

したがって:

URL url = this.getClass().getResource("mywav.wav");
AudioInputStream aiStream = AudioSystem.getAudioInputStream(url);   

出てくるあいまいな問題の 1 つ (そして、私は約 12 人が同じエラーを起こしているのを助けました) は、自分のやり方で行うと、InputStream がある中間ステップを作成することです。AudioSystem.getAudioInputStream(url) と AudioSystem.getAudioInputStream(inputStream) の JavaDoc を確認すると、InputStream は「マーク可能な」ファイルでなければならず、これが保証されないことがわかります。URL フォームでは、そのようなテストや要件はありません。

簡単に閲覧できるように、ここにリンクがあります。 http://docs.oracle.com/javase/6/docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream(java.net.URL ) http://docs.oracle.com/javase/6/ docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream(java.io.InputStream )

何らかの理由で、システムがwavファイルの処理方法を「知っている」というデフォルトがあったようですが、このデフォルトはもはや存在せず、InputStreamからAudioInputStreamを取得する方法を使用した多くの人々突然サウンドコードが壊れていることに気づきました。これに関する公式の Oracle バグ レポートもあります: #7095006

于 2012-11-25T09:16:12.727 に答える
0

代わりにこれを試してください

private AudioClip clip;
clip = getAudioClip(getCodeBase(), "sounds/mywav.wav");
clip.loop();

サウンドという名前の新しいフォルダーを作成する必要があります。次に、サウンドファイルをフォルダーに入れます。すべてのサウンドは .wav でなければならないことに注意してください

于 2012-11-24T18:02:46.877 に答える