1

プロジェクト内のパッケージにある.wavファイルにアクセスしたい。

たとえば、2つのパッケージがあります。

  • program
  • sounds

program/something.classから遊びたいsounds/asound.wavです。これはどのように可能ですか?

clip.open(AudioSystem.getAudioInputStream(new File(filename)));
clip.start();
//.... something inbetween
clip.stop();

これfilenameがですが、パッケージ内のC:\\projects\\something\\sounds\\への相対パスを指定するにはどうすればよいですか?asound.wav

4

3 に答える 3

3

ClassLoader.getResourceAsStreamクラスの読み込みに使用しているのと同じインフラストラクチャを介してリソースを読み込むために使用します。クラスローダーに応じて、これはディレクトリ内のファイル、ローカルJARファイルのコンテンツ、またはリモートリソースになります。

getClass().getClassLoader().getResourceAsStream("asound.wav");

メソッドの名前で示されているようにInputStream、ファイルではなく、リソースのを取得します。リソースがJARファイルなどの別のファイルの一部である可能性があると考える場合、Fileオブジェクトは常に単一のファイルを指し、それらの一部ではないため、これは理にかなっています。

于 2012-11-12T10:37:27.943 に答える
1
URL url = this.getClass().getResource("/sounds/asound.wav");

/クラスから取得したクラスローダーにプレフィックスを指定すると、パッケージの「ルート」から検索されます。


次に、をロードして再生するために、 JavaSoundタグWikiに示されているコードを参照してください。Clip

于 2012-11-12T11:01:11.017 に答える
1

ここでも言及されているように:のドキュメントは次のようにAudioSystem.getAudioInputStream(InputStream)述べています:

このメソッドの実装では、複数のパーサーがストリームを調べて、それをサポートしているかどうかを判断する必要がある場合があります。これらのパーサーは、ストリームにマークを付け、ストリームをサポートしているかどうかを判断するのに十分なデータを読み取り、サポートしていない場合は、ストリームの読み取りポインターを元の位置にリセットできる必要があります。入力ストリームがこれらの操作をサポートしていない場合、このメソッドはIOExceptionで失敗する可能性があります。

したがって、解決策は次のようになります

clip.open(AudioSystem.getAudioInputStream(
    new BufferedInputStream(getClass().getResourceAsStream("/Sounds/asound.wav"))));
于 2012-11-12T12:28:03.977 に答える