網(wǎng)上查了下,Android 用 MediaRecorder 和 AudioRecord 實(shí)現(xiàn)錄音。這里主要是用 MediaRecorder 實(shí)現(xiàn)錄音,至于 AudioRecord 有空再研究下。
MediaRecorder
已集成了錄音、編碼、壓縮等,支持少量的錄音音頻格式(aac/amr/3gp)
優(yōu)點(diǎn):代碼量少
缺點(diǎn):無法實(shí)時(shí)處理音頻,輸出的音頻格式少
AudioRecord
實(shí)現(xiàn)邊錄邊播以及對(duì)音頻的實(shí)時(shí)處理
優(yōu)點(diǎn):語音的實(shí)時(shí)處理,可以用代碼實(shí)現(xiàn)各種音頻的封裝
缺點(diǎn):輸出是PCM語音數(shù)據(jù),如果保存成音頻文件,是不能被播放的,所以必須先寫代碼實(shí)現(xiàn)編碼以及壓縮
AudioRecord 構(gòu)造函數(shù)
public AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)
audioSource : 聲音來源,一般使用 MediaRecorder.AudioSource.MIC(麥克風(fēng))
sampleRateInHz :官方明確說到只有 44100Hz 是所有設(shè)備都支持的。其他 22050、16000 和 11025 只能在某些設(shè)備上使用
channelConfig :有立體聲(CHANNEL_IN_STEREO)和單聲道(CHANNEL_IN_MONO)兩種。但只有單聲道(CHANNEL_IN_MONO)是所有設(shè)備都支持的
audioFormat :有 ENCODING_PCM_16BIT 和 ENCODING_PCM_8BIT 兩種音頻編碼格式。同樣的,官方聲明只有 ENCODING_PCM_16BIT 是所有設(shè)備都支持的
bufferSizeInBytes :錄音期間聲音數(shù)據(jù)的寫入緩沖區(qū)大?。▎挝皇亲止?jié))
setAudioSource() 聲音來源,一般使用 MediaRecorder.AudioSource.MIC(麥克風(fēng))
這里不詳細(xì)講 AudioRecord ,有興趣可以看以下博文:
Android錄音--AudioRecord、MediaRecorder
常用音頻格式
1. WAV 格式:錄音質(zhì)量高,但是壓縮率小,文件大
2. AAC 格式:相對(duì)于 mp3,AAC 格式的音質(zhì)更佳,文件更小,有損壓縮,一般蘋果或者Android SDK4.1.2(API 16)及以上版本支持播放
3. AMR 格式:壓縮比比較大,但相對(duì)其他的壓縮格式質(zhì)量比較差,多用于人聲,通話錄音
4. mp3 格式,使用 MediaRecorder 沒有該音頻格式輸出。一些人的做法是使用 AudioRecord 錄音,然后編碼成 wav 格式,再轉(zhuǎn)換成 mp3 格式