功能概览
通过录音接口可以实现旁白(Voiceover)功能。TAVAudioRecorder 类提供录音功能,支持设置采样率、声道和编码格式,包含开始、暂停、恢复和停止方法。
核心类
TAVAudioRecorder
public class TAVAudioRecorder {// 构造函数public TAVAudioRecorder(String outputPath);public TAVAudioRecorder(String outputPath, int sampleRate, int channelCount, @PcmEncoding int pcmEncoding);}
错误码定义
错误码常量 | 值 | 描述 |
ERROR_AUDIO_FILE_NOT_EXIST | 0x1 | 音频文件不存在。 |
ERROR_AUDIO_OUT_OF_MEMORY | 0x2 | 内存不足。 |
ERROR_AUDIO_ILLEGAL_ARGUMENT | 0x3 | 非法参数。 |
ERROR_AUDIO_INIT_AUDIORECORD_FAILED | 0x4 | 初始化录音设备失败。 |
ERROR_AUDIO_RECORD_START_FAILED | 0x5 | 开始录音失败。 |
ERROR_AUDIO_RECORD_READ_FAILED | 0x6 | 读取录音数据失败。 |
注意事项
1. 权限要求:
需要
android.permission.RECORD_AUDIO 权限。2. 线程安全:
所有方法调用应在同一线程(建议使用工作线程)。
3. 性能优化:
避免在 processBuffer 中执行耗时操作。
4. 格式支持:
输出格式:MP4A(AAC 编码)。
采样深度:支持8位/16位 PCM。
声道:支持单声道/立体声。
状态控制方法
开始录音
/*** 开始录音* 状态要求:STATE_INITIALIZED 或 STATE_PAUSED*/public void start();
暂停录音
/*** 暂停录音* 状态要求:STATE_STARTED*/public void pause();
恢复录音
/*** 恢复录音(实际调用start方法)*/public void resume();
停止录音
/*** 停止录音并完成文件写入* 状态要求:任何状态*/public void stop();
释放资源
/*** 释放录音器资源* 注意:必须先调用stop()*/public void release();
参数配置
设置录音监听器
/*** 设置录音状态回调* @param listener 录音监听器*/public void setOnRecordingListener(OnRecordingListener listener);
获取已录制时长
/*** 获取已录制的时长(微秒)* @return 已录制的时长*/public long getRecordedTimeUs();
获取音频延迟
/*** 音频从调用开始到真正开始录制的时差(毫秒)* @return 音频延迟值*/public int getDelay();
回调接口
OnRecordingListener
public interface OnRecordingListener {/*** 处理录音数据缓冲区* @param buffer 原始PCM数据* @param count 数据长度* @return 处理后的数据(可直接返回原始buffer)*/byte[] processBuffer(byte[] buffer, int count);/*** 录音完成回调*/void onFinish();/*** 错误回调* @param what 错误码(见错误码定义)*/void onError(int what);}
使用示例
基础录音流程
// 创建录音实例(输出路径,采样率44100,单声道,16位采样)TAVAudioRecorder recorder = new TAVAudioRecorder("/sdcard/record.mp4a", 44100, 1, AudioFormat.ENCODING_PCM_16BIT);// 设置录音监听recorder.setOnRecordingListener(new TAVAudioRecorder.OnRecordingListener() {@Overridepublic byte[] processBuffer(byte[] buffer, int count) {// 可在此处处理原始PCM数据return buffer;}@Overridepublic void onFinish() {// 录音完成处理}@Overridepublic void onError(int what) {// 错误处理}});// 开始录音recorder.start();// 暂停录音recorder.pause();// 恢复录音recorder.resume();// 停止录音recorder.stop();// 释放资源recorder.release();
获取录音信息
// 获取已录制时长(微秒)long duration = recorder.getRecordedTimeUs();// 音频从调用开始到真正开始录制的时差int delay = recorder.getDelay();