鸿蒙Next ArkTS如何实现实时录音功能

在鸿蒙Next中使用ArkTS开发时,如何实现实时录音功能?需要获取麦克风音频流并进行实时处理,比如显示波形或上传到服务器。能否提供具体的API调用示例和权限配置方法?另外,实时录音时如何避免卡顿和内存泄漏问题?

2 回复

鸿蒙Next ArkTS实现实时录音?简单!

  1. AudioCapturer 类创建录音实例。
  2. 配置参数:采样率、声道、格式。
  3. 调用 start() 开录,read() 循环读取数据。
  4. 处理音频流(存文件或实时分析)。
  5. 记得 stop()release() 收尾!
    代码虽短,小心别让手机变成“复读机”哦~ 😏

更多关于鸿蒙Next ArkTS如何实现实时录音功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中使用ArkTS实现实时录音功能,可以通过@ohos.multimedia.audio模块的AudioCapturer类来完成。以下是实现步骤和示例代码:

实现步骤

  1. 导入模块:引入audiofileIo模块。
  2. 配置音频参数:设置采样率、声道、采样格式等。
  3. 创建AudioCapturer实例:初始化录音器。
  4. 开始录音:调用start()方法,并读取音频数据。
  5. 处理数据:将数据写入文件或实时传输。
  6. 停止录音:调用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中实现基本的实时录音功能。根据实际需求调整参数和处理逻辑。

回到顶部