OpenHarmony实战开发-如何使用AVRecorder开发音频录制功能

使用AVRecorder可以实现音频录制功能,本开发指导将以“开始录制-暂停录制-恢复录制-停止录制”的一次流程为示例,向开发者讲解AVRecorder音频录制相关功能。

在进行应用开发的过程中,开发者可以通过AVRecorder的state属性,主动获取当前状态或使用on(‘stateChange’)方法监听状态变化。开发过程中应该严格遵循状态机要求,例如只能在started状态下调用pause()接口,只能在paused状态下调用resume()接口。

图1 录制状态变化示意图
在这里插入图片描述
状态的详细说明请参考AVRecorderState。

开发步骤及注意事项

详细的API说明请参考AVRecorder API参考。

1.创建AVRecorder实例,实例创建完成进入idle状态。

说明:

需要在avRecorder完成赋值(即“avRecorder = recorder; ”运行完成)后,再进行剩余操作。

import media from '@ohos.multimedia.media';
import {
    BusinessError } from '@ohos.base';

let avRecorder: media.AVRecorder;
media.createAVRecorder().then((recorder: media.AVRecorder) => {
   
  avRecorder = recorder;
}, (error: BusinessError) => {
   
  console.error(`createAVRecorder failed`);
})

2.设置业务需要的监听事件,监听状态变化及错误上报。

在这里插入图片描述

import {
    BusinessError } from '@ohos.base';

// 状态上报回调函数
avRecorder.on('stateChange', (state: media.AVRecorderState, reason: media.StateChangeReason) => {
   
  console.log(`current state is ${
    state}`);
  // 用户可以在此补充状态发生切换后想要进行的动作
})

// 错误上报回调函数
avRecorder.on('error', (err: BusinessError) => {
   
  console.error(`avRecorder failed, code is ${
    err.code}, message is ${
    err.message}`);
})

3.配置音频录制参数,调用prepare()接口,此时进入prepared状态。

说明: 配置参数需要注意:

  • prepare接口的入参avConfig中仅设置音频相关的配置参数,如示例代码所示。
  • 如果只需要录制音频,请不要设置视频相关配置参数;如果需要录制视频,可以参考视频录制开发指导进行开发。直接设置视频相关参数会导致后续步骤报错。
  • 需要使用支持的录制规
### HarmonyOS音频解码开发教程 #### 1. 准备工作 为了在 HarmonyOS 上进行音频解码开发开发者需先安装并配置好 Deveco Studio 开发环境[^1]。该集成开发环境中提供了创建、编译以及调试应用程序所需的各种工具。 #### 2. 使用 SystemCapability 进行音频处理 根据 OpenHarmony 的官方文档,在实现音频解码功能时会涉及到 `SystemCapability.Multimedia.Audio` 模块中的多个 API 接口调用[^2]。这些接口允许访问底层硬件资源来完成音轨读取、格式转换等任务。 #### 3. 创建 AudioRenderer 对象实例化渲染器 通过如下代码片段可初始化一个用于播放经过解码后的 PCM 数据流的对象: ```typescript import audio from '@ohos.multimedia.audio'; let rendererOptions = { sampleRate: 44100, channels: 2, format: 'PCM_16B' }; const myAudioRenderer = await audio.createAudioRenderer(rendererOptions); ``` 此处设置采样率为 44.1kHz 双声道 16bit 编码方式作为例子参数传递给构造函数。 #### 4. 解码音频文件并发送至 Renderer 当获取到目标媒体源之后(比如本地存储路径),可以通过内置或第三方库解析其编码格式,并将其转化为适合上述 Render 器接收的数据形式。下面是一个简单的伪代码表示法说明这一过程: ```typescript // 加载音频文件并准备解码... for (chunk of decodedDataChunks) { try { let writtenBytesCount = await myAudioRenderer.write(chunk.buffer); console.log(`Wrote ${writtenBytesCount} bytes`); } catch (error) { console.error('Failed to write data:', error.message); } } ``` 此部分逻辑依赖具体使用的解码方案而定;如果是 MP3 或 AAC 类型,则建议采用成熟的开源项目如 FFmpeg 来辅助完成这项工作。 #### 5. 控制与管理 最后还需要考虑一些额外的功能需求,像暂停/恢复、调整音量大小等功能都可以基于已有的 API 实现。同时也要注意监听可能出现的状态变化事件以便及时响应异常情况的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值