2010-07-04 3 views
15

Je voudrais obtenir une mesure de distance entre deux séquences audio. Par exemple, je veux comparer le son d'un animal au son d'un humain imitant cet animal, puis renvoyer une partition de la similitude des sons.Similitude de perception entre deux séquences audio

Cela semble être un problème difficile. Quelle serait la meilleure façon de l'aborder? Je pensais à extraire quelques caractéristiques des signaux audio, puis faire une distance euclidienne ou une similitude de cosinus (ou quelque chose comme ça) sur ces fonctionnalités. Quel genre de caractéristiques serait facile à extraire et utile pour déterminer la différence perceptuelle entre les sons?

(J'ai vu quelque chose sur la façon dont Ahazam utilise le hachage, mais cela semblait être un problème différent parce que les deux morceaux d'audio sont exactement les mêmes, avec l'ajout de bruit. la même chose, ils sont juste perceptivement similaires)

Répondre

3

Je suggérerais de regarder dans l'analyse de spectre. Bien que ce ne soit pas aussi simple que vous le voudriez le plus, je m'attendrais à ce que la décomposition de l'audio en ses fréquences sous-jacentes fournirait des données très utiles à analyser. Découvrez ce link

+0

Merci. Je pourrais essayer de générer des spectres de fréquences de différents sons et de voir si un son similaire produit des spectres similaires, et pas des sons différents. D'après ce que je comprends du lien wikipedia, le spectre de fréquences doit-il être créé en utilisant Fourier Transform? – Bart

3

Votre première étape va certainement prendre un Fourier Transform (FT) des ondes sonores. Si vous effectuez un FT sur les données par rapport à Fréquence dans le temps , vous serez en mesure de comparer la fréquence à laquelle certaines fréquences clés sont atteintes au cours du bruit. Peut-être que vous pourriez également soustraire une onde de l'autre, pour obtenir une sorte de fonction de différence par paliers. En supposant que le bruit de simulation suit la même fréquence et les mêmes tendances de hauteur que le bruit d'origine, vous pouvez calculer la ligne de meilleur ajustement aux points de la fonction de différence. En comparant la ligne la mieux ajustée à la ligne la mieux ajustée à l'onde sonore d'origine, vous pouvez calculer une ligne de tendance à utiliser comme base de comparaison. Certes, ce serait une méthode de comparaison très lâche.

- 1. hz/ms, peut-être? Je ne suis pas familier avec l'ampleur de l'unité travaillée ici, je travaille généralement dans la gamme femto-nano.

- 2. Tant que & forall; Δ T, Δ Pas/T Δ & Δ Fréquence/Δ T sont dans une certaine tolérance x.

- Édité pour le formatage, et parce que j'ai effectivement oublié d'écrire la réponse complète.

+0

Vous voulez dire générer un spectre de fréquence, n'est-ce pas? La ligne de la différence ne serait-elle pas simplement 0 quand ils la prennent contre l'onde sonore originale? – Bart

+0

Oui, je veux dire générer un spectre de fréquence. En tant de mots. :) Si la ligne de meilleur ajustement comparée était basée sur une moyenne des deux ondes sonores, non, je ne crois pas que ce serait juste 0. Peut-être tort, cependant! – Andy

8

Le processus pour comparer un ensemble de sons des similitudes est appelée Content Based Audio Indexing, Retrieval et Fingerprinting dans la recherche en sciences informatiques.

Une méthode pour le faire est de:

  1. exécuter plusieurs bits de traitement de signal de chaque fichier audio à extraire des caractéristiques, telles que pas au fil du temps, le spectre de fréquence, l'autocorrélation, la plage dynamique, transitoires, etc .

  2. Mettez toutes les fonctionnalités pour chaque fichier audio dans un tableau à plusieurs dimensions et de vidage de chaque tableau multidimensionnel dans une base de données

  3. Utiliser des techniques d'optimisation (comme gradient descent) pour trouver le meilleur match pour un donné fichier audio dans votre base de données de données multidimensionnelles.

L'astuce pour que cela fonctionne bien est quelles caractéristiques choisir. Faire cela automatiquement et obtenir de bons résultats peut être difficile. Les gars à Pandora le font vraiment bien, et à mon avis, ils ont la meilleure similitude correspondant autour. Ils encodent cependant leurs vecteurs à la main, en faisant écouter de la musique et en les évaluant de différentes façons. Voir leurs Music Genome Project et List of Music Genome Project attributes pour plus d'informations.

Pour les mesures de distance automatiques, il existe plusieurs projets qui font des choses comme ceci, notamment marsysas, MusicBrainz et EchoNest.

Echonest a l'un des simplest APIs que j'ai vu dans cet espace. Très facile à démarrer.