2012-06-16 67 views
1

我正在寫一個鬧鐘程序,當鬧鐘時間到時,它會多次播放一個音頻文件。在java中嵌入wav?

該程序的報警一側已完成。現在我正在播放該文件。我使用jFileChooser來選擇文件。 javax.sound.sampled.AudioInputStream,javax.sound.sampled.AudioSystem和javax.sound.sampled.Clip播放我的wav文件。工作也是如此。

但我真的只想播放一個wav文件,我也希望能夠在多個系統上移動鬧鐘,所以我想避免使用jFileChooser來選擇我的鬧鐘鈴聲。每次運行程序時,我都不想瀏覽和選擇文件。

給文件一個相對路徑(例如在與jar相同的文件夾中),然後修復路徑字符串會更容易嗎? 或者它會讓wav成爲jar文件的一部分更容易(這是我更喜歡的,因爲那樣我就不必擔心wav文件了,它只是一個獨立運行的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); } 

} 

回答

6
  • 音頻剪輯添加到JAR
  • 將JAR添加到應用程序的運行時類路徑。 (如果剪輯和類位於同一個Jar中,則不需要)。
  • 使用Class.getResource("/path/to/the.wav)可以獲取剪輯的URL。
  • 使用基於在Java Sound info. page中看到的代碼播放剪輯。

AudioInputStream需要文件對象。

不,他們不是!下面是我在Java聲音信息中向您推薦的源代碼的複製/粘貼。頁。

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用於獲取AudioInputStream,而不是一個File

AudioSystem.getAudioInputStream的調用被重載以接受5種不同的參數類型。最重要的/通用的3是。

+0

文件音效檔=新的文件(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!」); 像這樣? –

+0

1)請不要在評論中放置代碼。將其編輯到問題中,使用代碼格式,並在評論中通知我該問題已被編輯。 2)'File'對於'getResource(String)'完全沒有用處。如果您感到困惑,則需要相對於類路徑(前導'/')或類的包(不包含前導'/')的路徑。 –

+0

1)真誠的道歉! 2)是的,但FileInputStream需要File對象。 –