HarmonyOS鸿蒙Next中录音采集数据能不能直接设置 readData 回调每次返回的 buffer 大小?

HarmonyOS鸿蒙Next中录音采集数据能不能直接设置 readData 回调每次返回的 buffer 大小? 录音采集数据能不能直接设置 readData 回调每次返回的 buffer 大小?

我录制pcm 采样率16000 现在这个回调是640字节回调一次,有没有办法例如设置它是3840字节回调一次呢?

3 回复

目前没有接口可以直接设置回调的buffer大小,仅可通过自己拼接的回调数据的方式来达到需要的大小

更多关于HarmonyOS鸿蒙Next中录音采集数据能不能直接设置 readData 回调每次返回的 buffer 大小?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不能。readData 回调返回的 buffer 大小由底层音频框架根据采样率、通道数、位深等参数自动计算,无法直接指定。可通过 AudioCapturerInfobufferSizeInBytes 字段间接影响,但实际回调大小仍由系统决定,需在回调中按实际返回的 buffer.length 处理。

在HarmonyOS Next中,可以通过创建 AudioCapturer 时指定 bufferSizeInBytes 参数来直接设置 readData 回调每次返回的 buffer 大小。示例:

import audio from '@ohos.multimedia.audio';

let audioCapturer = await audio.createAudioCapturer({
  streamInfo: {
    samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_16000,
    channelCount: 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
  },
  bufferSizeInBytes: 3840 // 指定回调 buffer 大小
});

audioCapturer.on('readData', (buffer: ArrayBuffer) => {
  // buffer 长度将固定为 3840 字节
});

注意:bufferSizeInBytes 需为音频帧长的整数倍,且不小于系统允许的最小值。对 16000 Hz、16 bit、单声道 PCM,每 20 ms 帧长为 640 字节,3840 字节对应 120 ms 数据,可正常设置,但需接受相应的录音延迟。

回到顶部