我正在用C语言编写一个应该可视化音频的程序。作为音频源,我使用麦克风和Alsa C Sound库。我从Alsa库中获取声音帧,进行一些变换(傅立叶分析和类似),然后将它们可视化。除了一个例外,我几乎有一个工作程序,似乎我正在以错误的方式将Alsa帧转换为双倍。
我就是这样做的:
unsigned char x=getFirstByte();
signed char y=getSecondByte();
double analog_signal=(y*256+x)/32768.;
现在这段代码有效,但有时(相对经常)我得到尖峰,其中analog_signal
的值约为0.99 ......它不应该是。
因此,当出现此类峰值时,我开始打印x
和y
的值。
输出非常清楚:总是当出现这样的尖峰时y
等于127而x
的值大约是230左右。
在我的理解中,我的转换仍然是正确的,但似乎Alsa以不同的方式对待它的价值观。因此,无论出于何种原因,第二个字节中127的特殊值必须以不同方式进行转换?!
我不想相信我的麦克风坏了,所以与Alsa图书馆合作的人也可以就我的问题给我一些建议。
我也很高兴Alsa-library的功能为我做了这个转换,因为我没有找到它但可能会忽略它。