HarmonyOS 鸿蒙Next 音频ArrayBuffer转wav音频文件

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

HarmonyOS 鸿蒙Next 音频ArrayBuffer转wav音频文件 公司做OpenHarmony,接了个ets的项目,项目里有个需求:发送语音。

在A设备录音,然后发送到B设备。B设备接收到之后,进行播放。

目前的实现思路:在A设备录音完成后,用’@ohos.fileio’库把文件读取成ArrayBuffer类型,放在内存。然后用udp发送到B设备,B设备再把ArrayBuffer类型的数据用’@ohos.fileio’库中的fileio.write方法保存到本地,再进行播放;

目前遇到的问题:B设备的ArrayBuffer转成本地文件后,播放文件总是失败;

目前猜测的原因:’@ohos.fileio’库中的fileio.write方法智能对文本类型的文件保存有效,对音视频的文件无效;

请问哪位大佬知道,音频ArrayBuffer转成本地wav音频文件应该怎么转吗?ets有其他的方式吗?


更多关于HarmonyOS 鸿蒙Next 音频ArrayBuffer转wav音频文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复
您好,目前是这么个情况:

为了避免传输过程中导致的错误,所以我先在A设备里边,把录音文件1.wav转成ArryBuffer之后,再在A设备把ArrayBuffer转成本地文件2.wav,过程是成功的,但是播放不了。我把录音文件1.wav和手动转换之后的文件2.wav通过终端从设备导出到电脑,其中1.wav能正常播放,2.wav却是播放失败,播放器诶是无法播放。

以下是我的转换代码:

录音文件转成ArrayBuffer:

```javascript
mp3ToArrayBuffer(callback: (buf) => void){
  let buf = new ArrayBuffer(4096);
  let fd = fileIo.openSync(this.currentFilePath, 0o2);
  fileIo.read(fd, buf, (err, readOut) => {
    if (readOut) {
      console.info("read file data succeed");
      console.log(String.fromCharCode.apply(null, new Uint8Array(readOut.buffer)));
      this.desStr = 'read file data succeed'

      callback(readOut.buffer)

    }else{
      this.desStr = 'err:' + JSON.stringify(err)
    }
  })
}

ArrayBuffer转成本地文件:

this.mp3ToArrayBuffer((buf) => {
  let fileName = 'test' + '.wav'

  this.localFilePath = path + '/' + fileName
  let fd = fileIo.openSync(this.localFilePath, 0o2 | 0o100, 0o666)

  fileIo.write(fd, buf, (err, bytesWritten) => {
    if (bytesWritten) {
      console.info("write data to file succeed and size is:"+ bytesWritten);
      this.desStr = "write data to file succeed and size is:"+ bytesWritten
    }
  });
})

更多关于HarmonyOS 鸿蒙Next 音频ArrayBuffer转wav音频文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


楼主,你好,播放失败有没有什么提示信息吗?能否把这个流程“B设备的ArrayBuffer转成本地文件后,播放文件总是失败;”的代码发来看下,方便更快定位

您好,代码已经贴出来啦!

在HarmonyOS(鸿蒙)系统中,将音频的ArrayBuffer转换为WAV音频文件,可以通过以下步骤实现,这里不涉及Java或C语言代码,而是基于鸿蒙系统可能的API和框架进行概述:

  1. 获取ArrayBuffer数据:首先,确保你已经从某个音频源获取了ArrayBuffer数据,这通常是通过音频录制或网络请求得到的音频二进制数据。

  2. 解析ArrayBuffer:分析ArrayBuffer中的数据格式,了解音频的采样率、声道数、位深度等参数。这些信息对于生成WAV文件头至关重要。

  3. 构建WAV文件头:根据解析得到的音频参数,构建符合WAV格式的音频文件头。WAV文件头包含了音频文件的元数据,如RIFF块、fmt子块和数据块的大小等。

  4. 合并文件头和音频数据:将构建好的WAV文件头与ArrayBuffer中的音频数据合并,形成完整的WAV文件内容。

  5. 保存为WAV文件:将合并后的数据写入文件系统中,指定文件名为.wav后缀,完成转换。

在鸿蒙系统中,这些操作可能依赖于其提供的文件操作和内存管理API。具体实现时,需要查阅鸿蒙系统的官方文档,了解相关API的使用方式。

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

回到顶部