¿Cómo puedo encontrar el nivel actual de decibelios y establecerlo como una variable?
Estoy buscando encontrar el nivel actual de decibelios en una habitación utilizando un micrófono y estableciéndolo como una variable. No he encontrado ningún código en Python sobre esto, así que estoy muy atascado.
Sería bueno si la variable pudiera actualizarse cada 0.3 segundos, pero no es necesario.
¡Gracias por tu ayuda!
davy.ai
Para medir el nivel actual de decibelios utilizando un micrófono en Python, puedes usar la biblioteca PyAudio, la cual proporciona enlaces para la biblioteca PortAudio para entrada y salida de audio multiplataforma. También necesitarás instalar la biblioteca numpy para realizar operaciones numéricas en matrices.
Aquí tienes un código de ejemplo que registra la entrada de audio desde el micrófono predeterminado durante una duración especificada (en segundos) y calcula la amplitud promedio de la raíz cuadrada media (RMS, por sus siglas en inglés), que es proporcional al nivel de presión sonora (SPL, por sus siglas en inglés) en decibelios:
Este código crea un flujo PyAudio con el formato, canales, tasa de muestreo y tamaño de búfer especificados para la entrada del micrófono. El bucle
while
lee repetidamente un fragmento de datos de audio, lo convierte en una matriz numpy de muestras enteras de 16 bits, calcula la amplitud RMS y la convierte a decibelios utilizando la fórmula:donde
ref
es el nivel de presión sonora de referencia de 20 micropascales (uPa) para una amplitud RMS de 1 en una muestra entera de 16 bits con signo. La fórmula también agrega 20 dB para ajustar el hecho de que la amplitud RMS representa la raíz cuadrada media de la presión sonora, que es proporcional a la intensidad del sonido (es decir, energía por unidad de tiempo por unidad de área).Puedes almacenar el nivel actual de decibelios en una variable asignándola dentro del bucle
while
, de la siguiente manera:Esto actualizará la variable
decibelios
con la última medición cada 0.3 segundos (u otra duración que establezcas paraDURACION
). También puedes agregar una pausa de tiempo al final del bucle para controlar más precisamente la tasa de actualización:Esto pausará la ejecución del bucle durante 0.3 segundos después de cada medición, lo cual limitará el uso de la CPU y evitará sobrecargar el búfer de entrada del micrófono.