Estoy utilizando este programa para grabar un sonido en python:

Detectar & grabación de Audio en Python

Quiero cambiar el programa para iniciar la grabación cuando se detecta sonido por la tarjeta de sonido de entrada. Probablemente debería comparar el nivel de entrada en el pedazo, pero, ¿cómo hacer esto?

OriginalEl autor Jean-Pierre | 2010-04-19

3 Comentarios

  1. 11

    Usted podría intentar algo como esto:

    basado en esta pregunta/respuesta

    # 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

    Usted probablemente querrá jugar con el tamaño de porción y los valores de umbral hasta obtener el comportamiento deseado.

    Edición:

    Usted puede utilizar el built-in audioop paquete para encontrar la raíz cuadrada media (rms) de una muestra, la cual generalmente es cómo obtener 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

    OriginalEl autor tgray

  2. 5

    Detectar cuando no hay silencio se hace generalmente mediante el uso de la la media de la raíz cuadrada(RMS) de algún fragmento de el sonido y la compara con un umbral de valor (el valor dependerá de la sensibilidad de su micrófono y otras cosas, así que usted tendrá que ajustar). También, dependiendo de la rapidez con que desea que el micrófono para detectar el sonido registrado, es posible que desee reducir el tamaño de porción, o calcular el RMS para la superposición de fragmentos de datos.

    OriginalEl autor Justin Peel

  3. 1

    cómo hacer que se indica en el enlace que te dan:

    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

    Usted tiene que fijar el umbral variable y comparar con el valor promedio (la amplitud) o de otro parámetro relacionado en los datos cada vez que es leído en el bucle.

    Podría tener dos bucles anidados, el primero para activar la grabación y el otro continuamente guardar los datos de sonido chuncks después de eso.

    OriginalEl autor joaquin

Dejar respuesta

Please enter your comment!
Please enter your name here