- 应用可以调用麦克风录制音频,但该行为属于隐私敏感行为,在调用麦克风前,需要先向用户申请授权:ohos.permission.MICROPHONE。如何使用和管理麦克风请参考管理麦克风静音状态。
- 如果需要持续录制或后台录制,请申请长时任务避免进入挂起(Suspend)状态。具体参考长时任务开发指导。录制需要在前台启动,启动后可以退后台。在后台启动录制将会失败。
- 应用录制音频时需要使用合适的录制流类型,请参考选择合适的录制流类型。
音频录制是媒体开发的常见场景,在系统中,根据不同的音频格式和业务场景,提供了多样化的音频录制方式。为了帮助开发者快速了解音频录制功能,并且根据不同的音频格式和业务场景快速选型,本文提供了音频录制开发实践的系列文章。共有如下五篇:
各方案音频录制支持的能力对比如下所示:
开发方式 | 录制文件格式 | 是否支持低时延 | 是否支持静音打断模式 | 是否支持回声消除 | 如何获取音频振幅 |
AudioCapturer(ArkTS) | 仅支持PCM格式 | 不支持 | 通过调用setWillMuteWhenInterrupted接口设置是否开启静音打断模式 | 通过将audio.AudioCapturerInfo中SourceType值指定为SOURCE_TYPE_VOICE_COMMUNICATION、SOURCE_TYPE_LIVE即可 | 通过调用AudioVolumeGroupManager中的getMaxAmplitudeForInputDevice接口获取输入设备音频流的最大电平值 |
OHAudio(C++) | 仅支持PCM格式 | 通过调用OH_AudioStreamBuilder_SetLatencyMode()设置低时延模式 | 通过调用OH_AudioStreamBuilder_SetCapturerWillMuteWhenInterrupted接口设置是否开启静音打断模式 | 通过将OH_AudioStream_SourceType值指定为AUDIOSTREAM_SOURCE_TYPE_VOICE_COMMUNICATION、AUDIOSTREAM_SOURCE_TYPE_LIVE即可 | 通过采样深度(采样格式)计算最大采样值,然后将每个采样值与最大采样值做归一化处理计算可获得类似振幅大小数据 |
AVRecorder(ArkTS) | 格式化音频文件 | 不支持 | 通过调用setWillMuteWhenInterrupted接口设置是否开启静音打断模式 | 通过将AudioSourceType值指定为AUDIO_SOURCE_TYPE_VOICE_COMMUNICATION即可 | 通过调用getAudioCapturerMaxAmplitude接口获取当前音频最大振幅 |
AVRecorder(C++) | 格式化音频文件 | 不支持 | 通过调用OH_AVRecorder_SetWillMuteWhenInterrupted接口设置是否开启静音打断模式 | 通过将OH_AVRecorder_AudioSourceType值指定为AVRECORDER_VOICE_COMMUNICATION即可 | 通过采样深度(采样格式)计算最大采样值,然后将每个采样值与最大采样值做归一化处理计算可获得类似振幅大小数据 |
AVScreenCapture(C++) | 在录制音频文件时,仅支持录制m4a的音频格式 | 不支持 | 不支持 | 不支持 | 通过调用AudioVolumeGroupManager中的getMaxAmplitudeForInputDevice接口获取输入设备音频流的最大电平值 |