使用python检测并录制声音

使用python检测并录制声音,python,audio,detect,record,Python,Audio,Detect,Record,我正在使用这个程序用python录制声音: 我想更改程序,在声卡输入检测到声音时开始录制。可能应该比较块中的输入声级,但如何做呢?通常通过使用某个声音块的(RMS)进行检测,并将其与您设置的某个阈值进行比较(该值将取决于麦克风的灵敏度和其他因素,因此您必须对其进行调整)。此外,根据您希望麦克风检测到要录制的声音的速度,您可能需要降低数据块大小,或计算重叠数据块的RMS。您可以尝试以下方法: 基于 在获得所需的行为之前,您可能希望使用块大小和阈值 编辑: 您可以使用内置软件包来查找样本的均方根(

我正在使用这个程序用python录制声音:


我想更改程序,在声卡输入检测到声音时开始录制。可能应该比较块中的输入声级,但如何做呢?

通常通过使用某个声音块的(RMS)进行检测,并将其与您设置的某个阈值进行比较(该值将取决于麦克风的灵敏度和其他因素,因此您必须对其进行调整)。此外,根据您希望麦克风检测到要录制的声音的速度,您可能需要降低数据块大小,或计算重叠数据块的RMS。

您可以尝试以下方法:

基于

在获得所需的行为之前,您可能希望使用块大小和阈值

编辑:

您可以使用内置软件包来查找样本的均方根(rms),这通常是获得级别的方式

import audioop
import pyaudio

chunk = 1024

p = pyaudio.PyAudio()

stream = p.open(format=pyaudio.paInt16,
                channels=1,
                rate=44100,
                input=True,
                frames_per_buffer=chunk)

data = stream.read(chunk)

rms = audioop.rms(data, 2)  #width=2 for format=paInt16

如何操作在您提供的链接中指明:

print "* recording"
for i in range(0, 44100 / chunk * RECORD_SECONDS):
    data = stream.read(chunk)
    # check for silence here by comparing the level with 0 (or some threshold) for 
    # the contents of data.
    # then write data or not to a file
每次在循环中读取数据时,必须设置阈值变量并与数据中的平均值(振幅)或其他相关参数进行比较

您可以有两个嵌套的循环,第一个用于触发录制,另一个用于此后继续保存声音数据

print "* recording"
for i in range(0, 44100 / chunk * RECORD_SECONDS):
    data = stream.read(chunk)
    # check for silence here by comparing the level with 0 (or some threshold) for 
    # the contents of data.
    # then write data or not to a file