Python音频流PCM串到数组的高效转换

2024-04-20 13:32:50 发布

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

嗨,我想把通过麦克风录制的音频流转换成一个整数数组(或浮点数或其他什么),以便以后分析(fft等)。然而,我觉得我目前的方法有点低效,我认为我看到了零星的内存分配延迟。在

我之所以使用alsaaudio,是因为ossaudiodev不再适用于大多数Linux发行版,但这并不重要。我从设备中得到的音频流是2048个字符的字符串,对应1024个16位音频帧。我认为“array”是将字符串转换为int数组的最佳方法,但是在每个循环结束时,我必须为下一轮数据清除数组,这是我用del进行的,如果看看循环内部运行所需的时间(不包括读取),我会发现每第4个或第5个(这是零星的)循环将花费更长的时间,所以我的问题是在内存分配方面,我当前的策略是否有效?在

音频设备的设置如下:

import array
import alsaaudio as alsa
audio_data = array.array("h")
ain = alsa.PCM(alsa.PCM_CAPTURE,alsa.PCM_NORMAL,card='default')
ain.setchannels(1)
ain.setrate(rate)
ain.setformat(alsa.PCM_FORMAT_S16_LE)
ain.setperiodsize(1024)

然后在一个循环里我这样做

^{pr2}$

Tags: 方法内存字符串import时间整数数组音频