网上查了下,Android 用 MediaRecorder 和 AudioRecord 实现录音。这里主要是用 MediaRecorder 实现录音,至于 AudioRecord 有空再研究下。
MediaRecorder
已集成了录音、编码、压缩等,支持少量的录音音频格式(aac/amr/3gp)
优点:代码量少
缺点:无法实时处理音频,输出的音频格式少
AudioRecord
实现边录边播以及对音频的实时处理
优点:语音的实时处理,可以用代码实现各种音频的封装
缺点:输出是PCM语音数据,如果保存成音频文件,是不能被播放的,所以必须先写代码实现编码以及压缩
AudioRecord 构造函数
public AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes)
audioSource : 声音来源,一般使用 MediaRecorder.AudioSource.MIC(麦克风)
sampleRateInHz :官方明确说到只有 44100Hz 是所有设备都支持的。其他 22050、16000 和 11025 只能在某些设备上使用
channelConfig :有立体声(CHANNEL_IN_STEREO)和单声道(CHANNEL_IN_MONO)两种。但只有单声道(CHANNEL_IN_MONO)是所有设备都支持的
audioFormat :有 ENCODING_PCM_16BIT 和 ENCODING_PCM_8BIT 两种音频编码格式。同样的,官方声明只有 ENCODING_PCM_16BIT 是所有设备都支持的
bufferSizeInBytes :录音期间声音数据的写入缓冲区大小(单位是字节)
setAudioSource() 声音来源,一般使用 MediaRecorder.AudioSource.MIC(麦克风)
这里不详细讲 AudioRecord ,有兴趣可以看以下博文:
Android录音--AudioRecord、MediaRecorder
常用音频格式
1. WAV 格式:录音质量高,但是压缩率小,文件大
2. AAC 格式:相对于 mp3,AAC 格式的音质更佳,文件更小,有损压缩,一般苹果或者Android SDK4.1.2(API 16)及以上版本支持播放
3. AMR 格式:压缩比比较大,但相对其他的压缩格式质量比较差,多用于人声,通话录音
4. mp3 格式,使用 MediaRecorder 没有该音频格式输出。一些人的做法是使用 AudioRecord 录音,然后编码成 wav 格式,再转换成 mp3 格式