2014-03-06 97 views
0

我正在製作一個需要連續播放文件的小程序。以下是我編寫的用於播放文件的代碼,但我不知道如何連續執行。有人請幫忙。如何在java中連續播放音頻文件?

public class TanpuraAudio { 

    AudioStream as = null; 
    String fileName = "C://s.wav"; 
    InputStream in = null; 

    public void play() throws IOException, InterruptedException { 

     try { 
      in = new FileInputStream(fileName); 
     } catch (FileNotFoundException e) { 
      System.out.println("Media file not present in C drive."); 
     } 

     try { 
      as = new AudioStream(in); 

     } catch (IOException e) { 
     } 

     AudioPlayer.player.start(as); 

    } 

    public void stop() throws IOException, InterruptedException { 
     AudioPlayer.player.stop(as); 
    } 
} 
+1

你必須實現一些能夠在音軌結束後重新啓動音軌的東西。可能你會希望在單獨的線程上做到這一點,以免混淆其他應用程序。歡迎使用併發性,現在你已經更多的問題需要處理 –

回答

2

我正在研究Tanpura!我有一個使用FM合成來產生無人機音調的原型。我正在使用界面並允許調整各個音符。

我不會推薦AudioPlayer作爲播放聲音文件的意思。相反,我會使用剪輯或SourceDataLine。

剪輯可以循環,正如垃圾桶所述。但是,處理循環重啓點可能會非常棘手。

要播放wav文件,我會考慮使用SourceDataLine輸出。爲了處理循環,我會創建兩個SourceDataLines,並交替它們。您也可以重疊兩端,以便在文件的開始和結尾之間平滑過渡。如果在重疊中可能存在某些「給定」,則可以使用Thread.sleep()方法來提供循環的時間,因爲Windows操作系統上的Thread.sleep()可以關閉多達15毫秒。

對於我自己,我用我自己創作的Java復調合成器生成音調,重疊音符。我不確定我是否準備好解釋FM合成的所有細節。這是一個很大的話題。另外,我正在使用我寫的「混音器」,這在某種程度上取決於Java庫「TinySound」中調音臺的規模(如果您不想製作自己的音頻混音器,請在github上提供)。

TinySound可以幫助在簡化的SourceDataLine的處理兩個副本,甚至兩個剪輯(的方面,如果你決定重疊剪輯的末端,而不是使用內置的連續循環功能。