Reconnaissance de la musique et traitement du Signal
je veux construire quelque chose similaire à Tunatic ou Midomi (essayez-les si vous n'êtes pas sûr de ce qu'ils font) et je me demande quels algorithmes je devrais utiliser; L'idée que j'ai sur le fonctionnement de telles applications est quelque chose comme ceci:
- ont une grosse base de données avec plusieurs chansons
- pour chaque chanson de 1. réduire la qualité / bit-rate (à 64kbps par exemple) et calculer le son "hash "
- avoir le son / extrait de la musique que vous souhaitez identifier
- pour la chanson dans 3. réduire la qualité / débit (de nouveau à 64kbps) et calculer le son "hash "
- si 4. le hachage sonore est dans l'un des 2. son hachages de retour à la correspondance de la musique
I bien que de réduire la qualité / débit en raison des bruits de l'environnement et de l'encodage des différences.
suis-je sur la bonne voie? quelqu'un Peut-il me fournir tout de la documentation spécifique ou des exemples ? Midori semble même reconnaître hum's
, c'est assez impressionnant! Comment font-ils cela?
est-ce que les sons existent ou est-ce quelque chose que je viens d'inventer? S'ils le font, comment les calculer? Et plus important encore, Comment puis-je vérifier si child-hash
est dans father-hash
?
Comment ferais-je pour construire un système similaire avec Python (peut-être un module intégré) ou PHP ?
quelques exemples (de préférence en Python ou en PHP) seront grandement appréciés. Merci à l'avance!
9 réponses
j'ai travaillé à la périphérie d'un cadre cool qui met en œuvre plusieurs techniques de récupération D'Information musicale. Je ne suis pas un expert (edit: en fait je ne suis pas proche d'un expert, juste pour clarifier), mais je peux dire que la Transformée de Fourier rapide est utilisée partout avec ce truc. L'analyse de Fourier est farfelue mais son application est assez simple. Fondamentalement, vous pouvez obtenir beaucoup d'informations à propos de l'audio lorsque vous analysez dans le domaine de fréquence plutôt que la le domaine temporel. C'est ce que L'analyse de Fourier vous donne.
peut-être un peu hors sujet de ce que vous voulez faire. Dans tous les cas, il y a quelques outils cool dans le projet pour jouer avec, ainsi que la visualisation du code source pour la bibliothèque de base elle-même: http://marsyas.sness.net
je fais de la recherche dans la recherche d'information musicale (MIR). Le papier phare sur les empreintes digitales de musique est celui de Haitsma et Kalker vers 2002-2003. Google devrait vous l'apporter.
j'ai lu un livre blanc tôt (vraiment tôt; avant 2000) sur la méthode de Shazam. À ce moment-là, ils ont simplement détecté des pics Spectro-temporels, puis ont hashé les pics. Je suis sûr que cette procédure a évolué.
ces deux méthodes traitent de la similitude musicale à le niveau du signal, c'est-à-dire qu'il est robuste aux distorsions de l'environnement. Je ne pense pas que cela fonctionne bien pour l'interrogation-by-humming (QBH). Cependant, il s'agit d'un problème différent (mais lié) avec des solutions différentes (mais liées), de sorte que vous pouvez trouver des solutions dans la littérature. (Trop nombreux pour les nommer ici.)
La ISMIR procédures sont librement disponibles en ligne. Vous y trouverez des objets de valeur: http://www.ismir.net /
je suis d'accord avec l'utilisation d'un bibliothèque existante comme Marsyas. Dépend de ce que vous voulez. Num PY / Scipy est indispensable ici, je pense. Les choses simples peuvent être écrites en Python par vous-même. Si vous avez besoin de trucs comme STFT, MFCC, je peux vous envoyer du code.
j'ai récemment porté mon système de prise d'empreintes audio en Python:
https://github.com/dpwe/audfprint
il peut reconnaître de petits extraits (5-10 sec) d'une base de données de référence de 10s de milliers de pistes, et est assez robuste au bruit et aux distorsions de canal. Il utilise des combinaisons de pics spectraux locaux, similaires au système Shazam.
cela ne peut correspondre exactement au même track, puisqu'il s'appuie sur les détails fins des fréquences et des différences de temps - il ne serait même pas correspondre à différentes prises, certainement pas couvrir les versions ou hums. Pour autant que je sache, Midomi/SoundHound fonctionne en mettant en correspondance des hums l'un avec l'autre (par exemple via dynamic time warping ), puis a un ensemble de liens humains-curated entre des ensembles de hums et la piste musicale prévue.
Correspondant à un bourdonnement directement à une piste de musique ("Requête en fredonnant") est une recherche en cours problème de récupération de l'information musicale, mais reste assez difficile. Vous pouvez voir les résumés pour un ensemble de systèmes évalués l'année dernière au MIREX 2013 résultats QBSH .
MFCC extrait de la musique est très utile pour trouver le tambourin similitude entre les chansons.. c'est le plus souvent utilisé pour trouver des morceaux similaires. Comme l'a souligné darren, Marsyas est un outil qui peut être utilisé pour extraire le MFCC et trouver des chansons similaires en convertissant le MFCC en une seule représentation vectorielle..
mis à part le MFCC, le rythme est aussi utilisé pour trouver la similarité des chansons.. Il ya peu de documents présentés dans le Mirex 2009
qui vous donnera un bon aperçu des différents algorithmes et fonctionnalités qui sont les plus utiles pour détecter la similarité musicale.
Le MusicBrainz projet maintient une base de données. Vous pouvez y faire des requêtes à partir d'une empreinte digitale.
Le projet existe déjà depuis un certain temps et a utilisé différentes empreintes digitales dans le passé. Voir ici pour une liste.
la Dernière Empreinte Digitale qu'ils utilisent est AcoustId . Il y a la bibliothèque Chromaprint (aussi avec des fixations Python)) où vous pouvez créer de telles empreintes digitales. Vous devez lui transmettre des données PCM brutes.
j'ai récemment écrit une bibliothèque en Python qui fait le décodage (en utilisant FFmpeg) et fournit des fonctions telles que générer L'empreinte acoustique (en utilisant Chromaprint) et d'autres choses (également pour jouer le flux via PortAudio). Voir ici .
Cela fait longtemps que je n'ai pas traité le signal pour la dernière fois, mais plutôt que de baisser l'échelle, vous devriez regarder les représentations du domaine de fréquence (par exemple FFT ou DCT). Alors vous pourriez faire une sorte de hachage et chercher la chanson de base de données avec cette séquence.
partie délicate rend cette recherche rapide (peut-être certains documents sur la recherche génétique pourrait être d'intérêt). Je soupçonne qu'iTunes fait aussi une certaine détection des instruments pour réduire la recherche.
j'ai bien lu un article sur la méthode dans laquelle un certain service de récupération d'information musicale (pas de noms mentionnés) le fait - en calculant le court temps Fourier transformer sur l'échantillon de l'audio. L'algorithme identifie ensuite les "pics" dans le domaine de la fréquence, c'est-à-dire les positions et les fréquences du temps qui sont particulièrement élevées, et utilise le temps et la fréquence de ces pics pour générer un hachage. Il s'avère que le hachage a surprenant peu de collisions entre différents échantillons, et aussi se dresse contre environ 50% de la perte de données de l'information de pointe.....
actuellement, je développe un moteur de recherche musicale en utilisant ActionScript 3. L'idée est d'analyser d'abord les accords et de marquer les cadres (limités aux fichiers mp3 en ce moment) où la fréquence change radicalement (la mélodie change et les bruits ignorants). Après cela, je fais la même chose avec le son d'entrée, et je compare les résultats avec les fichiers inversés. La chanson correspondante détermine la chanson correspondante.
pour la méthode D'Axel, je pense que vous ne devriez pas vous inquiéter de la demandez s'il s'agit d'un chant ou simplement d'un bourdonnement, puisque vous ne mettez pas en œuvre un programme de reconnaissance de la parole. Mais je suis curieux de votre méthode qui utilise des fonctions de hachage. Pourriez-vous m'expliquer?
pour interrogation par fonction de fredonnement, il est plus compliqué que la solution d'empreinte audio, le difficile vient de:
- comment recueillir efficacement la base de données de mélodie dans l'application du monde réel? de nombreux systèmes de démonstration utilisent le midi pour la construction, mais le coût de la solution midi est extrêmement pas abordable pour une entreprise.
- comment gérer les écarts de temps, par exemple, l'utilisateur hum peut être rapide ou lente. utiliser DTW? Oui, DTW est une très bonne solution pour traiter des séries chronologiques avec un écart de temps, mais il a coûté trop de CPU-charge.
- comment faire de temps la série d'index?
Voici une requête de démonstration par humming open source project, https://github.com/EmilioMolina/QueryBySingingHumming , pourrait être une référence.