HarmonyOS鸿蒙Next中录音采集数据能不能直接设置 readData 回调每次返回的 buffer 大小?
HarmonyOS鸿蒙Next中录音采集数据能不能直接设置 readData 回调每次返回的 buffer 大小? 录音采集数据能不能直接设置 readData 回调每次返回的 buffer 大小?
我录制pcm 采样率16000 现在这个回调是640字节回调一次,有没有办法例如设置它是3840字节回调一次呢?
目前没有接口可以直接设置回调的buffer大小,仅可通过自己拼接的回调数据的方式来达到需要的大小
更多关于HarmonyOS鸿蒙Next中录音采集数据能不能直接设置 readData 回调每次返回的 buffer 大小?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
不能。readData 回调返回的 buffer 大小由底层音频框架根据采样率、通道数、位深等参数自动计算,无法直接指定。可通过 AudioCapturerInfo 的 bufferSizeInBytes 字段间接影响,但实际回调大小仍由系统决定,需在回调中按实际返回的 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 数据,可正常设置,但需接受相应的录音延迟。

