我使用kinect提取音频并对其功能进行分类,但是我有一个问题。在http://msdn.microsoft.com/en-us/library/hh855698.aspx上,它表示audio.start方法打开音频数据流(16位PCM格式,以16 kHz采样),并开始捕获从传感器流出的音频数据。问题是我不知道如何显示pcm数据,也不知道该方法是否返回pcm真值。因为使用sdk示例,我得到的值类似于200、56、17,并且我认为音频值更像-3 * 10 ^ -5。
那么有人知道我如何获得真正的PCM值吗?还是我做错了什么?
谢谢
最佳答案
我不会期望任何特定的值。 16位PCM表示它是一系列16位整数,因此-3 * 10-5(-0.00003)无法表示。
我猜想它是用16位有符号整数(如WAV文件)编码的,范围是-32768到32767。如果您非常安静,则该值可能接近0。如果发出很多噪音您也会看到一些更高的值。
查看this diagram(来自Wikipedia的article on PCM),该图显示了使用4位无符号整数(范围为0到15)编码为PCM的正弦波。
看到4位正弦波如何在7左右振荡?那就是平衡。如果它是一个带符号的4位整数(范围在-8到7之间),则将具有相同的形状,但其平衡将是0-值将偏移-8,因此它将在0附近振荡。
您可以测量从平衡点到正弦波的最高点或最低点的距离,以获取其振幅,或者广义上说,它是音量(这就是为什么如果您安静的话,在16位带符号位中通常会看到接近0的值)数据)。这可能是您可以执行的最简单的功能检测。您可以在网上找到很多关于此的很好的解释,例如http://scienceaid.co.uk/physics/waves/sound.html。
如果不确定,可以将其保存到文件中并使用Audacity之类的文件进行播放。摆弄输入设置,您很快就会知道格式。
关于c# - Kinect音频PCM值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17113018/