鸿蒙Next ArkTS如何实现实时录音功能
在鸿蒙Next中使用ArkTS开发时,如何实现实时录音功能?需要获取麦克风音频流并进行实时处理,比如显示波形或上传到服务器。能否提供具体的API调用示例和权限配置方法?另外,实时录音时如何避免卡顿和内存泄漏问题?
2 回复
鸿蒙Next ArkTS实现实时录音?简单!
- 用
AudioCapturer类创建录音实例。 - 配置参数:采样率、声道、格式。
- 调用
start()开录,read()循环读取数据。 - 处理音频流(存文件或实时分析)。
- 记得
stop()和release()收尾!
代码虽短,小心别让手机变成“复读机”哦~ 😏
更多关于鸿蒙Next ArkTS如何实现实时录音功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next(HarmonyOS NEXT)中使用ArkTS实现实时录音功能,可以通过@ohos.multimedia.audio模块的AudioCapturer类来完成。以下是实现步骤和示例代码:
实现步骤
- 导入模块:引入
audio和fileIo模块。 - 配置音频参数:设置采样率、声道、采样格式等。
- 创建AudioCapturer实例:初始化录音器。
- 开始录音:调用
start()方法,并读取音频数据。 - 处理数据:将数据写入文件或实时传输。
- 停止录音:调用
stop()和release()释放资源。
示例代码
import audio from '@ohos.multimedia.audio';
import fileIo from '@ohos.file.fileIo';
async function startRecording() {
// 1. 配置音频参数
let audioConfig: audio.AudioCapturerOptions = {
streamInfo: {
samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, // 采样率
channels: audio.AudioChannel.CHANNEL_1, // 单声道
sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, // 采样格式
encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
},
capturerInfo: {
source: audio.SourceType.SOURCE_TYPE_MIC, // 音源为麦克风
capturerFlags: 0 // 标志位
}
};
// 2. 创建AudioCapturer实例
let audioCapturer: audio.AudioCapturer = await audio.createAudioCapturer(audioConfig);
// 3. 创建录音文件(路径需适配应用沙箱)
let filePath = 'xxx/recording.pcm'; // 替换为实际路径
let file = await fileIo.open(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
// 4. 开始录音
await audioCapturer.start();
console.log('Recording started...');
// 5. 循环读取数据并写入文件
const bufferSize = await audioCapturer.getBufferSize(); // 获取缓冲区大小
let buffer = new ArrayBuffer(bufferSize);
while (/* 根据业务条件控制循环,例如设置时长或手动停止 */) {
let options = {
isBlocking: true // 阻塞读取
};
let readSize = await audioCapturer.read(buffer, options);
if (readSize > 0) {
await fileIo.write(file.fd, buffer); // 写入文件
}
}
// 6. 停止并释放资源
await audioCapturer.stop();
audioCapturer.release();
await fileIo.close(file.fd);
console.log('Recording stopped and saved.');
}
// 调用函数开始录音
startRecording().catch((err) => {
console.error('Recording failed: ' + err.message);
});
注意事项
- 权限申请:在
module.json5中声明ohos.permission.MICROPHONE权限。 - 文件路径:使用应用沙箱路径(如
Context.filesDir)存储文件。 - 错误处理:添加
try-catch确保稳定性。 - 实时流处理:若需实时传输,可将
buffer通过网络发送而非写入文件。
通过以上代码,即可在鸿蒙Next中实现基本的实时录音功能。根据实际需求调整参数和处理逻辑。

