Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio 16位波值范围_Audio_Range_16 Bit_Wave - Fatal编程技术网

Audio 16位波值范围

Audio 16位波值范围,audio,range,16-bit,wave,Audio,Range,16 Bit,Wave,我遇到了这个MSDN链接: . 邮报说: 16位采样范围从-32760到32760 这不是+/-(2^16)/2,因为 一些疯狂的生意,包括Endianness和2的补码 这篇文章有很多错误,但这部分最让我恼火。有多少是正确的?这篇文章在这方面是错误的。首先,endianness与任何事情都毫无关系。但2s补码存在一个问题,即负值多于正值。通常情况下,在执行信号处理时,值将转换为-1.0到1.0范围内的双精度,直到稍后转换为所需的输出位分辨率。如果你乘以32768并转换成一个整数,那么很明显你会

我遇到了这个MSDN链接: . 邮报说:

16位采样范围从-32760到32760

这不是+/-(2^16)/2,因为

一些疯狂的生意,包括Endianness和2的补码


这篇文章有很多错误,但这部分最让我恼火。有多少是正确的?这篇文章在这方面是错误的。首先,endianness与任何事情都毫无关系。但2s补码存在一个问题,即负值多于正值。通常情况下,在执行信号处理时,值将转换为-1.0到1.0范围内的双精度,直到稍后转换为所需的输出位分辨率。如果你乘以32768并转换成一个整数,那么很明显你会得到一个正1.0的溢出。所以最好乘以32767。我不知道这是否以任何方式正式化,但根据我的经验,这就是它的方式。如果你遵循这个假设,你会遇到一个值为-32768的wave文件,在转换为float时,你会得到一个略小于-1.0的数字

我不知道这是否以任何方式正式化

对!!它是!正如jaket假设的那样,看起来和(应该是兼容WAVE的应用程序可以使用的)都断言了一个非常清晰的16位采样范围-32768到32767


我发现我经常需要对MSDN文章持保留态度,但它们有时很难被忽视,因为它们是权威性的。在“网络”中搜索“wav 32760”将发现本文造成的一些损害。

我做了一些测试,似乎将所有内容除以32768是安全的。这是因为从float转换为short int时截断的工作方式。如果修改float,则需要在相乘后将其钳制在-32768和32767之间。换句话说,确保最大值小于1.0f;一个规范是另一个规范的超集,它很容易拥有比它所基于的规范更大的数据范围。@MarkRansom一般来说,这是一个公平的观点。我更新了一个参考,似乎是官方的RIFF规范,并更仔细地说明了为什么BWF在这里应用——不管你怎么看,32760似乎是一个虚假的数字。这个RIFF规范的发现很好!它确实给出了一个明确的-32768到32767范围。请参阅我对这个问题的评论,了解我自己关于限制范围是如何产生的理论。一些非常早期的过采样转换器在采样值方面遇到了问题,这些采样值一直传到轨道上;有些CD在早期的CD播放机上播放时会产生严重失真。这些问题早就解决了,但数据范围限制可能是基于对兼容性的需求。怀疑endianness或2的补码与此有关。@MarkRansom有趣的理论,感谢您的洞察力。