He leído muchas preguntas sobre SO y, francamente, cada una de ellas no describe ninguna forma particular de hacerlo. Algunos dicen "hacer FFT" y otros dicen "cruce por cero", etc. Pero solo he llegado al extremo de comprender que la entrada de audio digital consiste en un conjunto de amplitudes para una frecuencia particular y bueno ... Realmente no sé mucho Más allá de eso.
Ahora sí conozco el teorema de Nyquist, la frecuencia, la amplitud, la serie de Fourier, etc., y eso fue hace 2-3 años cuando lo hice en mi programa universitario en algún semestre. Pero en aquel entonces realmente no nos enseñaron mucho el uso del mundo real de Fourier, y no me molesté en desenterrar más sobre el tema más allá de aprender lo suficiente para aprobar el tema. Pero ahora voy a tener que usar todas esas cosas.
Aquí hay una instantánea de los sonidos que intento detectar:
Claramente, los sonidos tienen gráficos únicos. Solo quiero entender cómo extraer sus características únicas particulares para sus líneas puntiagudas únicas en el gráfico. Como qué amplitud, frecuencia, etc. Y por cuánto tiempo, aunque eso es trivial, supongo.
Quiero una simple lista de instrucciones paso a paso, poco vaga: puedo buscar en Google la terminología que no entenderé.
¿Te gusta quizás esto? -
Obtener datos de entrada de audio
Trazar espectograma
Obtenga un gráfico de espectograma para el sonido que desea detectar en un entorno silencioso
Estudie ese gráfico: dibuje características únicas de ese sonido
Realice algún tipo de función que pueda detectar esas características particulares en la transmisión de audio en vivo, utilizando las características del sonido que se encuentra en (4)
Si se encuentra una coincidencia, bueno, el trabajo está hecho.
Pulir el algoritmo para eliminar los falsos negativos.
Estaba pensando en hacer que el usuario grabara el sonido que quiere almacenar como un gesto en un entorno tranquilo. Y el usuario solo emitiría el sonido entre el relleno de tiempo silencioso ; 3 segundos al principio y al final de la grabación.
Digamos, durante los primeros 3 segundos, mi sistema establecería que la entrada actual es el sonido de fondo silencioso normal. Y luego, un cambio repentino en el gráfico sería el inicio de la entrada de sonido. Y cuando eso se detenga, la grabación continuaría durante otros 3 segundos, el relleno de tiempo de silencio final . Esto lo haría manualmente el usuario. Luego almacenaría automáticamente las características de solo esa parte durante la cual duró el cambio repentino en el gráfico, en algún lugar entre los tiempos de relleno.
Y así, las características de esa parte se guardarían como datos de gestos de ese sonido, que se utilizarían para detectar ese sonido en particular en la transmisión de audio en vivo más adelante.
El problema es que estoy pensando todo esto en inglés simple. Necesito pensar en matemáticas y física, para poder implementarlo eficientemente en mi código. No tengo ni idea de qué escribir y dónde escribirlo en mi código, incluso con tantas bibliotecas y preguntas sobre SO a mi disposición.
Y perdón si esto fue largo.