HarmonyOS 鸿蒙Next AudioRenderer.on('write')中有没有直接给buffer赋值出声的案例

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next AudioRenderer.on(‘write’)中有没有直接给buffer赋值出声的案例

文档案例都是在事件writeData中,从文件读取一段buffer进行播放。有没有直接给buffer赋ArrayBuffer数组值出声的案例。我自己给回调中的buffer赋一段正弦序列设备没有出声。API13,mate60pro。

官方案例:

  1. let writeDataCallback = (buffer: ArrayBuffer) => {
  2. let options: Options = {
  3. offset: bufferSize,
  4. length: buffer.byteLength
  5. };
  6. try {
  7. fs.readSync(file.fd, buffer, options);
  8. bufferSize += buffer.byteLength;
  9. // 系统会判定buffer有效,正常播放。
  10. return audio.AudioDataCallbackResult.VALID;
  11. } catch (error) {
  12. console.error(‘Error reading file:’, error);
  13. // 系统会判定buffer无效,不播放。
  14. return audio.AudioDataCallbackResult.INVALID;
  15. }
  16. };
  17. audioRenderer.on(‘writeData’, writeDataCallback);


更多关于HarmonyOS 鸿蒙Next AudioRenderer.on('write')中有没有直接给buffer赋值出声的案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
开发者您好,感谢您的反馈,我们将确认此问题

更多关于HarmonyOS 鸿蒙Next AudioRenderer.on('write')中有没有直接给buffer赋值出声的案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,AudioRenderer.on('write')回调通常用于处理音频数据的写入操作。对于直接给buffer赋值出声的情况,可以通过以下方式实现,但需要注意的是,实际操作中通常会有更多的上下文处理,例如音频格式、采样率、声道数等配置。

AudioRenderer.on('write')回调中,你可以直接操作传入的buffer对象来填充音频数据。例如,假设你有一个音频数据源(可能是PCM格式的数据),你可以直接将这部分数据复制到buffer中。

以下是一个简化的示例(伪代码),展示了如何在回调中给buffer赋值:

audioRenderer.on('write', (buffer) => {
    // 假设audioData是你的PCM音频数据源
    let audioData = getAudioPCMData(); // 你需要实现这个函数来获取音频数据
    
    // 将音频数据复制到buffer中
    buffer.set(audioData);
    
    // 返回已写入的字节数
    return audioData.length;
});

请注意,上述代码仅为示例,实际使用中你需要确保音频数据的格式、采样率等与AudioRenderer的配置相匹配,并且buffer的大小足够容纳你的音频数据。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部