2010-04-19 10 views

Respuesta

4

La detección cuando no hay silencio generalmente se hace usando root mean square (RMS) de un fragmento del sonido y comparándolo con algún valor de umbral que establezca (el valor dependerá de qué tan sensible sea su micrófono y cosas así que tendrás que ajustarlo). Además, dependiendo de la rapidez con que desee que el micrófono detecte el sonido, es posible que desee reducir el tamaño del fragmento o calcular el RMS para la superposición de fragmentos de datos.

11

usted podría intentar algo como esto:

basado en this question/answer

# this is the threshold that determines whether or not sound is detected 
THRESHOLD = 0 

#open your audio stream  

# wait until the sound data breaks some level threshold 
while True: 
    data = stream.read(chunk) 
    # check level against threshold, you'll have to write getLevel() 
    if getLevel(data) > THRESHOLD: 
     break 

# record for however long you want 
# close the stream 

Es probable que quiere jugar con su tamaño y los valores de umbral trozo hasta obtener el comportamiento deseado.

Editar:

Usted puede utilizar el incorporado en audioop paquete para encontrar la raíz cuadrada media (RMS) de una muestra, que generalmente es la forma en que se obtiene el nivel.

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 
1

cómo hacerlo se indica en el enlace darle:

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 

Hay que establecer la variable de umbral y comparar con el valor medio (la amplitud) u otro parámetro relacionado en los datos de cada uno tiempo que se lee en el ciclo.

Puede tener dos bucles anidados, el primero para activar la grabación y el otro para guardar continuamente fragmentos de datos de sonido después de eso.

Cuestiones relacionadas