HarmonyOS 鸿蒙Next 音频ArrayBuffer转wav音频文件
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
您好,目前是这么个情况:
为了避免传输过程中导致的错误,所以我先在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和框架进行概述:
-
获取ArrayBuffer数据:首先,确保你已经从某个音频源获取了ArrayBuffer数据,这通常是通过音频录制或网络请求得到的音频二进制数据。
-
解析ArrayBuffer:分析ArrayBuffer中的数据格式,了解音频的采样率、声道数、位深度等参数。这些信息对于生成WAV文件头至关重要。
-
构建WAV文件头:根据解析得到的音频参数,构建符合WAV格式的音频文件头。WAV文件头包含了音频文件的元数据,如RIFF块、fmt子块和数据块的大小等。
-
合并文件头和音频数据:将构建好的WAV文件头与ArrayBuffer中的音频数据合并,形成完整的WAV文件内容。
-
保存为WAV文件:将合并后的数据写入文件系统中,指定文件名为.wav后缀,完成转换。
在鸿蒙系统中,这些操作可能依赖于其提供的文件操作和内存管理API。具体实现时,需要查阅鸿蒙系统的官方文档,了解相关API的使用方式。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,