Reconocer sonido específico con arduino

Hola gente! Les quería consultar si han encontrado alguna vez algo referido a reconocer un sonido específico con arduino. He buscado por la red hace un par de semanas y solo encontré a un vendedor que produce un sistema de filtros con un LM324 y redes RC pero una frecuencia aproximada al sonido en cuestión lo activaría puesto que se trata de un filtro. Es una especie de "body-shaker" o "bass-shaker" básicamente que reacciona a ciertas frecuencias.

Esto es lo que quiero hacer: en un sistema de simulación (con Oculus Rift) cuando la PC reproduzca un sonido específico (el rugido de un dinosaurio) que ya tengo identificado en un archivo .wav arduino detecte esa reproducción (ya que estaría conectado a una salida de auriculares de la placa de sonido) y actúe en consecuencia (quiero pasarlo a un ampli de 30W para que ese sonido pase de la PC al ampli y el sonido sea más envolvente). Como no puedo saber cuándo el usuario (mis niños) estarán cerca de un dino, necesito que sea automático. La PC reproduce el sonido del rugido, arduino lo detecta y lo saca por un amplificador. Como el rugido dura cierto tiempo, arduino debe ser capaz de detectar el inicio de ese sonido (porque es igual al archivo .wav) y activar el pase al ampli (supongo que un 4066 sería suficiente para que arduino lo controle y listo).

Lo que no puedo encontrar, es información sobre si arduino (el que sea) tiene capacidad de convertir en digital una entrada y compararla con algo de referencia grabado en su memoria. Es posible hacer esa comparación en tiempo real?

gracias por anticipado por pasar y dejarme sus opiniones!

Saludos!!
 
Creo que una mejor solución es que hagas que el sonido de la PC llegue directamente al amplificador. Otra opción que yo intentaría es almacenar los sonidos .wav en el Arduino y que la PC mande solo un código para que se reproduzca.
 
No entiendo en absoluto el sentido de todo eso.
¿Por qué no es el PC el que enciende o apaga lo que sea que ya sabe cuando va a emitir el sonido?
¿Por qué no dejas el ampli activado?

Veo un esquema terroríficamente complicado y sujeto a fallos; el sonido no es de una frecuencia límpoia; lleva un montón de armónicos etc que pueden disparar eso en cualquier momento.
 

pandacba

Rocker Bear
Primero que nada es rídiculo utilizar un arduino, no tiene ni sentido, ya que basicamente todo es analógico, filtrado y detección.
El resto y su practicidad no estn muy claros
 
M

Miembro eliminado 356005

Hay varios ejemplos de captura de sonido por parte de sensores prefabricados para el Arduino, como el caso del sencillo sensor de sonido KY-038 con el que se puede construir un sencillo detector de palmadas, y en el otro extremo, el EasyVR Shield, que permite un control del Arduino por voz (y si controlamos el Arduino, controlamos cualquier otra cosa).

Lo que pretendes es algo complejo, ya que un Arduino no tiene mucha memoria para almacenar los fonemas o tramas de sonido con los que queremos comparar para ver si detectamos un sonido en concreto. Habría que tener una memoria secundaria. Pero no es imposible.
 

Dr. Zoidberg

Well-known-Papá Pitufo
Yo trataria de tomar el sonido, aplicar una FFT y tratar de encontrar algunos descriptores espectrales. Si bien es bastante procesamiento usa muy poca memoria de almacenamiento y permite "ajustar" a espectros de forma similar.

PD: solo estoy pensando en voz alta...
 

pandacba

Rocker Bear
Primero que nada habría que analizar la señal, ver su espectro de frecuencias, a ciegas no creo que se llegue muy lejos
 
Y si sabes que un sonido .wav se va a reproducir, entonces tenes acceso al programa y su codigo fuente, no?
Si es asi, te estarias complicando la vida, por no poner un control serie para el arduino, o directamente desde el pc, por ejemplo
 
En realidad el arduino es si mismo no es capaz de analizar una señal de audio analógica; su ADC es terrorífdicamente leeeeeento, aunque se puede reprogramar para que sea muchísimo mas rápido, no sé si así llegaría pero te estarías metiendo en un cierto lío.
Si pones un previo y unos pasabanda si que lo harán ellos y luego el arduino actuará, pero para eso quitas el arduino y que esos filtros activen un flip flop o algo así. Esta detección solo detecta un cierto tono de una cierta amplitud y cualquier otra señal del mismo tono y amplitud lo activará.
Si el arduino ya está conectado a la línea de audio, en lugar de eso lo conectas al puerto serie o al usb o por bluetooth o por wifi o por etehernet y el PC al mismo tiempo que inicia la reproducción del wav le manda al arduino, o lo que sea, que haga lo que tenga que hacer.
 

pandacba

Rocker Bear
El ADC del arduino no es lento, eso es un error de concepto, ya que el micro ya sea que se trate del 328 o el 2560 la velocidad del micro y su conversor no cambian por ser Arduino, todo es como lo necesites y para que, las librerias de Arduino son suficientes para muchas aplicaciones, pero si necesitas todo el poder del micro lo puedes hacer pues puedes programar el micro directamente en "C" o en Basic y cargar el Hex en el micro y listo ¿cual es el problema?

Ahora si aun así no te basta puedes recurrid a un ADC externo que satisfaga tus necesidades y lo puedes controlar via serie o I2C según que dispositivos utilices.
Tienes otras opciones como el micromite que utiliza un pic de 32 bit y es muy superior a los arduinos, es una placa muy similar en tamaño a la del nano.
También tienes los STm32duino que también son micros muy potentes se utiliza el maple ide que se integra con el ide de arduino y se programa de forma similar, pero no es para nada parecido a un arduino en su rendimiento
Hay muchas opciones simples y sencillas para solucionar problemas como lo que planteas
 
M

Miembro eliminado 356005

Volviendo a leer la pregunta con más detalle, creo que una solución con Arduino es posible si le ponemos un micrófono y le pasamos por la biblioteca FFT o FHT, y detectamos la baja frecuencia del rugido del dinosaurio. Pero eso lleva un tiempo, que como ves son unos milisegundos por cada muestra del ADC en la RAM. Y otro detalle: el Arduino no distinguiría entre un rugido y una voz grave de un adulto o un golpe fuerte. Para detectar el rugido, debería tu programa de detectar las frecuencias graves durante una serie de milisegundos seguidos, lo que añade aún más retraso al efecto de activar el altavoz.

Creo que una solución mucho más rápida y barata consistiría en tener un amplificador donde filtres todos los sonidos excepto los graves. Algo así como si en un sistema doméstico 5.1 quitases todos los altavoces menos el de superbajos. Y le pones el volumen al máximo. Si el sonido que sale del juego está dentro de esa frecuencia de trabajo del altavoz, tendrás conseguido tu objetivo: que tiemble la casa con el rugido (y pisadas) del dinosaurio.
 
Muchísimas gracias por las respuestas. Dr. Zoigberg, Pandacba, Joaquín y Scooter creo que me han dado suficiente como para intentar otra cosa, aunque Joaquin con tu ultimo post he decidido no abandonar la idea del todo. Creo que analizar el sonido me resultaría más útil para poder filtrarlo y pasarlo por un ampli tipo 5.1 para hacer lo que pretendo en lugar de realizar la comparación del sonido tomado por el ADC. La diferencia de mseg retrasaría el sonido y eso no lo había considerado al principio. Como dicen Joaquín, Dr. Zoiberg y Pandacba la idea es analizar el sonido y yo quería hacerlo con un arduino ya que tengo varios en desuso. El juego tiene muchos sonidos de "la jungla" por eso no puedo usar un detector de palmadas.
Disculpas para los amigos que no me entendieron ya que no me supe explicar. No puedo conectar un ampli directo a la salida de la PC porque amplificaría todo, y como el juego es de VR no puedo saber cuándo se reproducirá el WAV del rugido. Modificar el soft para que me de un aviso cuando se reproduzca el sonido está fuera de mi alcance por ahora. El wav al que llegué fue porque revisé la carpeta del juego y encontré el directorio wav, no porque tenga acceso al código fuente.

Estoy buscando info en la web sobre lo que me indica Pandacba para ver el tema de los ADC de esta familia también, en una de esas aparece algún ejemplo fácil de copiar y puedo probar. Como dice Joaquín por ahí tomando solo algunos sonidos del principio del archivo puedo aunque quizás un pez pueda despeinar al jugador cuando un pez salte en el agua, jajaja.

Voy a avanzar con esto y les posteo algún video de como tiembla la casa con el dino como dice Joaquin, jajaja: ESA ES LA IDEA!!!

Gracias, abrazo y buen fin de semana para todos!!
 
Hola...
Algo para estudiar es agregar un "disparador" al comienzo del archivo WAV correspondiente de un subtono y estos ser reconocidos por el Arduino y actuar en consecuencia.

Es como "marcar" cada uno de los archivos.

Si la acción es única(conectar un amplificador), con un solo subtono es suficiente y se hace aun a nivel analogico con un NE567

Es un sistema muy utilizado en equipos de VHF/UHF donde el silenciador del receptor es operado de forma doble, por la portadora entrante y el subtono incluido y permite hablar con cierta privacidad en un único canal de frecuencia compartido por múltiples equipos.

Saludos.

Ric.
 
M

Miembro eliminado 356005

He revisado mi mensaje y me he equivocado completamente. Quise decir: enchufar un amplificador del que solo escuchemos los graves.
 
He revisado mi mensaje y me he equivocado completamente. Quise decir: enchufar un amplificador del que solo escuchemos los graves.
No te preocupes Joaquin, he entendido exactamente lo que quisiste decir y esa es la idea general luego de leer la respuesta de ricbevi. Gracias!!!
Hola...
Algo para estudiar es agregar un "disparador" al comienzo del archivo WAV correspondiente de un subtono y estos ser reconocidos por el Arduino y actuar en consecuencia.

Es como "marcar" cada uno de los archivos.

Si la acción es única(conectar un amplificador), con un solo subtono es suficiente y se hace aun a nivel analogico con un NE567

Es un sistema muy utilizado en equipos de VHF/UHF donde el silenciador del receptor es operado de forma doble, por la portadora entrante y el subtono incluido y permite hablar con cierta privacidad en un único canal de frecuencia compartido por múltiples equipos.

Saludos.

Ric.


ricbevi: lo tuyo es sencillamente genial. La idea tocar el soft ya no es necesaria si solo le agrego un subtono con cualquier programa para modificar archivos de sonido. Luego puedo pasarlo por un 567 sintonizado y al ampli que sugiere Joaquin.
Maravillosa solución, simple, económica y muy ingeniosa. tal como me gustan las cosas electrónicas. Mil gracias!!
Ayer cuando leía la respuesta dije tengo que responder ahora, pero los gajes del laburo no me dejaron. Perdón por la demora en agradecer!
Es una idea maravillosa del principio al fin. GRACIAS MUCHACHOS!!!!
Un abrazo desde Catamarca!!! (aunque mejor nada abrazos porque hacen 38 grados y son las 9:25 PM!!!)
 
Última edición:
Como comente es una idea antigua usada desde hace mucho(más de 40 años) en los silenciadores de las radios de VHF y UHF, no es "mía" en especial lo que pasa es que el "Zorro sabe mas por viejo que por Zorro".

Un abrazo de todos modos, tambien por aqui andamos con 40º y mas de termica.

Ric.
 
Arriba