从签名的PCM_FORMAT_S16_LE转到python中的浮点数

时间:2013-01-25 01:12:05

标签: python numpy

我有一个beagleboard我正在尝试编程。 我正在使用PyAlsaAudio捕获音频并绘制它(并对其进行sokme处理)。

然而,这实际上是我第一次进入python和计算机音频。通常我使用daq系统和matlab,所以我从来没有处理二进制(我假设)数字。

pyalsa允许我以多种格式获取输出,但示例都使用PCM_FORMAT_S16_LE所以我坚持使用它,除非有人另有说法。

如果从PCM_FORMAT_S16_LE转到数字数组,我需要学习什么。应该很简单,但我还没有找到一个简单的解决方案。

感谢阅读和帮助。 穆斯塔法

编辑:1 只想添加我试过的

In [113]: aaa = numpy.fromstring(data)
In [112]: numpy.size(aaa)
Out[112]: 250

但尺寸错误,因为我已将1000指定为期间大小。 请帮忙。

1 个答案:

答案 0 :(得分:0)

根据thisPCM_FORMAT_S16_LE每个通道的有符号16位采样(Little Endian字节顺序)。如果您使用numpy.fromstring而不使用dtype参数,则默认为float,映射到float64。因此,您的1000个16位样本只能转换为250个64位样本。

我认为你应该做的是:

aaa = numpy.fromstring(data, dtype='<i2')

在数据类型中,<表示小字节序,i有符号整数类型,2 16位或2字节长度。