Audio 是否可以/如何使用不是8的倍数的样本大小对WAV文件进行编码

Audio 是否可以/如何使用不是8的倍数的样本大小对WAV文件进行编码,audio,arduino,wav,Audio,Arduino,Wav,我试图从Arduino Uno的模拟输入对WAV文件进行编码。analogRead(pinNumber)函数返回0-1023之间的值。然后需要将该10位值编码到WAV文件中。有一个函数map(val、inMin、inMax、outMin、outMax)可以将其调整为完整的16位值(或8位值)。但理想情况下,如果我能简单地将WAV文件的样本大小设置为10位,那将是完美的。我知道如何将其写入报头,但我不知道它是否实际工作,或者如果数据不是8位的倍数,如何实际写入数据 如果可能的话,我假设它需要一些奇

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


如果可能的话,我假设它需要一些奇特的按位操作,但我不知道如何使其工作。

任何应用程序都不可能读取包含压缩10位样本的wave文件。很少有程序会读取压缩的24位数据。可能是因为将数据解压回32位太麻烦了


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

您只是想节省空间吗?我只是想不需要转换数据。我有10位数据,所以将其转换为16或8位是有损的。请参阅我的答案。我假设我的集成系统不可能做到这一点。所以我会按照你的建议来改变它。谢谢你的帮助。