1

目覚まし時計のプログラムを書いていて、目覚まし時計が鳴ったときにオーディオファイルを数回再生していました。

プログラムのアラーム側が実行されます。これで、ファイルを再生することになりました。jFileChooserを使用してファイルを選択します。javax.sound.sampled.AudioInputStream、javax.sound.sampled.AudioSystem、javax.sound.sampled.Clipを使用して、wavファイルを再生します。同様に働いています。

しかし、私は本当に1つのwavファイルを再生したいだけでなく、この目覚まし時計を複数のシステムで移動できるようにしたいので、jFileChooserを使用してアラーム音を選択することは避けたいと思います。プログラムを実行するたびにファイルを参照して選択する必要はありません。

ファイルに相対パス(たとえば、jarと同じフォルダー内)を指定してから、パス文字列を修正する方が簡単でしょうか?または、どういうわけかwavをjarファイルの一部にする方が簡単でしょうか(これは、wavファイルについてまったく心配する必要がないので私が好むものです。1つのjarファイルが独立して機能します。目覚まし時計。バイト配列、多分?)

前もって感謝します!これがあまりにも馬鹿ならごめんなさい。私は初心者です!

これがAudioInputStreamの私のコードです。

 public void getaudPath() {
try {
    JFileChooser chooser;
   String choosertitle=null;
    chooser = new JFileChooser();
      FileNameExtensionFilter filter = new FileNameExtensionFilter(
        "WAV only", "wav");
    chooser.setFileFilter(filter);
    chooser.setCurrentDirectory(new java.io.File("."));
    chooser.setDialogTitle(choosertitle);
        chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
        apath = (chooser.getSelectedFile()).toString();
      File soundFile = new File(apath);
AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
     URL url = this.getClass().getClassLoader().getResource(apath);
         clip = AudioSystem.getClip();
         clip.open(audioIn);
         JOptionPane.showMessageDialog(this,"Got file, A-okay!");
}  else {
          apath = null;
      }} catch (Exception e) {JOptionPane.showMessageDialog(this,"Error in getting sound file:=> "+e); }

}
4

1 に答える 1

5
  • オーディオ クリップを Jar に追加する
  • Jar をアプリのランタイム クラスパスに追加します。(クリップとクラスが同じ Jar にある場合は必要ありません)。
  • Class.getResource("/path/to/the.wav)クリップへの URL を取得するために使用します。
  • Java サウンド情報に表示されるコードに基づくコードを使用してクリップを再生します。ページ

AudioInputStream にはファイル オブジェクトが必要です。

いいえそうではありません! 以下は、Java Sound 情報で参照したソースのコピー/貼り付けです。ページ。

import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;

public class LoopSound {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // A GUI element to prevent the Clip's daemon Thread
                // from terminating at the end of the main()
                JOptionPane.showMessageDialog(null, "Close to exit!");
            }
        });
    }
}

ではなく、を取得するためにURLを使用します。 AudioInputStreamFile

への呼び出しAudioSystem.getAudioInputStreamは、5 つの異なる引数の型を受け入れるようにオーバーロードされています。最も重要/一般的な 3 つは次のとおりです。

于 2012-06-16T06:52:41.647 に答える