WAV格式的差异(JS / NodeJS)

我正在尝试使用WebRTC来录制audio,然后将其存储在服务器端。 我的服务器是使用NodeJS制作的,而且我正在使用POST将数据从客户端传输到服务器。

在客户端上,我将数据从wav BLOB转换为base64,然后在服务器端读取数据,将其翻译为二进制数据,然后将其写入文件中。 应该没事吧?

只有一个问题:我从客户端下载的内容和发送到服务器的内容之间出现了一些非常不好的不一致之处。 有时它是增加的字节,有时候它只是被删除的数据块。 如果只是添加了字节,那就意味着一个字符集问题(从一个到另一个,然后是另一个等),但是在某些时候我增加了280个字节。

我在这里添加了一个hex diff的图片: http : //i.stack.imgur.com/psqf4.png (抱歉,我没有足够的声望直接发布图片)

另外,运行这些文件给我以下:(uuid.wav是服务器之一,而output(1).wav是客户端之一)

9F2B75D3-4C34-4C8F-935E-FC7637D7A054.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 4 bit, stereo 11321924 Hz

output (1).wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz

…显然这里有什么问题。 此外,试图修复头,或转换WAV给我一个错误沿线:无法find数据块/数据块大小为0。

任何想法可能是什么原因造成的?

这看起来像一层代码试图将二进制数据转换为Unicode。 0x44 0xAC(小端为0xAC44,即44100,表示44.1 kHz采样率)转为0x44 0xC2 0xAC。 这得到字节交换到0x00ACC244,这是11321924赫兹,与您在损坏的文件中看到的一致。

那些0xC2添加肯定看起来像Unicode(UTF-8)文物。 我不知道你正在使用哪些数据types和函数,但是你需要审计这些步骤,以确保它们都不会尝试执行隐式Unicode转换。