鸿蒙中 音频录制API
摘要:鸿蒙系统提供三种音频录制方案:AVRecorder可直接生成m4a文件,适合普通录音;AudioCapturer输出PCM原始数据,适合专业音频处理;OHAudio为Native层方案,性能最优。开发需注意:必须申请麦克风权限,后台录制需申请长时任务且需前台启动。AVRecorder为推荐首选,AudioCapturer适合专业数据处理,OHAudio适用于高性能需求场景。
本文同步发表于微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
一、音频录制方式
1.1 三种录制方式对比
| 方式 | 语言 | 输出格式 | 特点 | 适用场景 |
|---|---|---|---|---|
| AVRecorder | ArkTS/JS | m4a等编码格式 | 集成了录音、编码、封装全流程 | 普通录音,开箱即用 |
| AudioCapturer | ArkTS/JS | PCM原始数据 | 需持续读取音频数据,可后处理 | 专业音频处理、数据分析 |
| OHAudio | Native C/C++ | PCM原始数据 | 支持低时延通路 | Native层开发、性能要求高 |
1.2 选择
需要录制音频
↓
需要直接生成音频文件(如m4a)?
├── 是 → 使用 AVRecorder(开箱即用)
└── 否 → 需要PCM原始数据
├── ArkTS/JS开发 → 使用 AudioCapturer
└── Native C/C++开发 → 使用 OHAudio
二、各录制方式
2.1 AVRecorder(推荐首选)
定位:用于音频录制的ArkTS/JS API,集成了音频输入录制、音频编码和媒体封装的功能。
输出格式:m4a等编码格式的音频文件
优势:
-
开箱即用,无需关心编码细节
-
直接生成标准音频文件
-
支持多种音频格式
// AVRecorder使用示例
import { media } from '@kit.MediaKit';
let avRecorder = await media.createAVRecorder();
await avRecorder.prepare({
audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
profile: {
audioBitrate: 48000,
audioCodec: media.CodecMimeType.AUDIO_AAC,
audioSampleRate: 44100,
audioChannels: 2
},
url: 'file:///data/storage/el2/base/haps/entry/files/recording.m4a'
});
await avRecorder.start();
2.2 AudioCapturer(专业数据处理)
定位:用于音频输入的ArkTS/JS API,仅支持PCM格式,需要应用持续读取音频数据。
输出格式:PCM原始数
要求:
-
仅支持PCM格式
-
需要应用持续读取音频数据
-
开发者需具备音频处理基础知识
// AudioCapturer使用示例
import { audio } from '@kit.AudioKit';
let audioCapturer = await audio.createAudioCapturer({
streamInfo: {
samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
channels: audio.AudioChannel.CHANNEL_2,
sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
}
});
await audioCapturer.start();
// 持续读取PCM数据
let buffer = await audioCapturer.read(size);
2.3 OHAudio(Native层开发)
定位:用于音频输入的Native API,同时支持普通音频通路和低时延通路。
输出格式:PCM原始数据
适用场景:
-
依赖Native层实现音频输入功能的场景
-
需要极致性能的音频应用
-
C/C++开发的游戏或应用
-
需要低时延的实时音频处理
优势:
-
Native层实现,性能更优
-
支持低时延通路
-
C/C++接口,适合跨平台
三、开发音频录制应用须知
3.1 权限申请
应用可以调用麦克风录制音频,但该行为属于隐私敏感行为,在调用麦克风前,需要先向用户申请授权:
| 权限 | 说明 |
|---|---|
| ohos.permission.MICROPHONE | 麦克风权限,必须申请 |
// 申请麦克风权限
import { abilityAccessCtrl } from '@kit.AbilityKit';
let atManager = abilityAccessCtrl.createAtManager();
await atManager.requestPermissionsFromUser(context, ['ohos.permission.MICROPHONE']);
3.2 麦克风管理
如何使用和管理麦克风请参考管理麦克风静音状态。
3.3 后台录制要求
| 需求 | 要求 |
|---|---|
| 持续录制或后台录制 | 必须申请长时任务,避免进入挂起(Suspend)状态 |
| 录制启动位置 | 必须在前台启动,启动后可以退后台 |
| 后台启动 | 在后台启动录制将会失败 |
// 申请长时任务示例
import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
await backgroundTaskManager.startBackgroundRunning(this.context,
backgroundTaskManager.BackgroundMode.AUDIO_RECORDING, wantAgent);
3.4 音频流类型选择
录制音频时需要使用合适的录制流类型,请参考使用合适的音频流类型。
3.5 屏幕录制
如果需要实现屏幕录制功能,可参考:
核心要点
| 要点 | 说明 |
|---|---|
| 权限申请 | 必须申请ohos.permission.MICROPHONE权限 |
| 后台录制 | 必须申请长时任务,且必须在前台启动 |
| AVRecorder | 推荐首选,直接生成m4a文件 |
| AudioCapturer | 获取PCM原始数据,适合专业处理 |
| OHAudio | Native层方案,性能最优 |
鸿蒙音频录制提供了AVRecorder(开箱即用,生成m4a)、AudioCapturer(PCM原始数据,专业处理)和OHAudio(Native层,高性能)三种方案,录制前需申请麦克风权限,后台录制需申请长时任务。
更多推荐


所有评论(0)