国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

使用javax.sound實現簡單音頻播放

2024-07-14 08:39:51
字體:
來源:轉載
供稿:網友

本文實例為大家分享了javax.sound實現簡單音頻播放的具體代碼,供大家參考,具體內容如下

/** * @see * @author Al_assad yulinying_1994@outlook.com * @date 2016年11月17日 下午6:27:59 * @version V1.0  * Description: 簡易音頻播放器(只支持AU,RA,WAV) *       在不使用JMF的情況下快速實現音頻播放 * */ import javax.sound.sampled.*; import java.io.*;  public class MusicPlayer {   private String musicPath; //音頻文件   private volatile boolean run = true; //記錄音頻是否播放   private Thread mainThread;  //播放音頻的任務線程      private AudioInputStream audioStream;   private AudioFormat audioFormat;   private SourceDataLine sourceDataLine;      public MusicPlayer(String musicPath) {     this.musicPath = musicPath;     prefetch();   }      //數據準備   private void prefetch(){     try{     //獲取音頻輸入流     audioStream = AudioSystem.getAudioInputStream(new File(musicPath));     //獲取音頻的編碼對象     audioFormat = audioStream.getFormat();     //包裝音頻信息     DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class,         audioFormat,AudioSystem.NOT_SPECIFIED);     //使用包裝音頻信息后的Info類創建源數據行,充當混頻器的源     sourceDataLine = (SourceDataLine)AudioSystem.getLine(dataLineInfo);          sourceDataLine.open(audioFormat);     sourceDataLine.start();          }catch(UnsupportedAudioFileException ex){       ex.printStackTrace();     }catch(LineUnavailableException ex){       ex.printStackTrace();     }catch(IOException ex){       ex.printStackTrace();     }        }   //析構函數:關閉音頻讀取流和數據行   protected void finalize() throws Throwable{     super.finalize();     sourceDataLine.drain();     sourceDataLine.close();     audioStream.close();   }      //播放音頻:通過loop參數設置是否循環播放   private void playMusic(boolean loop)throws InterruptedException {     try{         if(loop){           while(true){             playMusic();           }         }else{           playMusic();           //清空數據行并關閉           sourceDataLine.drain();           sourceDataLine.close();           audioStream.close();         }            }catch(IOException ex){       ex.printStackTrace();     }             }   private void playMusic(){     try{       synchronized(this){         run = true;       }       //通過數據行讀取音頻數據流,發送到混音器;       //數據流傳輸過程:AudioInputStream -> SourceDataLine;       audioStream = AudioSystem.getAudioInputStream(new File(musicPath));       int count;       byte tempBuff[] = new byte[1024];                while((count = audioStream.read(tempBuff,0,tempBuff.length)) != -1){           synchronized(this){           while(!run)             wait();           }           sourceDataLine.write(tempBuff,0,count);                      }      }catch(UnsupportedAudioFileException ex){       ex.printStackTrace();     }catch(IOException ex){       ex.printStackTrace();     }catch(InterruptedException ex){       ex.printStackTrace();     }        }         //暫停播放音頻   private void stopMusic(){     synchronized(this){       run = false;       notifyAll();     }   }   //繼續播放音樂   private void continueMusic(){     synchronized(this){        run = true;        notifyAll();     }   }         //外部調用控制方法:生成音頻主線程;   public void start(boolean loop){     mainThread = new Thread(new Runnable(){       public void run(){         try {           playMusic(loop);         } catch (InterruptedException e) {           e.printStackTrace();         }       }     });     mainThread.start();   }      //外部調用控制方法:暫停音頻線程   public void stop(){     new Thread(new Runnable(){       public void run(){         stopMusic();                }     }).start();   }   //外部調用控制方法:繼續音頻線程   public void continues(){     new Thread(new Runnable(){       public void run(){         continueMusic();       }     }).start();   }  //Test   public static void main(String[] args) throws InterruptedException{      MusicPlayer player = new MusicPlayer("bgm/1.wav");  //創建音樂播放器          player.start(true);  //以開始以循環的形式播放,player(false)為不循環播放          TimeUnit.SECONDS.sleep(5);          player.stop();  //暫停播放音頻          TimeUnit.SECONDS.sleep(4);          player.continues();  //繼續開始播放音頻        }   } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿瓦提县| 贡山| 岚皋县| 政和县| 新绛县| 图木舒克市| 潞西市| 榕江县| 金湖县| 阿瓦提县| 辽阳市| 始兴县| 平顺县| 安龙县| 屏东县| 河东区| 大邑县| 建始县| 鹤峰县| 团风县| 苍山县| 津市市| 长沙县| 阿克陶县| 武义县| 洛浦县| 休宁县| 柳州市| 德清县| 蓬溪县| 喜德县| 青神县| 梁平县| 安庆市| 江源县| 宽城| 平乡县| 云梦县| 碌曲县| 南平市| 郁南县|