HarmonyOS NEXT鸿蒙开发:使用 AudioCapturer 录音(PCM 格式) 作者:马育民 • 2025-12-11 18:50 • 阅读:10011 # 介绍 [官方介绍](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/using-audiocapturer-for-recording-V5 "官方介绍") `AudioCapturer` 是音频采集器,用于录制 **PCM(Pulse Code Modulation)**音频数据。是面向 **底层音频裸数据采集** 的核心 API,专为需要精准控制音频数据流的场景设计。 ### 核心作用 从麦克风等音频输入设备抓取 **原始 PCM 格式** 音频数据流,**不做任何编码**、**封装处理**,为 **实时音频处理、跨设备流转** 等场景提供高灵活度的裸数据能力,是鸿蒙音频生态中‘轻量化、高可控’的核心采集组件。 # 特点 1. 输出未经编码的 PCM(脉冲编码调制)原始音频数据(二进制流),开发者可直接操作数据流(如实时处理、传输、自定义编码),无封装层限制; 2. 参数可定制:支持自定义采样率,适配不同场景的音频质量需求,如: - 8kHz/16kHz/44.1kHz - 声道数(单声道 / 立体声) - 采样位深(16bit/24bit) 3. 资源占用:仅负责数据采集,无编码、封装逻辑,内存占用比高层录制 API(如 `AVRecorder`)低 50% 以上,CPU 消耗减少 30%; 4. 设备适配:兼容鸿蒙全品类硬件(手机、平板、穿戴设备、智慧屏),尤其适配穿戴设备等低功耗场景; # 步骤 1. 配置文件中声明需要麦克风权限 2. 向用户申请麦克风权限 3. 调用 `AudioCapturer` 录音 # 申请麦克风权限 详见:[HarmonyOS NEXT鸿蒙开发:申请麦克风权限(user_grant权限)](https://www.malaoshi.top/show_1GW2O70pkUe7.html "HarmonyOS NEXT鸿蒙开发:申请麦克风权限(user_grant权限)") 在 `Index.ets` 文件中进行修改 导包 ``` import {ReqAllPermissionsFromUser} from '../utils/RequestPermissions' ``` 申请所有权限(这里根据业务情况选择多个授权或一个授权): ``` ReqAllPermissionsFromUser(this.context) ``` [](https://www.malaoshi.top/upload/0/0/1GW2O6uore9Q.png) # 录音 ### 工具类 详见 [HarmonyOS NEXT鸿蒙开发:将 AudioCapturer 录音封装成工具类](https://www.malaoshi.top/show_1GW2O7ugzjlb.html "HarmonyOS NEXT鸿蒙开发:将 AudioCapturer 录音封装成工具类") ### 代码 点击按钮,开始录音 在 `Index.ets` 文件中进行修改 ``` import {init,start,stop,release,getFilePath} from '../utils/AudioCapturerUtil' import {requestAllPermissionsFromUser} from '../utils/RequestPermissions' @Entry @Component struct Index { @State text: string = '' @State eventType: string = '' aboutToAppear() { requestAllPermissionsFromUser(getContext(this)) init() } build() { // 列示布局 Column(){ Button("录音") .width(100) .height(50) .onTouch((event?: TouchEvent) => { if(event){ if (event.type === TouchType.Down) { this.eventType = '按下' start() // 开始录音 } if (event.type === TouchType.Up) { this.eventType = '抬起' stop() // 停止录音 const filePath = getFilePath() // 获取录音文件 console.log("---filePath:",filePath) } if (event.type === TouchType.Move) { this.eventType = '按下时移动' } } }) Text(this.text) .width("100%") .border({ width:1, color:Color.Black, }) .padding(5) }.width('100%').padding(10) } } ``` 原文出处:http://www.malaoshi.top/show_1GW2O8GGAVXW.html