Android音视频开发-AudioRecord
内容提要
本文介绍了Android音视频开发中的AudioRecord类,用于实时录制音频数据。文章详细介绍了AudioRecord的使用方法和参数设置,并提供了录制音频和转换为WAV格式的示例代码。同时,还解决了在华为mate50上录音崩溃的问题,通过动态申请权限解决了权限问题。
延伸解读
AudioRecord 参数配置要点
AudioRecord 构造函数需指定音频源、采样率、通道配置、音频格式和缓冲区大小。其中采样率 44100Hz 是当前唯一保证在所有设备上工作的速率,其他采样率可能因设备差异导致初始化失败。缓冲区大小应通过 getMinBufferSize() 获取,避免手动指定过小导致录制异常。
PCM 转 WAV 的关键步骤
录制生成的 PCM 文件缺少 WAV 头,无法直接播放。转换时需根据采样率、声道数和位深度生成 44 字节的 WAV 头,其中包含 RIFF 标识、格式块、数据块等信息。写入头后再追加 PCM 数据即可。注意声道数需与录制时的 channelConfig 一致,否则播放速度或声道会错乱。
华为 Mate50 录音崩溃的排查启示
在华为 Mate50 上录音崩溃,日志显示权限被拒绝,错误码 -20 表示 native 初始化失败。尝试添加 MODIFY_AUDIO_SETTINGS 权限或调整音频参数均无效,最终发现是未动态申请 RECORD_AUDIO 权限。这提醒开发者:即使应用内已授予权限,仍需在运行时动态申请,否则部分设备会直接拒绝录音。
Q&A
AudioRecord类的主要功能是什么?
AudioRecord类用于实时录制音频数据,支持多种音频源和格式。
如何设置AudioRecord的构造函数参数?
构造函数参数包括音频源、采样率、通道配置、音频格式和缓冲区大小。
在Android中如何开始和停止录音?
调用startRecording()方法开始录音,调用stop()方法停止录音并释放资源。
如何将录制的PCM格式音频转换为WAV格式?
需要生成WAV文件头并将PCM数据写入WAV文件中。
在华为mate50上录音崩溃的原因是什么?
崩溃是由于未动态申请录音权限,需添加动态权限申请代码。
如何动态申请录音权限?
使用ActivityCompat.requestPermissions方法请求RECORD_AUDIO权限。