HarmonyOS NEXT鸿蒙开发:使用 AudioCapturer 录音(PCM 格式)

介绍

官方介绍

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权限)

在 Index.ets 文件中进行修改

导包

import {ReqAllPermissionsFromUser} from '../utils/RequestPermissions'

申请所有权限(这里根据业务情况选择多个授权或一个授权):

ReqAllPermissionsFromUser(this.context)

录音

工具类

详见 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)

  }
}

原文出处:/show_1GW2O8GGAVXW.html