一、PCM是什么?
PCM:脉冲编码调制(Pulse Code Modulation,PCM) 是由模拟信号向数字信号转化的一种常用的编码格式,称为脉冲编码调制,PCM将模拟信号按照一定的间距划分为多段,然后通过二进制去量化每一个间距的强度。
PCM表示的是音频文件中随着时间的流逝的一段音频的振幅。Android在WAV文件中支持PCM的音频数据。
优点:最大程度的接近绝对保真。缺点:体积大。
二、录音的工作过程
录音是模拟信号到数字信号的编码。
AndioRecord 提供给应用层一种能力,让应用层可以用来收集声音相关硬件的数据。工作过程如下:
1、构造 AudioRecord 对象,通过getMinBufferSize方法得到需要的最小录音缓存buffer大小。
2、初始化一个buffer缓存,其大于等于第一步中 AudioRecord 用于写声音数据的buffer大小。
3、开始进入录音状态,让 AudioRecord#startRecording()
4、从 AudioRecord 中读取声音缓存数据到第二步初始化的buffer中,并创建一个文件数据写入流,将buffer中数据导入数据流并写入本地文件。这个过程可以对上层应用回调录音时长。
5、关闭数据流
6、停止录音,AudioRecord#stop()
那如何才能在播放器中播放我录制的内容呢?
PCM文件是原始文件,不能被播放器识别,WAR可以,是因为WAVE HEAD文件头。
AudioRecord 和 MediaRecord
都可以录音,但 MediaRecord 更加上层。
附:AudioRecord 构建参数
audioSource:音频硬件设备源 MediaRecorder.AudioSource.MIC
sampleRateInHz:采样频率,单位:赫兹,建议:44100Hz
channelConfig:单声道还是双声道
audioFormat:音频数据精度,例如:PCM8和PCM16
bufferSizeInBytes:AudioRecord所需的最小缓冲区大小,native方法,对应用层分配缓冲池大小具有重要指导意义。
public AudioRecord(int audioSource, # 音频硬件设备源
int sampleRateInHz,
int channelConfig,
int audioFormat,
int bufferSizeInBytes)
三、声音的播放
播放则是数字信号到模拟信号的解码。
Audi