En regardant les captures d'écran de la source des fichiers audio, un moyen simple de détecter un changement dans le niveau sonore serait de faire une intégration numérique des échantillons, à savoir "l'énergie" de l'onde à un moment précis.
Une rude algorithme serait:
- Diviser les échantillons en sections
- Calculer l'énergie de chaque section
- Prendre le rapport des énergies entre la fenêtre précédente et la fenêtre en cours
- Si le ratio dépasse un certain seuil, de déterminer qu'il y avait un bruit fort soudain.
Pseudocode
samples = load_audio_samples() // Array containing audio samples
WINDOW_SIZE = 1000 // Sample window of 1000 samples (example)
for (i = 0; i < samples.length; i += WINDOW_SIZE):
// Perform a numerical integration of the current window using simple
// addition of current sample to a sum.
for (j = 0; j < WINDOW_SIZE; j++):
energy += samples[i+j]
// Take ratio of energies of last window and current window, and see
// if there is a big difference in the energies. If so, there is a
// sudden loud noise.
if (energy / last_energy > THRESHOLD):
sudden_sound_detected()
last_energy = energy
energy = 0;
Je me dois d'ajouter un avertissement que je n'ai pas essayé ce.
De cette façon devrait être possible d'être effectuées sans avoir les échantillons de toutes enregistrées en premier. Tant qu'il y a de la mémoire tampon d'une certaine longueur (WINDOW_SIZE
dans l'exemple), une intégration numérique peut être effectuée pour calculer l'énergie de la section de son. Cela ne signifie toutefois qu'il y aura un retard dans le traitement, dépend de la longueur de l' WINDOW_SIZE
. La détermination d'une bonne longueur pour une section de son est un autre sujet de préoccupation.
Comment Diviser en Sections
Dans le premier fichier audio, il apparaît que la durée du son de la fermeture de la porte est de 0,25 secondes, de sorte que la fenêtre utilisée pour l'intégration numérique devrait probablement être à plus de la moitié, ou même plus comme un dixième, de sorte que la différence entre le silence et soudain le son peut-être remarqué, même si la fenêtre est le chevauchement entre le silence de la section et le bruit de la section.
Par exemple, si la fenêtre d'intégration était de 0,5 secondes, et le premier de la fenêtre a été couvrant les 0,25 secondes de silence et de 0,25 secondes de fermeture de la porte, et la deuxième fenêtre couvrait de 0,25 secondes de fermeture de la porte et de 0,25 secondes de silence, il peut sembler que les deux sections de son a le même niveau de bruit, donc pas de déclenchement de la détection audio. J'imagine une petite fenêtre permettrait d'atténuer ce problème quelque peu.
Cependant, avoir une fenêtre qui est trop court signifie que la hausse le son ne peut pas totalement s'inscrivent dans une fenêtre, et il peut apppear qu'il y a peu de différence en énergie entre les sections adjacentes, ce qui peut provoquer le son à manquer.
Je crois que le WINDOW_SIZE
et THRESHOLD
sont à la fois être déterminés de façon empirique pour le son qui va être détecté.
Pour l'amour de déterminer le nombre d'échantillons que cet algorithme devra garder en mémoire, disons, l' WINDOW_SIZE
est de 1/10, le son de la fermeture de la porte, qui est d'environ 0.025 seconde. À une fréquence d'échantillonnage de 4 kHz, qui est de 100 échantillons. Qui ne semble pas être trop beaucoup d'une exigence de mémoire. En utilisant des échantillons de 16 bits c'est 200 octets.
Avantages / Inconvénients
L'avantage de cette méthode est que le traitement peut être effectué avec une simple arithmétique entière si la source audio est alimenté en tant que nombres entiers. Le hic, c'est, comme déjà mentionné, que le traitement en temps réel disposera d'un délai, selon la taille de la section qui est intégré.
Il ya un couple de problèmes que je peux penser de cette approche:
- Si le bruit de fond est trop forte, la différence d'énergie entre le bruit de fond et la fermeture de la porte ne sera pas facile à distinguer, et il peut ne pas être en mesure de détecter la fermeture de la porte.
- Brusques bruit, comme un tonnerre, pourrait être considéré comme la porte se referme.
Peut-être, en combinant les suggestions dans les autres réponses, comme par exemple essayer d'analyser la fréquence de la signature de la fermeture de la porte à l'aide de l'analyse de Fourier, qui aurait besoin de plus de traitement mais la rendrait moins sujettes à l'erreur.
Elle va probablement prendre quelques essais avant de trouver une façon de résoudre ce problème.