求教各位大神,想要实现音频播放功能,具体是打开文件选择器选择音频文件并显示文件路径在文本框中,
然后点击播放开始播放该音频,点击暂停能使音频暂停播放。新手,急求!最好能详细些

Java swing音频播放问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- followwwind 2017-04-11 04:18关注
package com.musicplayer.bean;
import java.io.File;
import java.io.IOException;import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;public class Player extends Thread{
/** * 播放标志 */ private boolean flag = false; private boolean pause = false; //暂停标志 private boolean threadflag = false; //该线程是否启动 private AudioInputStream audioInputStream;// 文件流 private AudioFormat audioFormat;// 文件格式 private SourceDataLine sourceDataLine;// 输出设备 Object lock = new Object();//一个空的对象,没什么意义 private File musicfile; public Player() { } public Player(File musicfile) { this.musicfile = musicfile; } public boolean existFile(){ return musicfile != null ? true : false; } public void loadMusicFile(){ // 取得文件输入流 try { audioInputStream = AudioSystem.getAudioInputStream(musicfile); audioFormat = audioInputStream.getFormat(); // 转换mp3文件编码 if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) { audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, audioFormat.getSampleRate(), 16, audioFormat .getChannels(), audioFormat.getChannels() * 2, audioFormat.getSampleRate(), false); audioInputStream = AudioSystem.getAudioInputStream(audioFormat, audioInputStream); } // 打开输出设备 DataLine.Info dataLineInfo = new DataLine.Info( SourceDataLine.class, audioFormat, AudioSystem.NOT_SPECIFIED); sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); sourceDataLine.open(audioFormat); } catch (UnsupportedAudioFileException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } catch (LineUnavailableException e1) { e1.printStackTrace(); } } public void startplay(){ if(pause){ synchronized(lock) { pause = false; lock.notifyAll(); } } flag = true; } public void pauseplay(){ pause = true; } public void stopplay(){ flag = false; } @Override public void run() { loadMusicFile(); threadflag = true; byte[] data = new byte[4096]; int nBytesRead; if(sourceDataLine != null){ synchronized (lock) { try { while ((nBytesRead = audioInputStream.read(data, 0, data.length)) != -1) { while(pause){ if(sourceDataLine.isRunning()) { sourceDataLine.stop(); //System.out.println("暂停"); } try { lock.wait(); //System.out.println("等待"); }catch(InterruptedException e) { } } if(flag){ sourceDataLine.start(); }else{ sourceDataLine.drain(); sourceDataLine.stop(); sourceDataLine.close(); } sourceDataLine.write(data, 0, nBytesRead); } } catch (IOException e) { e.printStackTrace(); } } } } public boolean isStart(){ return threadflag; } public File getMusicfile() { return musicfile; } public void setMusicfile(File musicfile) { this.musicfile = musicfile; }
}
Player musicplayer = new Player(file); //file为mp3文件
//播放
musicplayer.startplay();
if (!musicplayer.isStart() && musicplayer.existFile()) {
musicplayer.start();
}
//暂停
musicplayer.pauseplay();
下图为我做的播放器demo,有点粗糙本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报