从有符号PCM_-S16格式到python中的浮点数

2024-06-28 11:24:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

然而,这实际上是我第一次将forray应用到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作为句点大小。 请帮忙。在


Tags: innumpyleformat编程计算机绘制音频
1条回答
网友
1楼 · 发布于 2024-06-28 11:24:54

根据thisPCM_FORMAT_S16_LE是每个信道的有符号16位样本(小端字节顺序)。当使用不带dtype参数的numpy.fromstring时,它默认为float,它被映射到float64。因此,你的1000个16位样本转换成了250个64位样本。在

我认为你应该做的是:

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

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

相关问题 更多 >