AudioRecord 录音和播放的Demo
#AudioRecord 錄音和播放的Demo
本文介紹一個AudioRecord的簡單錄音和播放的示例程序。
錄音是需要動態獲取權限的!
##主要代碼
###1.AudioRecord錄音代碼
//開通輸出流到指定的文件,audioFile是保存的音頻文件File對象 DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(audioFile))); //根據定義好的幾個配置,來獲取合適的緩沖大小 int bufferSize = AudioRecord.getMinBufferSize(frequence, channelConfig, audioEncoding); Log.i(TAG, "RecordTask: dataSize=" + bufferSize);//1280 //實例化AudioRecord//MediaRecorder.AudioSource.MIC AudioRecord record = new AudioRecord(MediaRecorder.AudioSource.MIC, frequence, channelConfig, audioEncoding, bufferSize); //開始錄制 record.startRecording(); byte audioData[] = new byte[bufferSize]; //定義循環,根據isRecording的值來判斷是否繼續錄制 long beforeTime = 0; while (isRecording) {int number = record.read(audioData, 0, bufferSize);dos.write(audioData); } //錄制結束 record.stop();###2.AudioTrack播放音頻文件代碼代碼
int dataSize = AudioRecord.getMinBufferSize(frequence, channelConfig, audioEncoding); Log.i(TAG, "PlayTask: dataSize=" + dataSize); byte[] bytes = new byte[dataSize]; //定義輸入流,將音頻寫入到AudioTrack類中,實現播放DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(audioFile)));//實例AudioTrackAudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, frequence, channelConfig, audioEncoding, dataSize, AudioTrack.MODE_STREAM);//開始播放track.play();//由于AudioTrack播放的是流,所以,我們需要一邊播放一邊讀取while (isPlaying && (dataSize = dis.read(bytes)) != -1) {Log.i(TAG, "dataSize:" + dataSize);if (dataSize > 0) {track.write(bytes, 0, dataSize);}}//播放結束track.flush();控制的代碼并不難,只是要整理一下。
一般的都是寫在線程里面完成。
##我的簡單錄音Demo
實現了,錄音,停止,播放三個功能
并且程序啟動的時候,動態請求了讀寫權限和錄音權限,
程序啟動生成一個錄音文件在/sdcard/Sounds/time.pcm(time是當前時間的年月日時分秒)
圖片:
后面附帶我的錄音apk文件和代碼
需要的可以進行進一步修改和迭代。
##關于Audio其他的知識
AudioRecord生成的音頻文件是pcm格式的,是一種純音頻文件的格式,
而mp3、wav是在純音頻文件上封裝了相關的數據。
AudioRecord錄音要生成mp3或者wav是要在頭部添加一些數據的,
具體的數據格式可以上網找工具類,之前也成功過,但是會有一些坑!
AudioRecord錄音可以設置的參數比MediaPlayer多,
MediaPlayer是經過很多封裝的,能直接錄制成wav的音頻文件。
AudioTrack只能播放pcm文件,不能直接播放wav或mp3文件,
如果要播放也是要先經過數據處理。
而MediaPlayer是可以直接播放wav和mp3的。
如果是普通的場合使用MediaPlayer錄音和播放音頻文件確實是簡單很多的,
但是也會有一些場景是只能用AudioRecord來錄音,
比如一些需要用到把錄音數據壓縮處理,分段上傳這種操作,傳輸的一般是純音頻pcm數據。
#共勉:不要在該奮斗的年紀去太多享受,否則你會在該享受的時候去受苦。
總結
以上是生活随笔為你收集整理的AudioRecord 录音和播放的Demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [书摘]老外侃中国(埃瑞克【挪威】口述,
- 下一篇: WinForm DataGrid的功能扩