使用javax.sound實現簡單的音訊播放
原始碼github:https://github.com/Al-assad/Java-Gadgets/tree/master/SimpleMusicPlayer/** * @see * @author Al_assad [email protected] * @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(); //繼續開始播放音訊 } }
相關推薦
使用javax.sound實現簡單的音訊播放
/** * @see * @author Al_assad [email protected] * @date 2016年11月17日 下午6:27:59 * @version V1.0 * Description: 簡易音訊播放器(只支援AU,RA,WAV)
Android實現簡單音樂播放器(MediaPlayer)
工程內容 實現一個簡單的音樂播放器,要求功能有: 播放、暫停功能;進度條顯示播放進度功能拖動進度條改變進度功能;後臺播放功能;停止功能;退出功能; 程式碼實現 匯入歌曲到手機SD卡的Music目錄中,這裡我匯入了4首歌曲:仙劍六裡面的《誓言成暉》、《劍客不能說》、《鏡
Android如何實現簡單音樂播放器的程式碼
想必大家在學Android的音樂播放器時肯定會遇到很多困難,不怕,在這裡我給大家分享一個很簡單的音樂播放器,絕對會對你的學習有所幫助。本例子不難,但是也確能給你帶來柳暗花明又一村的感覺。閒話少說,馬上來看看這個播放器有
Android 實現簡單媒體播放器功能
一、概述: 因為播放視訊需要很大的記憶體,所以必須使用surfaceview , surfaceview 裡實現了雙緩衝的功能, ——————————————————————— 有需求者請加qq:136137465,非誠勿擾 (java 架構師全套教程
iOS音訊播放 (六):簡單的音訊播放器實現
在前幾篇中我分別講到了AudioSession、AudioFileStream、AudioFile、AudioQueue,這些類的功能已經涵蓋了第一篇中所提到的音訊播放所需要的步驟: 讀取MP3檔案 NSFileHandle解析取樣率、位元速率、時長等資訊,分離MP3中的音訊幀 AudioFileStr
使用Service組件實現簡單的音樂播放器功能 --Android基礎
area direct start 獲取 點擊 btn src c函數 extern 1、本例利用Service實現簡單的音樂播放功能,下面是效果圖。(點擊開始播放開啟服務,音樂播放,點擊“停止播放”關閉服務,音樂停止播放。) 2、核心代碼:
[SimplePlayer] 實現一個簡單的播放器
false rip 音頻 class sam 文件中 多線程處理 設備 pos 簡單的播放器需要實現一個最基本的功能:播放視頻文件。 實現這個功能需要包含以下幾個步驟: 從視頻文件中提取視頻圖像 在屏幕上顯示視頻圖像 視頻幀的同步,也就是保證視頻圖像在合適的時間在屏幕
【遊戲開發】實現簡單對話方塊及音樂播放
//Windows視窗標頭檔案 #include <Windows.h> //PlaySound函式包含的標頭檔案 #pragma comment(lib,"winmm.lib") //主函式 int WINAPI WinMain(HINSTANCE hInstance,HINSTA
[轉]javaCV開發詳解之5:錄製音訊(錄製麥克風)到本地檔案/流媒體伺服器(基於javax.sound、javaCV-FFMPEG)
本文轉載自部落格:https://blog.csdn.net/eguid_1/article/details/52702385 ------------------------------------------------------------------------------------
android平臺下基於ffmpeg和ANativeWindow實現簡單的視訊播放器
音視訊實踐學習 android全平臺編譯ffmpeg以及x264與fdk-aac實踐 ubuntu下使用nginx和nginx-rtmp-module配置直播推流伺服器 android全平臺編譯ffmpeg合併為單個庫實踐 android-studio使用c
ffmpeg簡易播放器的實現-音訊播放
基於FFmpeg和SDL實現的簡易視訊播放器,主要分為讀取視訊檔案解碼和呼叫SDL顯示兩大部分。詳細流程可參考程式碼註釋。 本篇實驗筆記主要參考如下兩篇文章: [1]. 最簡單的基於FFMPEG+SDL的視訊播放器ver2(採用SDL2.0) [2]. An ffmpeg and SDL Tutorial
簡單實現Android視訊播放器倍速、清晰度切換、m3u8下載
簡單的前提是使用開源庫 在庫的基礎上新增相對應的功能, 以 JiaoZiVideoPlayer 為例 ,本身自帶的播放引擎是MediaPlayer,也就是Android自帶的播放器,有很多不完善的地方,倍速切換隻支援5.0以上,否則報 NoClassDefFoundError 錯誤
QT+Opencv實現簡單的視訊播放及抓拍
原理很簡單,採用opencv庫cvQueryFrame函式獲取一幀,然後將該幀影象在QLabel顯示出來。為實現連續播放,採用定時器。 #ifndef CAMERA_H #define CAMERA_H #include <QtWidgets/QWidget&g
最簡單的基於FFMPEG+SDL的音訊播放器 ver2 (採用SDL2 0)
=====================================================最簡單的基於FFmpeg的音訊播放器系列文章列表:=====================================================簡介之前做過一個
樹梅派應用23:QT+樹莓派實現一個簡單的播放器
說起樹莓派,買了也有一段時間了,但是始終都沒有做出什麼好玩的裝置出來,恰好最近在學C++,看到樹莓派放在牆角吃了一年多灰,為何不利用它來學一下程式設計呢? 先給我的工作臺來個特寫: 說幹就幹,在經歷了一番折騰以後,先準備所需的器材和必要的零部件,在這裡我簡單的羅列一下:先是
SurfaceView+MediaPlayer 實現簡單的視訊播放
一、實現原理由於MediaPlayer沒有播放視訊的介面,所以需要通過SurfaceView顯示視訊。SurfaceView相當於一個容器,可以把內嵌的MediaPlayer的視訊資料顯示出來。二、實現步驟1、佈局檔案中新增SurfaceView控制元件2、通過Surface
[6] ffmpeg + SDL2 實現的視訊播放器「視音訊同步」
日期:2016.10.8 作者:isshe github:github.com/isshe 郵箱:[email protected] 平臺:ubuntu16.04 64bit
最簡單的視音訊播放示例9:SDL2播放PCM
最簡單的視音訊播放示例系列文章列表: ===================================================== 本文記錄SDL播放音訊的技術。在這裡使用的版本是SDL2。實際上SDL本身並不提供視音訊播放的功能,它只
Android 超簡單音樂播放器(十)歌詞的實現
關於歌詞 有下面這些: 歌詞的獲取 歌詞的解析 自定義View 歌詞的獲取 歌詞的獲取分為兩種,一種是從本地一種是通過網路上提供的API獲取。我選擇的是歌詞迷的API http://api.geci.me/en/latest/ 說實話,這
[4] ffmpeg + SDL2 實現的有雜音的音訊播放器
日期:2016.10.4 作者:isshe github:github.com/isshe 郵箱:[email protected] 平臺:ubuntu16.04 64bit 前言 ffmpeg將資料解碼成pcm。 SDL