使用javax.sound怎么實現(xiàn)音頻播放功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司為企業(yè)級客戶提高一站式互聯(lián)網(wǎng)+設(shè)計服務(wù),主要包括成都做網(wǎng)站、網(wǎng)站建設(shè)、app軟件定制開發(fā)、重慶小程序開發(fā)、宣傳片制作、LOGO設(shè)計等,幫助客戶快速提升營銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗豐富的經(jīng)驗,可以確保每一個作品的質(zhì)量和創(chuàng)作周期,同時每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。
具體內(nèi)容如下
import javax.sound.sampled.*;
import java.io.*;
public class MusicPlayer {
private String musicPath; //音頻文件
private volatile boolean run = true; //記錄音頻是否播放
private Thread mainThread; //播放音頻的任務(wù)線程
private AudioInputStream audioStream;
private AudioFormat audioFormat;
private SourceDataLine sourceDataLine;
public MusicPlayer(String musicPath) {
this.musicPath = musicPath;
prefetch();
}
//數(shù)據(jù)準備
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類創(chuàng)建源數(shù)據(jù)行,充當(dāng)混頻器的源
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();
}
}
//析構(gòu)函數(shù):關(guān)閉音頻讀取流和數(shù)據(jù)行
protected void finalize() throws Throwable{
super.finalize();
sourceDataLine.drain();
sourceDataLine.close();
audioStream.close();
}
//播放音頻:通過loop參數(shù)設(shè)置是否循環(huán)播放
private void playMusic(boolean loop)throws InterruptedException {
try{
if(loop){
while(true){
playMusic();
}
}else{
playMusic();
//清空數(shù)據(jù)行并關(guān)閉
sourceDataLine.drain();
sourceDataLine.close();
audioStream.close();
}
}catch(IOException ex){
ex.printStackTrace();
}
}
private void playMusic(){
try{
synchronized(this){
run = true;
}
//通過數(shù)據(jù)行讀取音頻數(shù)據(jù)流,發(fā)送到混音器;
//數(shù)據(jù)流傳輸過程: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();
}
}
//繼續(xù)播放音樂
private void continueMusic(){
synchronized(this){
run = true;
notifyAll();
}
}
//外部調(diào)用控制方法:生成音頻主線程;
public void start(boolean loop){
mainThread = new Thread(new Runnable(){
public void run(){
try {
playMusic(loop);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
mainThread.start();
}
//外部調(diào)用控制方法:暫停音頻線程
public void stop(){
new Thread(new Runnable(){
public void run(){
stopMusic();
}
}).start();
}
//外部調(diào)用控制方法:繼續(xù)音頻線程
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"); //創(chuàng)建音樂播放器
player.start(true); //以開始以循環(huán)的形式播放,player(false)為不循環(huán)播放
TimeUnit.SECONDS.sleep(5);
player.stop(); //暫停播放音頻
TimeUnit.SECONDS.sleep(4);
player.continues(); //繼續(xù)開始播放音頻
}
}看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。
網(wǎng)站名稱:使用javax.sound怎么實現(xiàn)音頻播放功能
轉(zhuǎn)載來于:http://www.yijiale78.com/article2/gcegoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、標(biāo)簽優(yōu)化、網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)