{"id":1009,"date":"2013-01-01T13:24:18","date_gmt":"2013-01-01T12:24:18","guid":{"rendered":"http:\/\/www.blue-bears.com\/blog\/?p=1009"},"modified":"2013-01-12T09:54:00","modified_gmt":"2013-01-12T08:54:00","slug":"une-radio-selon-mes-gouts-musicaux","status":"publish","type":"post","link":"http:\/\/www.blue-bears.com\/blog\/?p=1009","title":{"rendered":"Une radio selon les gouts musicaux"},"content":{"rendered":"<p>Objectif : cr\u00e9ation d&rsquo;un flux audio avec des morceaux musicaux selon les go\u00fbts musicaux de l&rsquo;utilisateur. Amor\u00e7age avec une de ses playlists puis matching de la playlist avec celle des autres utilisateurs, puis proposition de nouveaux morceaux sur la base des morceaux pr\u00e9f\u00e9r\u00e9s des utilisateurs les plus proches du profil et qui ne sont pas d\u00e9j\u00e0 dans les titres not\u00e9s. Chaque utilisateur a donc son flux personnalis\u00e9.<br \/>\n<strong>Ses notations font \u00e9voluer son profil.<\/strong><br \/>\nSa proximit\u00e9 aux autres utilisateurs change en permanence.<br \/>\nDes propositions de nouveaux morceaux sont introduites en permanence.<br \/>\nLes nouveaux bons morceaux se diffusent rapidement.<\/p>\n<p><!--more--><\/p>\n<ul>\n<li>Un site semble avoir fait cela dans les ann\u00e9es 1970 : <a title=\"tastematch\" href=\"http:\/\/www.tastematch.com\/\" target=\"_blank\">http:\/\/www.tastematch.com\/<\/a> de Chris Drack mais est inactif depuis.<\/li>\n<li>On peu se limiter \u00e0 la simple fourniture d&rsquo;une liste de \u00ab\u00a0nouveaux morceaux\u00a0\u00bb sans lien directe de streaming (contourne le pbs de Copyright) avec une lien vers le moteur de recherche Youtube (Nom artiste +\u00a0 titre ), le matching est le point central \/\/ PAS le streaming.<\/li>\n<li>L&rsquo;utilisateur pr\u00e9pare une liste des ses Best of , export cette playlist sous forme texte (ou bien export avec tag ID3 ?), import cela dans le syst\u00e8me. Le syst\u00e8me \u00e9tablit une correspondance de cette liste avec les identifiants \u00ab\u00a0uniques\u00a0\u00bb de la base. Puis proc\u00e8de au matching utilisateur. Puis extrait les best off non inclus dans la liste de l&rsquo;utilisateur.<\/li>\n<li>Le matching se fait en batch mais un nouveau batch peut \u00eatre proposer automatiquement \u00e0 chaque connexion.<\/li>\n<li>L&rsquo;utilisateur peut cr\u00e9er plusieurs profils, avec des listes diff\u00e9rentes donc des matching diff\u00e9rents.<\/li>\n<li>Fonction LIST : import, modif, effacement, export, Up\/Down<\/li>\n<li>Fonction USER : cr\u00e9ation, effacement<\/li>\n<li>Fonction MATCH : update<\/li>\n<li>Traitement du matching :\n<ul>\n<li>Grande matrice sous R ??\n<ul>\n<li><a href=\"http:\/\/manuals.bioinformatics.ucr.edu\/home\/R_BioCondManual#R_clustering\">article Clustering sous R<\/a><\/li>\n<\/ul>\n<\/li>\n<li>Une soluce :\n<ul>\n<li>Produit matriciel des choix de l&rsquo;utilisateur avec les choix des autres utilisateurs. Cela donne un score de proximit\u00e9.<\/li>\n<li>Les choix Utilisateur (UT) X Morceau (SG) sont not\u00e9 de +N \u00e0 -N (exemple +10 max pref \/\/ -10 Min pref ) =&gt; nuance permises.<\/li>\n<li>Pas de choix = 0<\/li>\n<li>Si les UT(l) sont en ligne et les SG(c) en colonne et UT Ref en ligne 1<br \/>\nalors score (1;1=&gt;c) = Produit Mat (UT(1;1=&gt;c) ; Transpose(UT(2=&gt;l;1=&gt;c))<\/li>\n<li>ATTENTION : le nombre d&rsquo;utilisateur DOIT \u00eatre sup\u00e9rieur ou \u00e9gal au nombre de morceaux. Mais on peu cr\u00e9er des Utilisateurs \u00ab\u00a0neutres\u00a0\u00bb avec toutes les appr\u00e9ciation \u00e0 0<\/li>\n<li>Si 3 millions de morceaux matrice carr\u00e9e =&gt; 3M ^ 2 = 9G si TYINT (-128\/+127) = 1 octet =&gt; besoin m\u00e9moire vive pour charger la matrice = 9Go. Mais on peut limiter la matrice aux SG not\u00e9es au moins 1 fois. Les besoins de capacit\u00e9 devraient croitre progressivement avec le nombre d&rsquo;utilisateurs. Si 1000 UT avec 50 choix absolument non communs =&gt; Matrice 50K^2 = 2,5Go<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li>un script PHP de streaming <a title=\"Kplaylist\" href=\"http:\/\/www.kplaylist.net\/\" target=\"_blank\">http:\/\/www.kplaylist.net\/<\/a>:\n<ul>\n<li>Streaming playlist<\/li>\n<li>PHP\/Mysql<\/li>\n<\/ul>\n<\/li>\n<li>une<a title=\"PHP\" href=\"http:\/\/php.resourceindex.com\/Complete_Scripts\/Audio_Management\/\" target=\"_blank\"> bonne liste de scripts PHP<\/a><\/li>\n<\/ul>\n<p>Probl\u00e8mes :<\/p>\n<ul>\n<li>base de morceaux \u00ab\u00a0commune\u00a0\u00bb \/ R\u00e9f\u00e9rentiel : le nom du fichier ne suffit pas.<br \/>\nIl faut ramener un morceau \u00e0 une r\u00e9f\u00e9rence.<\/p>\n<ul>\n<li>Soluce : base de CD open source : <a title=\"Freedb\" href=\"http:\/\/www.freedb.org\/en\/\" target=\"_blank\">FreeDB<\/a><br \/>\nla base est t\u00e9l\u00e9chargeable ou interrogeable sur leurs serveurs<\/li>\n<li>Base t\u00e9l\u00e9charg\u00e9e : 3Go environ,\u00a0 11 rep (Jazz, Classical, Soundtrack, etc&#8230;.) 1 fichier par CD avec des balises de contenu =&gt; existe-t-il une version MySql de la base ?<\/li>\n<li>Il existe des <a title=\"Freedb Mysql\" href=\"http:\/\/wispa.gotdns.org\/~freedb\/freedbimporter\/\" target=\"_blank\">convertisseurs<\/a> : FreeDb =&gt; Mysql (pas aussi simple que je le souhaite \/ pas de script Php)<\/li>\n<\/ul>\n<\/li>\n<li>Streaming \/ copyright :\n<ul>\n<li>Soluce base serveur \/ nom de domaine ? dans pays copyright non compliants : doc S\u00e9nat US : Russie \/ Chine \/ Ukraine \/ Suisse \/ Italie<\/li>\n<\/ul>\n<\/li>\n<li>Quel\u00a0 format de diffusion ?\n<ul>\n<li>Un fichier global MP3 (dur\u00e9e param\u00e9trable : 1 heure \/ 2 heures&#8230;) ?<\/li>\n<li>Icecast avec un flux par auditeur : bande passante ?<\/li>\n<li>Playlist qui tape ensuite dans le stock de fichiers MP3 ?<\/li>\n<\/ul>\n<\/li>\n<li>Comment r\u00e9cup\u00e9rer les note de pr\u00e9f\u00e9rence utilisateur (Thumb up\/down) ?<\/li>\n<li>Un <a title=\"Cluster sour R\" href=\"http:\/\/rdatamining.wordpress.com\/2011\/08\/26\/examples-on-clustering-with-r\/\">article sur le Clustering sour R<\/a>.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Objectif : cr\u00e9ation d&rsquo;un flux audio avec des morceaux musicaux selon les go\u00fbts musicaux de l&rsquo;utilisateur. Amor\u00e7age avec une de ses playlists [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-1009","post","type-post","status-publish","format-standard","hentry","category-idees-diverses"],"_links":{"self":[{"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1009"}],"version-history":[{"count":17,"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1009\/revisions"}],"predecessor-version":[{"id":1011,"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1009\/revisions\/1011"}],"wp:attachment":[{"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1009"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.blue-bears.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}