将Alsa帧转换为模拟值

时间:2016-11-28 15:46:01

标签: c alsa

我正在用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 ......它不应该是。

因此,当出现此类峰值时,我开始打印xy的值。 输出非常清楚:总是当出现这样的尖峰时y等于127而x的值大约是230左右。

在我的理解中,我的转换仍然是正确的,但似乎Alsa以不同的方式对待它的价值观。因此,无论出于何种原因,第二个字节中127的特殊值必须以不同方式进行转换?!

我不想相信我的麦克风坏了,所以与Alsa图书馆合作的人也可以就我的问题给我一些建议。
我也很高兴Alsa-library的功能为我做了这个转换,因为我没有找到它但可能会忽略它。

0 个答案:

没有答案