Android

最近更新时间:2025-12-23 16:43:42

我的收藏

功能概览

通过录音接口可以实现旁白(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() {
@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();

获取录音信息

// 获取已录制时长(微秒)
long duration = recorder.getRecordedTimeUs();

// 音频从调用开始到真正开始录制的时差
int delay = recorder.getDelay();