android IM模組-語音-錄製篇1

weixin_34007291發表於2018-09-27

android IM模組-語音-錄製篇1
https://www.jianshu.com/p/5cccb0a9e740
android IM模組-語音-錄製篇2
https://www.jianshu.com/p/1527e6d4840d
android IM模組-語音-播放篇1
https://www.jianshu.com/p/214a433f3f40
android IM模組-語音-播放篇2
https://www.jianshu.com/p/66727521e2eb

現在做安卓IM可以說是軟體常用功能,IM模組常用的有語音,視訊,地圖,訊息,位置,檔案等
我們一般選用三方SDK進行完成,我個人覺得用SDK可以,但是最基本的原理和實現程式碼我們得基本能坐到
從這篇開始我們從語音開始進行一篇篇詳解,(我也是摸索學習,哪裡不對請指正)
android端常用錄音API有,AudioRecord 和MediaRecorder,其中MediaRecorder封裝較好,可以很簡單的就實現錄音功能。我們就簡單利用MediaRecorder做一個小案例。

MediaRecorder

在XML檔案中寫入許可權


2657154-362aaa08ff2b758b.png
image.png

在android6.0以上,這兩個許可權是需要動態許可權申請的,我們記得申請動態許可權


2657154-5f9dbf43a3ce6ac3.png
獲取錄音許可權

2657154-a5999b7864b6e6d0.png
獲取記憶體卡讀寫許可權

我們寫一個佈局,開始錄音和停止錄音兩個按鈕


2657154-82e582e871d6a1fa.png
佈局頁面

在主頁面裡開始寫程式碼,錄音完我們需要儲存到SD卡里,我們先做一個File路徑出來


2657154-57215de89389e57f.png
錄音儲存路徑

新建一個MediaRecorder


2657154-10861e7e9f5ededa.png
iMediaRecorder

設定相關引數
2657154-0d6b2f895eb5aa89.png
配置引數

開始錄音


2657154-98ab72eab78d579d.png
開始錄音

停止錄音
2657154-1ceb0cefc98de1ff.png
停止錄音

執行一下,記住一定要給予許可權哦,不然會報錯,點選錄音,說一段話,然後結束錄音,去資料夾查詢,
錄音是一個JNI級別的方法只能單執行緒操作,而且涉及這種耗時操作,肯定需要放線上程裡,

我建議大家在做的錄音的時候,使用一個單執行緒進行操作,

這裡只是簡單展示各種常用引數配置,真正開發的時候一定要注意。

2657154-6caed2285cdae4fa.png

2657154-37ea110865f59eff.png
開始錄音

2657154-7818b2c7bcf25784.png
錄音完成

2657154-dcbe594fd515236d.png
找到錄音

點選播放
2657154-dd1a95118f9405ff.png
錄音播放

我們一個很簡單的錄音APP就完成了,好的,大家很好奇我們設定那堆引數是做什麼的呢?我把查到的資料放在下面讓大家看一看
大家可以關注一下兩篇部落格
https://blog.csdn.net/qq_32175491/article/details/78664821
https://www.2cto.com/kf/201408/326131.html
或者視訊可以看這位老師的視訊
https://www.imooc.com/learn/739

MediaRecorder.AudioSource.xxxx

MediaRecorder.AudioSource.CAMCORDER
1 設定錄音來源於同方向的相機麥克風相同,若相機無內建相機或無法識別,則
使用預設的麥克風
2 MediaRecorder.AudioSource.DEFAULT
預設音訊源
3 MediaRecorder.AudioSource.MIC
設定錄音來源為主麥克風。
4 MediaRecorder.AudioSource.VOICE_CALL
設定錄音來源為語音撥出的語音與對方說話的聲音
5 MediaRecorder.AudioSource.VOICE_COMMUNICATION
攝像頭旁邊的麥克風
6 MediaRecorder.AudioSource.VOICE_DOWNLINK
下行聲音
7 MediaRecorder.AudioSource.VOICE_RECOGNITION
語音識別
8 MediaRecorder.AudioSource.VOICE_UPLINK
上行聲音

MediaRecorder.OutputFormat.xxxx

1 AAC_ADTS:ADTS的全稱是Audio Data Transport Stream。是AAC音訊的傳
輸流格式。是AAC的一種非常常見的傳輸格式
2 AMR_NB:編碼的是無視訊純聲音3gp檔案就是amr,他的檔案比AAC的小,他的音樂效果沒ACC的好
3 AMR_WB:VMR-WB 是新型可變速率多模式寬頻語音編解碼器,專為無線
CDMA 2000標準而設計,目的在於在 50 至 7000 HZ 的頻帶上進行語音編碼,
取樣率為 16 KHZ。VMR-WB 基於 3GPP AMR-WB (G722.2) 編解碼器,在每
秒速率12.65 Kbit 上可實現互操作。
4 DEFAULT:預設輸出
5 MPEG_4:這將指定錄製的檔案為mpeg-4格式,可以保護Audio和Video
6 RAW_AMR:錄製原始檔案,這隻支援音訊錄製,同時要求音訊編碼為
7 AMR_NB
8 THREE_GPP:錄製後檔案是一個3gp檔案,支援音訊和視訊錄製
9 WEBM: 編碼為VP8/VORBIS的輸出格式。

MediaRecorder.AudioEncoder.xxxx

1 default:預設值
2 AAC:高階音訊編碼,蘋果用的就是這種音訊格式,開發首選。
優點:相對於mp3,AAC格式的音質更佳,檔案更小。
不足:AAC屬於有失真壓縮的格式,與時下流行的APE、FLAC等無損格式相比音質
存在”本質上”的差距。加之,傳輸速度更快的USB3.0和16G以上大容量MP3正
在加速普及,也使得AAC頭上”小巧”的光環不復存在。
3 HE_AAC:HE-AAC混合了AAC與SBR技術
4 AAC_ELD: 低延時的AAC音訊編解碼器
5 AMR_NB:編碼的是無視訊純聲音3gp檔案就是amr,他的檔案比AAC的小,他的
音樂效果沒ACC的好
6 AMR_WB:VMR-WB 是新型可變速率多模式寬頻語音編解碼器,專為無線 CDMA 2000標準而設計,目的在於在 50 至 7000 HZ 的頻帶上進行語音編碼,取樣率為 16 KHZ。VMR-WB 基於 3GPP AMR-WB (G722.2) 編解碼器,在每秒速率12.65 Kbit 上可實現互操作。
7 VORBIS:Vorbis是一種新的音訊壓縮格式,類似於MP3等現有的音樂格式。但有一點不同的是,它是完全免費、開放和沒有專利限制的。OGG Vorbis有一個很出眾的特點,就是支援多聲道,隨著它的流行,以後用隨身聽來聽DTS編碼的多聲道作品將不會是夢想。

setAudioSamplingRate

設定所錄製的聲音的取樣率。
取樣頻率越高,資料越大,音質越好,常用頻率有11.025kHz,22.05kHz,16kHz,37.8kHz,44.1kHz,48kHz,96kHz,192kHz,其中44.1kHz所有安卓機都支援。

setAudioEncodingBitRate

設定所錄製的聲音的編碼位率
位元速率越大,壓縮越小,音質越好
AAC HE(High Effciency):32kbps-96kbps,位元速率低,質量一般
AAC LC( Low Complexity):96kbps-192kbps,平均低位元速率和高音質
android IM模組-語音-錄製篇2
https://www.jianshu.com/p/1527e6d4840d

相關文章