是否可以/如何以不是8的倍数的样本大小来编码WAV文件

zee*_*eel 1 audio arduino wav

我正在尝试从Arduino Uno的模拟输入中编码WAV文件。该analogRead(pinNumber)函数返回0到1023之间的值。然后需要将此10位值编码到WAV文件中。有一个功能map(val, inMin, inMax, outMin, outMax)可以将其调整为完整的16位值(或8位值)。但是理想情况下,如果我可以将WAV文件的样本大小简单地设置为10位,那将是完美的。我知道如何将其写入标头,但我不知道它是否会真正起作用,或者如果它不是8位的倍数,则如何实际写入数据。

如果可能的话,我假设它需要一些花哨的按位运算,但是我不知道如何使它起作用。

jak*_*ket 5

任何应用程序都不可能读取带有打包的10位样本的wave文件。几乎没有程序会读取打包的24位。可能是因为这样繁琐的工作才能将其解压缩为32位。

最好的选择是将其存储为16位带符号。这个问题提到了调用映射函数,该函数可能会将10位音频重新缩放为16位音频。更好的解决方案是将10位样本向上移位,以使它们左对齐,而将较低的6位保留为零。这样做有两个好处。首先,重新缩放不会(显然)不会提高音频质量,只会增加一些额外的量化噪声。其次,如果您想将其读回为10位音频,则可以将其向下移或其他任何方式而不会降低精度。