鸿蒙Next开发中如何使用arkts audiocapturer获取录音实时音量大小

在鸿蒙Next开发中,使用ArkTS的AudioCapturer获取录音时,如何实时获取当前音量大小?尝试了官方文档中的方法,但回调数据始终为0,请问正确的实现方式是什么?是否需要额外配置权限或参数?

2 回复

在ArkTS中,用AudioCapturer录音时,可以通过getAudioTimegetBufferSize计算实时音量。简单说:录音时读取缓冲区数据,计算均方根(RMS)值,再转成dB。代码大概长这样:

let buffer = ... // 从AudioCapturer读取的数据
let sum = 0;
for (let i = 0; i < buffer.length; i += 2) {
    let sample = buffer.readInt16LE(i);
    sum += sample * sample;
}
let rms = Math.sqrt(sum / (buffer.length / 2));
let db = 20 * Math.log10(rms);

搞定!记得处理权限和异常,别让App偷偷录音被抓包哦~ 😏

更多关于鸿蒙Next开发中如何使用arkts audiocapturer获取录音实时音量大小的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next开发中,可以使用AudioCapturergetAudioTimegetBufferSize方法结合音频数据处理来获取实时音量。以下是实现步骤和代码示例:

  1. 创建AudioCapturer实例
import audio from '@ohos.multimedia.audio';

let audioCapturer: audio.AudioCapturer;
const streamInfo: audio.AudioStreamInfo = {
  samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
  channels: audio.AudioChannel.CHANNEL_1,
  sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
  encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
};

audio.createAudioCapturer(streamInfo, (err, capturer) => {
  if (!err) {
    audioCapturer = capturer;
  }
});
  1. 读取音频数据并计算音量
async function getRealTimeVolume(): Promise<number> {
  const bufferSize = await audioCapturer.getBufferSize();
  const audioBuffer = await audioCapturer.read(bufferSize, false);
  
  // 将ArrayBuffer转换为Int16Array
  const data = new Int16Array(audioBuffer.buffer);
  let sum = 0;
  
  // 计算平方和
  for (let i = 0; i < data.length; i++) {
    sum += data[i] * data[i];
  }
  
  // 计算均方根(RMS)作为音量值
  const rms = Math.sqrt(sum / data.length);
  return Math.min(rms / 32768, 1); // 归一化到0-1范围
}
  1. 实时获取音量
// 启动录音
audioCapturer.start();

// 定时获取音量(例如每100ms)
setInterval(async () => {
  const volume = await getRealTimeVolume();
  console.log(`当前音量: ${volume}`);
}, 100);
  1. 停止录音
audioCapturer.stop();
audioCapturer.release();

关键说明

  • 音量计算采用RMS(均方根)算法,反映音频信号的平均能量
  • 通过归一化处理将音量值转换到0-1范围
  • 实际使用时需要添加错误处理
  • 记得在应用配置文件中申请ohos.permission.MICROPHONE权限

这种方法可以实时监测录音音量,适用于需要音频电平指示的应用场景。

回到顶部