91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java實現音頻文件播放功能

發布時間:2020-10-05 19:10:23 來源:腳本之家 閱讀:210 作者:mayifan_blog 欄目:編程語言

本文實例為大家分享了java實現音頻文件的播放功能的具體代碼,供大家參考,具體內容如下

實現思路

1、首先獲取音頻文件的地址,然后通過IO流讀取音頻文件,加緩沖區,實現Player類的對象。
2、Player類主要用于播放器的初始化,以及通過它來實現一些音視頻文件的播放,這個類需要手動去網上下載,然后添加路徑到我們Eclipse的library中。
3、Player類有兩種方法比較常用,play()方法和close()方法,前者用于啟動音頻文件,后者用于退出音頻文件的播放,這兩個方法我們在使用的時候需要注意,在整個音頻播放的過程中,程序都會停留在play()方法中,類似于在讀進度條,close()方法可以使得其退出播放,程序往下繼續運行。
4、假設我們點擊了開始按鈕,那么程序就不會再去響應你的停止操作了,于是,我們可以通過多線程來實現這個啟動和停止功能,讓播放在一個線程里自己去執行。
5、那么循環呢?如何實現循環播放?答案是while循環,我們需要一個參數作為while的循環條件,類似于一個開關,只要為true,就一直循環播放。
6、我們在執行完一次播放后就不能再次對這個對象調用play()方法了,我們需要再次創建新的對象,那么我們要想關閉新的對象就必須讓執行close()方法的對象是這個新的對象,我們每次新建相同名稱的對象,player.close()執行后關閉的往往只能是最后的那個對象。在啟動和停止中我們看不出問題,但是當我們試圖關閉在run方法里循環中的音頻時,我們會發現停止不了!為什么?我們把對象傳給線程類,close()方法依然可由此對象來執行,當他執行完play()方法后,我們new一個新的對象時,又開辟了一塊新的內存空間存放這個對象的數據,再用原先的對象close()就不能到達效果了,即無法關閉這個音頻。解決辦法:在每次new新對象后用set方法把對象傳回去,我們可以理解為讓close方法的調用者一直是這個新new的對象。
7、到這里就不得不提一下static了,一般我們不斷用相同的對象名去new同類的對象時,它們是共享代碼(JVM中),但是它們的對象數據都是獨立的,內存空間也是不同的;如果加了static,方法或者屬性就會屬于這個類,那么它們就變成唯一的了,對象共用被static修飾的代碼和屬性。

代碼實現

1、界面:

/**
* 背景音樂控制界面
*/
 public void showUI8(){ 
 JFrame jf8 =new JFrame("音樂");
 jf8.setSize(300, 150);
 jf8.setLocationRelativeTo(null);
 jf8.setDefaultCloseOperation(jf8.DISPOSE_ON_CLOSE);
 jf8.setLayout(null);
 jf8.setResizable(false);
 JLabel jl81 = new JLabel("選擇音樂");
 jl81.setBounds(40,20,60,25);
 jf8.add(jl81); 
 String[] str = {"許嵩 - 斷橋殘雪.mp3","許嵩 - 有何不可.mp3","薛之謙 - 紳士.mp3","薛之謙 - 意外.mp3"};
 JComboBox<String> jcb81 = new JComboBox<String>(str);
   jcb81.setBounds(120, 20, 150, 25);
 jf8.add(jcb81); 
 JButton jbu81=new JButton("播放");
 jbu81.setBounds(20,60,70,30);
 jf8.add(jbu81);
 jbu81.addActionListener(listener); 
 JButton jbu82=new JButton("循環");
 jbu82.setBounds(110,60,70,30);
 jf8.add(jbu82);
 jbu82.addActionListener(listener); 
 JButton jbu83=new JButton("停止"); 
 jbu83.setBounds(200,60,70,30);
 jf8.add(jbu83);
 jbu83.addActionListener(listener); 
   listener.setjcb81(jcb81);
 jf8.setVisible(true); 
 }

2、監聽器方法:

private Player player;
private Player player1;
public boolean loopFlag=false;

 public void actionPerformed(ActionEvent e)
 {
 if("音樂".equals(e.getActionCommand()))
 {
 System.out.println("音樂設置");
 cli.showUI8();
 }
 if("播放".equals(e.getActionCommand()))
 {
 if(player!=null)
 player.close(); 
 loopFlag=false;
 String path = "E:\\workspace\\mayifan\\chetRoom\\com\\myf\\client1207\\music\\"+(String)jcb81.getSelectedItem(); 
 try{
 File file = new File(path); 
   FileInputStream fis = new FileInputStream(file);
   BufferedInputStream buff = new BufferedInputStream(fis);
   player = new Player(buff);   
 }catch(IOException e1){
  e1.printStackTrace();
 }catch(JavaLayerException e1){
  e1.printStackTrace();
 }  
   System.out.println("開始播放:"+(String)jcb81.getSelectedItem());   
   MusicThread mt = new MusicThread(player, path ,listener);   
   mt.start();   
 }if("循環".equals(e.getActionCommand()))
 { 
 if(loopFlag==false)
 {
  System.out.println("打開循環播放");  
  loopFlag = true;
 }else{
  System.out.println("關閉循環播放");  
  loopFlag = true;
 } 
  } 
 if("停止".equals(e.getActionCommand()))
 { 
  System.out.println("停止播放");
  loopFlag=false;  
  player.close();
  player1.close();  
 } 
} 

3、音頻線程:

public class MusicThread extends Thread{
 private Player player;
 private String path;
 private Listener listener;
 private Player player1;
 public MusicThread(Player player , String path , Listener listener){
  this.player=player;
  this.path = path;
  this.listener=listener;
 } 
 @Override
 public void run() {
 int add=0;
 try{
   player.play();
 }catch(JavaLayerException e){
 e.printStackTrace();
 }
  player.close();
 add++;
 System.out.println(listener.loopFlag);
 while(listener.loopFlag)
 { 
 try{
  File file1 = new File(path);
   FileInputStream fis1 = new FileInputStream(file1);
   BufferedInputStream buff1 = new BufferedInputStream(fis1);
   player1 = new Player(buff1);
   listener.setplayer1(player1);
  }catch(IOException e1){
  e1.printStackTrace();
  }catch(JavaLayerException e1){
  e1.printStackTrace();
  }    
   try{
     player1.play();
  }catch(JavaLayerException e1){
  e1.printStackTrace();
  }
   add++;
 } 
 System.out.println("循環播放次數:"+add); 
 } 
}

4、界面效果圖:

java實現音頻文件播放功能

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景泰县| 武鸣县| 云安县| 仲巴县| 沂源县| 称多县| 姜堰市| 聂荣县| 子洲县| 德令哈市| 安西县| 江西省| 望谟县| 保山市| 古交市| 迭部县| 哈巴河县| 博乐市| 丹江口市| 清新县| 郎溪县| 闸北区| 安图县| 剑川县| 全椒县| 泉州市| 且末县| 会同县| 芷江| 张家口市| 乌兰县| 稻城县| 西吉县| 清远市| 大渡口区| 依安县| 顺昌县| 自贡市| 达拉特旗| 峡江县| 石门县|