三、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),无需在此之前手动调用 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(context.getFilesDir() + "/record.mp4a", 44100, 1, AudioFormat.ENCODING_PCM_16BIT);// 设置录音监听recorder.setOnRecordingListener(new TAVAudioRecorder.OnRecordingListener() { @Override public byte[] processBuffer(byte[] buffer, int count) { // 可在此处处理原始PCM数据 return buffer; } @Override public void onFinish() { // 录音完成处理 } @Override public void onError(int what) { // 错误处理 }});// 开始录音recorder.start();// 暂停录音recorder.pause();// 恢复录音recorder.resume();// 停止录音recorder.stop();// 释放资源recorder.release();
20、获取录音信息
// 获取已录制时长(微秒)long duration = recorder.getRecordedTimeUs();// 音频从调用开始到真正开始录制的时差int delay = recorder.getDelay();