Python中的音频录制

9

我想在Python中从USB麦克风录制短音频片段。我尝试过pyaudio,但似乎无法与ALSA通信,而alsaaudio的代码示例生成的文件无法读取。

那么我的问题是:在Python中记录来自USB麦克风的音频片段的最简单方法是什么?


潜在的重复问题:在Python中检测和记录音频 - S.Lott
我已经使用了PyGStreamer,它运行良好,但我不能确切地说它是你问题的解决方案。 - brandizzi
在 Windows 上,alsaaudio 似乎不是一个可行的选项,因为默认的 pip 安装需要 vsstudio 来从源代码编译。我之前提到的 在 Python 中检测和记录音频 带我去了 pyaudio,这对我很有效。再次强调,这都是在 Windows 上,但我想这里的 OP 是在谈论 Linux。 - Josiah Yoder
1个回答

13

该脚本在录制test.wav的同时打印当前的振幅:

import alsaaudio, wave, numpy

inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE)
inp.setchannels(1)
inp.setrate(44100)
inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)
inp.setperiodsize(1024)

w = wave.open('test.wav', 'w')
w.setnchannels(1)
w.setsampwidth(2)
w.setframerate(44100)

while True:
    l, data = inp.read()
    a = numpy.fromstring(data, dtype='int16')
    print numpy.abs(a).mean()
    w.writeframes(data)

你能否使用array.array('h', data)或者struct代替numpy呢? - Erik Kaplun
1
我主要使用Python将音频导入进行信号处理。为此,您需要numpy。对于简单的录制,我只会使用像“arecord”这样的命令行工具。在Python中,我可以使用仅三行代码之类的FFT来检查某个特定频率是否占主导地位。 - maxy
1
有人可以验证一下这个代码并评论一下它是否有效吗?自从我提出这个问题以来已经过了很长时间,我真的应该接受一些东西了。 - jsj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接