tag:linuxfr.org,2005:/tags/leleleplayer/publicLinuxFr.org : les contenus étiquetés avec « leleleplayer »2016-10-31T12:49:29+01:00/favicon.pngtag:linuxfr.org,2005:News/375862016-10-22T19:53:08+02:002016-10-23T13:08:30+02:00Sortie de la bibliothèque d’analyse musicale Bliss 1.0Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Bliss a été présenté à la <em>Student DemoCup 2015</em>, sous la forme de <a href="http://student.opensourcesummit.paris/projet/leleleplayer/"><em>leleleplayer</em></a>, qui servait à en illustrer les possibilités. En effet, Bliss est une bibliothèque d’analyse de morceaux musicaux pouvant s’intégrer facilement à divers lecteurs audio et permettant, entre autres, la génération automatique de listes de lecture.</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f6c656c656c652e696f2f6c6f676f2f626c6973735f6c6f676f2e737667/bliss_logo.svg" alt="logo de Bliss" title="Source : http://lelele.io/logo/bliss_logo.svg"></p>
<p>Développée et utilisable en <em>C</em> à l’aide de <a href="http://ffmpeg.org/"><em>ffmpeg</em></a>, <a href="http://www.fftw.org/"><em>fftw</em></a> et disposant de bibliothèques de liaison (<em>bindings</em>) Python, Bliss permet la création de listes de lecture « intelligentes » (comprendre : les morceaux s’enchaînant naturellement) après une phase d’analyse de l’audiothèque.<br>
Pour les utilisateurs de MPD, une première implémentation de Bliss, Blissify, permet de générer automatiquement une liste de lecture en partant du dernier morceau joué, un peu comme les radios de Grooveshark.</p></div><ul><li>lien nᵒ 1 : <a title="http://lelele.io/bliss.html" hreflang="en" href="https://linuxfr.org/redirect/98337">Page du projet Bliss</a></li><li>lien nᵒ 2 : <a title="https://github.com/Polochon-street/bliss" hreflang="en" href="https://linuxfr.org/redirect/98338">Dépôt GitHub de Bliss</a></li><li>lien nᵒ 3 : <a title="https://github.com/Phyks/Blissify" hreflang="en" href="https://linuxfr.org/redirect/98339">Dépôt GitHub de Blissify</a></li></ul><div><h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#fonctionnalit%C3%A9s">Fonctionnalités</a></li>
<li><a href="#sous-le-capot">Sous le capot</a></li>
<li><a href="#performances">Performances</a></li>
<li><a href="#impl%C3%A9mentations-existantes">Implémentations existantes</a></li>
</ul><h2 id="fonctionnalités">Fonctionnalités</h2>
<p>Bliss permet de calculer pour chaque chanson quatre « coordonnées » à partir du fichier audio. La caractéristique de chaque coordonnée est détaillée dans la partie « sous le capot » ci‐dessous ; une fois ces quatre valeurs obtenues, la génération de listes de lecture est possible en calculant les distances euclidiennes entre les morceaux dans cet espace de dimension 4 et en jouant les plus proches les unes après les autres, comme illustré ci‐dessous dans une réduction à 3 dimensions :<br><img src="//img.linuxfr.org/img/687474703a2f2f692e696d6775722e636f6d2f6b5561426c4c4d2e706e67/kUaBlLM.png" alt="Graphe des distances entre deux points dans l’espace" title="Source : http://i.imgur.com/kUaBlLM.png"></p>
<p>La fonctionnalité principale de Bliss est donc <code>bl_analyze</code> prenant en argument un nom de fichier audio et retournant un vecteur de dimension 4.</p>
<p>Pour calculer les distances entre les chansons et choisir la chanson suivante la plus proche, on peut utiliser :</p>
<ul>
<li>
<code>bl_distance(vecteur_chanson1, vecteur_chanson2)</code>, qui permet ensuite de calculer la distance entre deux chansons à partir des vecteurs calculés précédemment ;</li>
<li>
<code>bl_cosine_similarity(vecteur_chanson1, vecteur_chanson2)</code>, qui est <a href="https://fr.wikipedia.org/wiki/Similarit%C3%A9_cosinus">une autre méthode</a> permettant d’évaluer la similarité entre deux chansons.</li>
</ul><p>Ainsi, n’importe quel lecteur audio peut utiliser cette bibliothèque pour composer des listes de lecture à partir d’un morceau : il suffit d’analyser toutes les chansons à l’aide de <code>bl_analyze</code>, de stocker le résultat pour chaque chanson, puis de mettre à la suite les chansons suffisamment proches (en général, une distance inférieure à 8 et une similarité cosinus supérieure à 0,85 donnent de bons résultats) pour obtenir une playlist.</p>
<h2 id="sous-le-capot">Sous le capot</h2>
<p>Contrairement aux listes de lectures générées par Spotify ou Deezer, qui font probablement un usage conséquent du <em>machine‐learning</em>, les différents critères utilisés par Bliss se veulent le plus compréhensible possible. Rapidement (le détail des différents scores est donné sur <a href="http://lelele.io/bliss.html#details">la page de Bliss</a>), ces critères sont les suivants :</p>
<ul>
<li>amplitude : à quel point le son est fort, <em>cf.</em> la capture ci‐dessous sous Audacity :
<img src="//img.linuxfr.org/img/687474703a2f2f692e696d6775722e636f6d2f6b6368775a79502e706e67/kchwZyP.png" alt="audacity sur PinK Floyd et Dragonforce" title="Source : http://i.imgur.com/kchwZyP.png">
</li>
<li>fréquence : à quel point le morceau est en moyenne aigu ou grave ;</li>
<li>attaque : le pourcentage d’attaques dans un morceau, c’est‐à‐dire le moment où le son passe du silence à un niveau élevé ;</li>
<li>tempo : une estimation du nombre de battements par minute (BPM) du morceau, pour estimer sa « rapidité ».</li>
</ul><p>Ces critères se veulent le plus complémentaire possible. Ils sont calculés une fois que le morceau est décodé en un tableau d’échantillons par <em>ffmpeg</em>. Actuellement, le morceau est stocké en mémoire vive sous sa forme décodée ; une étape prévue (mais non triviale) est de recoder Bliss en utilisant les mêmes algorithmes en diffusion (<em>streaming</em>), afin d’éviter d’occuper la mémoire vive sur des morceaux en très haute qualité.</p>
<h2 id="performances">Performances</h2>
<p>Trouver une méthode d’évaluation pour quelque chose de subjectif comme la similitude entre des chansons n’est pas chose aisée, aussi, celle que je vais décrire ci‐dessous n’évalue pas exactement ce pourquoi Bliss a été créé, mais permet toutefois de donner une idée des performances de Bliss. Si vous avez des idées, n’hésitez pas à le mentionner dans les commentaires !</p>
<p>Nous avons donc catégorisé 310 morceaux en huit genres différents, à savoir : blues, musique classique, musique électronique, jazz, métal, rock progressif, rap et swing. Nous avons ensuite calculé les coordonnées de chaque morceau à l’aide de Bliss, puis nous avons cherché à former des grappes (<em>clusters</em>) à partir de tous ces points à l’aide d’un algorithme des <a href="https://fr.wikipedia.org/wiki/K-moyennes">k-moyennes</a>, en ajoutant un genre à la fois : jazz <em>vs</em> métal, puis jazz‐métal‐swing, etc.</p>
<p>Nous avons ensuite réalisé la même chose, mais cette fois avec des coordonnées aléatoires pour chaque morceau : nous avions ainsi deux jeux de résultats à comparer.<br>
Nous avons enfin calculé la <a href="http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html">pureté</a> du partitionnement, à savoir le ratio d’éléments convenablement triés sur le nombre total d’éléments. Les résultats obtenus sont les suivants :<br><img src="//img.linuxfr.org/img/687474703a2f2f692e696d6775722e636f6d2f444239364c634d2e706e67/DB96LcM.png" alt="résultats" title="Source : http://i.imgur.com/DB96LcM.png"></p>
<p>Bliss fait donc 30 à 50 % mieux que de l’aléatoire. Il faut tout de même garder à l’esprit que cette métrique est arbitraire et ne peut donc pas qualifier de façon définitive un algorithme de traitement musical ; cela est tout de même donné à titre indicatif.</p>
<h2 id="implémentations-existantes">Implémentations existantes</h2>
<p>Au‐delà de <em>leleleplayer</em>, qui a été développé comme une interface pour Bliss, mais dont l’ergonomie reste pour l’instant perfectible, il est très facile d’utiliser Bliss avec votre lecteur audio préféré (tant que celui‐ci est extensible par des greffons).</p>
<p>C’est en ce sens qu’a été développé <a href="https://github.com/phyks/blissify">Blissify</a>, une infrastructure fonctionnant autour de Bliss et censée faciliter l’utilisation de Bliss dans votre lecteur audio préféré. Il fournit un exécutable, <code>blissify</code>, qui va calculer et stocker les valeurs retournées par Bliss pour chaque fichier musical de l’audiothèque. Typiquement, si votre bibliothèque musicale se trouve dans <code>~/Musique</code>, pour calculer les valeurs nécessaires pour chaque fichier de votre bibliothèque musicale, vous pouvez lancer :</p>
<pre><code class="bash"><span class="nb">cd</span> ~/Musique<span class="p">;</span> find . -type f -print0 <span class="p">|</span> xargs -0 blissify ~/Musique</code></pre>
<p>Toutes ces valeurs seront alors stockées dans une base SQLite stockée dans <code>$XDG_DATA_HOME/blissify/db.sqlite3</code>.</p>
<p>Blissify fournit également une <a href="https://github.com/Phyks/Blissify/tree/master/mpd">implémentation basique de Bliss pour MPD</a>, permettant <a href="https://github.com/Phyks/Blissify#the-mpd-server-side-script">d’analyser directement sa bibliothèque musicale gérée par MPD</a> avec Bliss, puis de <a href="https://github.com/Phyks/Blissify#the-mpd-client-side-script">créer des listes de lecture intelligentes à partir de la liste de lecture actuelle</a>.</p></div><div><a href="https://linuxfr.org/news/sortie-de-la-bibliotheque-d-analyse-musicale-bliss-1-0.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/110225/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-la-bibliotheque-d-analyse-musicale-bliss-1-0#comments">ouvrir dans le navigateur</a>
</p>
Polochon_streetDavy Defaudphyksmathieuipalm123claudexBenoît SibaudXavier Teyssierhttps://linuxfr.org/nodes/110225/comments.atom