日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AudioRecord 录音和播放的Demo

發布時間:2024/1/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。