Eu li muitas perguntas sobre o SO e, francamente, cada uma delas não está descrevendo nenhuma maneira específica de fazer isso. Alguns dizem "faça FFT" e outros dizem "cruzamento zero" etc. Mas eu apenas cheguei ao entendimento de que a entrada de áudio digital consiste em uma série de amplitudes para uma frequência específica e bem. Não sei muito além disso.
Agora eu conheço o teorema de Nyquist, frequência, amplitude, séries de Fourier, etc, e isso foi de 2 a 3 anos atrás quando eu fiz isso no meu programa universitário em algum semestre. Mas naquela época realmente não aprendíamos muito o uso real de Fourier no mundo real, e eu não me preocupei em descobrir mais sobre o assunto além de aprender apenas o suficiente para passar no assunto. Mas agora vou ter que usar todas essas coisas.
Aqui está um instantâneo dos sons que estou tentando detectar:
Claramente, os sons têm gráficos únicos. Eu só quero entender como extrair suas características únicas específicas para suas linhas pontiagudas únicas no gráfico. Como que amplitude, frequência, etc. E por quanto tempo - embora isso seja trivial, eu acho.
Quero uma lista simples e passo a passo de instruções não vagas - posso pesquisar no Google a terminologia que não entendo.
Como talvez isso? -
Obter dados de áudio de entrada
Espectograma de plotagem
Obtenha gráfico do espectrograma para o som que você deseja detectar em um ambiente silencioso
Estude esse gráfico - desenhe características únicas desse som
Crie algum tipo de função que possa detectar essas características em particular na alimentação de áudio ao vivo, usando as características do som encontrado em (4)
Se uma correspondência for encontrada, bem - o trabalho está feito.
Polir o algoritmo para eliminar falsos negativos.
Eu estava pensando em fazer o usuário gravar o som que deseja armazenar como um gesto em um ambiente tranquilo. E o usuário emitia o som apenas entre o tempo silencioso ; 3 segundos no início e no final da gravação.
Por exemplo, durante os primeiros 3 segundos, meu sistema estabeleceria que a entrada atual é o som de fundo silencioso normal. E então uma mudança repentina no gráfico seria o início da entrada de som. E quando isso para, a gravação continua por mais 3 segundos, o tempo silencioso à direita . Isso seria feito manualmente pelo usuário. Ele armazenaria automaticamente as características apenas daquela parte durante a qual durou a mudança repentina no gráfico - em algum momento entre os tempos de preenchimento.
E, portanto, as características dessa parte seriam salvas como dados de gesto do som, que seriam usados para detectar esse som específico no feed de áudio ao vivo posteriormente.
O problema é que estou pensando tudo isso em inglês simples. Eu preciso pensar em matemática e física, para poder implementá-lo eficientemente no meu código. Eu sou tão ignorante sobre o que escrever e onde escrever no meu código - mesmo com tantas bibliotecas e perguntas sobre SO à minha disposição.
E desculpe se isso foi longo.