从音频字节创建 wav 文件

Posted

技术标签:

【中文标题】从音频字节创建 wav 文件【英文标题】:Create wav file from audio bytes 【发布时间】:2021-01-08 10:04:30 【问题描述】:

我正在调试“语音转文本”项目,并希望在服务器端将通过 websockets 发送的音频字节保存在 wav 文件中。

音频来自麦克风,由网络浏览器录制。 我知道那些:

1 个频道 样本是 16 位有符号整数 采样率 = 44 100 Hz

在服务器端,每次我通过 websocket 获得一个新的音频数据块时,我都会将它存储到一个数组中。当我完成接收后,我会这样做:

full_audio_bytes = b''.join(audio_bytes)  # this is my table of chunks of audio data        
with wave.open("myaudiofile.wav", "wb") as audiofile:
 audiofile.setsampwidth(16)
 audiofile.setnchannels(1)
 audiofile.setframerate(44100)
 audiofile.writeframesraw(full_audio_bytes)  # I tried `writeframes` too

我收到此错误wave.Error: # channels not specified

【问题讨论】:

【参考方案1】:

好的,我在日志数量中找不到,但之前还有另一个错误:wave.error bad sample width,这是因为setsampwidth 方法需要字节而不是位。有了audiofile.setsampwidth(2),居然可以写我的wave文件了!

修改后的代码:

full_audio_bytes = b''.join(audio_bytes)  # this is my table of chunks of audio data        
with wave.open("myaudiofile.wav", "wb") as audiofile:
 audiofile.setsampwidth(é)
 audiofile.setnchannels(1)
 audiofile.setframerate(44100)
 audiofile.writeframes(full_audio_bytes)

【讨论】:

以上是关于从音频字节创建 wav 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 AUHAL 音频单元将字节写入音频文件

使用 C 绕过声音/音频文件 (WAV)

音频处理WAV 文件格式分析 ( 逐个字节解析文件头 | 相关字段的计算公式 )

从数组中的音频字节获取音高或幅度等信息

Qt ------ WAV 音频文件介绍

如何通过 javascript/html5 播放 wav 音频字节数组?