Retour au début de page

Explication de la playlist radio sur Muziekweb


Liste de lecture radio

Les playlists radio que vous écoutez sur Muziekweb sont automatiquement compilées par nos ordinateurs. Ces ordinateurs écoutent les stations de radio en streaming. En se basant sur 'empreintes digitales', la musique est reconnue. Ce processus est basé sur la collection de Muziekweb. Si la musique n'est pas dans la collection Muziekweb, nos ordinateurs ne peuvent pas la reconnaître. Cela peut se produire, par exemple, lors de spectacles en direct. C'est pourquoi vous avez parfois des "trous" dans une liste de lecture.

Explication technique

Les quelque 6,5 millions de fichiers musicaux sont indexés à l'aide d'un algorithme 'empreintes digitales'. Pour cela, le signal audio de 44,1 kHz est réduit à 5 kHz. Ensuite, une transformée de Fourier rapide (FFT) est appliquée sur une fenêtre de 371 ms d'audio. Un nombre de 32 bits est calculé à partir de ces données. C'est ce "subfinger" qui est enregistré. Ensuite, nous continuons 11,6 ms dans l'audio et faisons la même chose à nouveau. Cela continue jusqu'à ce que la piste entière ait été convertie en subfingers. L'ensemble de tous les subfingers constitue l'empreinte de la musique. Cette empreinte digitale est considérablement plus courte que la piste audio originale. Cette empreinte digitale est stockée dans une base de données MySQL, de sorte qu'elle peut être interrogée plus tard pour la comparer avec un autre morceau de musique.

À partir de la base de données MySQL créée, un index inversé est construit. Nous utilisons Lucene pour cela. C'est le même logiciel que nous utilisons pour créer le système de recherche sur Muziekweb. Cela permet de sélectionner rapidement la bonne piste en fonction des subfingers. La taille de l'index de Lucene est d'environ 286 gb et augmente chaque semaine. Il est constitué d'environ 2,5 milliards d'entrées uniques (subfingers).

La base de données MySQL et l'index lucene sont mis à jour chaque semaine, ce processus prend environ 24 heures. Dès que le nouvel index est disponible, il est copié sur les différents ordinateurs qui écoutent les stations de radio.

Les ordinateurs qui écoutent les stations de radio procèdent comme suit :

- Le signal audio (mp3 ou flux aac) est décodé au format wav et converti en un signal de 5 kHz. Des subfingers sont créés à partir de ce signal par l'algorithme décrit. Ce qui produit environ 15 secondes de son.

- L'algorithme de correspondance recherche les subfingers dans l'index lucene. Les pistes audio possibles sont sélectionnées sur cette base. Pour trouver ensuite la bonne piste musicale, la distance de Hamming détermine quelle piste musicale est la plus similaire. On peut imaginer que le fichier musical original, tel qu'il est sur le CD, a l'air différent en raison du type de compression, par exemple le MP3. Une correspondance est donc trouvée en autorisant un certain degré d'erreur. En fin de compte, cela permettra (nous l'espérons) de "reconnaître" la bonne piste audio. Certaines stations de radio, comme par exemple Radio 538, accélèrent quelque peu le son, ce qui rend la détection difficile. Pour continuer à reconnaître la musique, l'audio est d'abord ralenti avant que l'empreinte digitale ne soit calculée.

Un algorithme similaire (avec description) peut être trouvé ici , l'inconvénient de cette implémentation est que l'algorithme utilisé est difficile à mettre à grande échelle.

Parc d'ordinateur

Deux serveurs et trois Intel NUC sont utilisés. Un serveur sert de base de données MySQL, l'autre est utilisé pour la réalisation des empreintes digitales et de l'index inversé (lucene). Nous utilisons des NUC Intel pour écouter les stations de radio. Chaque NUC peut suivre trois stations de radio simultanément. Nous suivons actuellement 8 stations de radio, nous avons donc trois NUC en service pour cela.

Le code est disponible sur github, y compris une base de données d'empreintes digitales de 1,3 miljoen.

Le logiciel est développé pour Muziekweb par Yvo Nelemans.