Grabación de ruidos por la noche

Durante la noche (cuando estoy durmiendo), la mayor parte del tiempo es tranquila. Sin embargo, a veces hay ruidos (por ejemplo, tráfico ruidoso). Quiero grabar estos ruidos.

Un método que he empleado anteriormente es simplemente configurar la grabación para toda la noche usando cualquier software de grabación (por ejemplo, Audacity). Sin embargo, esto es muy ineficiente porque luego tengo que pasar por todo el archivo de audio de más de 8 horas. (Sin mencionar también que los tamaños de archivo son muy grandes).

Por lo tanto, estoy buscando una forma más eficiente de grabar estos ruidos.

Requerimientos esenciales:

  • Capacidad para establecer el umbral de nivel de sonido/decibelios por encima del cual se graban los ruidos. (El resto del tiempo no se realiza ninguna grabación.)
  • Marca de tiempo con cada ruido registrado.
  • Funciona en Windows 10 (PC) o móvil Android.

(Tal vez hay alguna forma de lograr lo anterior en Audacity o algún otro software que no conozco; en cuyo caso, también estaría muy agradecido si alguien pudiera enseñarme cómo hacerlo).

Agradable tener:

  • Gratis.
  • Ligero.

Respuestas (3)

snooper _

Requerimientos esenciales:

  • Puede establecer un disparador (nivel de decibelios) por encima del cual se graban los sonidos.
  • Luego, los archivos MP3 se guardan automáticamente como "YYYY-MM-dd hhmmss.mp3", donde hhmmss es la hora en que comenzó la grabación.
  • Programa de Windows (de hecho, parece estar disponible solo para Windows).

Agradable tener:

  • Desafortunadamente, no es gratis. Prueba gratuita de 30 días, luego US $ 24,95 o $ 34,95 para la versión estándar o profesional.
  • Me parece lo suficientemente liviano (por ejemplo, lo estoy ejecutando ahora mismo y usa 8.5 MB de memoria).

Si ha tenido éxito con Audacity, puede continuar usando el programa. De acuerdo con esta página web , hay una función dentro de Audacity para activar la grabación cuando se alcanza un nivel específico.

Resumen: En la sección de grabación de Preferencias, hay una casilla de verificación Grabación activada por sonido, así como una ubicación para especificar el nivel de activación.

Desafortunadamente, esta es solo una respuesta parcial, ya que la parte de la marca de tiempo no está resuelta.

Y parece que no se detiene cuando el ruido desaparece

Puede usar Python con PyAudio adaptando la respuesta aceptada a esta pregunta SO .

  • Python y PyAudio son gratuitos, de código abierto y multiplataforma, por lo que lo siguiente debería funcionar en la mayoría de las plataformas.
  • Sugeriría modificar el código de ejemplo para comenzar a grabar en un archivo con el nombre de la fecha y la hora en que el nivel de sonido supera algún límite y detenerse un segundo o más después de la última vez que se superó el nivel de sonido.

Algo así como (tenga en cuenta que este no es un código de calidad de producción) :

import pyaudio
import wave
import audioop
import datetime

now = datetime.datetime.now()  # Get the time now
ENDTIME = now + datetime.timedelta(hours=8) # Record for 8 hours
OVERRUN = datetime.timedelta(seconds=5)  # How long to continue after last loud
THRESHOLD = 123  # Use some number determined experimentally

# The following are the pyAudio parameters from the original example
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

recording = False
outfile = None
last_over = datetime.datetime(0)
started_recording_at = None

while now < ENDTIME:  # Run till endtime
    data = stream.read(CHUNK)     # get the latest sound chunk
    now = datetime.datetime.now()  # Get the current time
    rms = audioop.rms(data, 2)    # here's where you calculate the volume

    if not recording and rms > THRESHOLD:  # Loud so start recording
        fname = now.strftime('%Y-%m-%d-%H-%M-%S.wav')  # Create the filename
        outfile = open(fname, 'wb')  # Open for binary write
        print("RMS = {}: Started recording to {}".format(rms, fname))
        recording = True
        started_recording_at = now

    if recording:  # We are recording
        outfile.write(data)  # Save the sound chunk
        if rms > THRESHOLD:  # Still loud?
            last_over = now  # Save time
        if now - last_over > OVERRUN:  # Quiet for long enough
            recording = False  # Stop recording
            outfile.close()   # Close the file
            print("Recording Length {}".format(now-started_recording_at))
# Tidy Up!
stream.stop_stream()
stream.close()
p.terminate()

Si no está familiarizado con python, coloque el código anterior en un archivo de texto llamado nightwatch.py ​​y luego ejecute:

python nightwatch

Debería hacer más o menos lo que pediste.