Objectif : création d’un flux audio avec des morceaux musicaux selon les goûts musicaux de l’utilisateur. Amorçage 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éférés des utilisateurs les plus proches du profil et qui ne sont pas déjà dans les titres notés. Chaque utilisateur a donc son flux personnalisé.
Ses notations font évoluer son profil.
Sa proximité aux autres utilisateurs change en permanence.
Des propositions de nouveaux morceaux sont introduites en permanence.
Les nouveaux bons morceaux se diffusent rapidement.
- Un site semble avoir fait cela dans les années 1970 : http://www.tastematch.com/ de Chris Drack mais est inactif depuis.
- On peu se limiter à la simple fourniture d’une liste de « nouveaux morceaux » sans lien directe de streaming (contourne le pbs de Copyright) avec une lien vers le moteur de recherche Youtube (Nom artiste + titre ), le matching est le point central // PAS le streaming.
- L’utilisateur prépare une liste des ses Best of , export cette playlist sous forme texte (ou bien export avec tag ID3 ?), import cela dans le système. Le système établit une correspondance de cette liste avec les identifiants « uniques » de la base. Puis procède au matching utilisateur. Puis extrait les best off non inclus dans la liste de l’utilisateur.
- Le matching se fait en batch mais un nouveau batch peut être proposer automatiquement à chaque connexion.
- L’utilisateur peut créer plusieurs profils, avec des listes différentes donc des matching différents.
- Fonction LIST : import, modif, effacement, export, Up/Down
- Fonction USER : création, effacement
- Fonction MATCH : update
- Traitement du matching :
- Grande matrice sous R ??
- Une soluce :
- Produit matriciel des choix de l’utilisateur avec les choix des autres utilisateurs. Cela donne un score de proximité.
- Les choix Utilisateur (UT) X Morceau (SG) sont noté de +N à -N (exemple +10 max pref // -10 Min pref ) => nuance permises.
- Pas de choix = 0
- Si les UT(l) sont en ligne et les SG(c) en colonne et UT Ref en ligne 1
alors score (1;1=>c) = Produit Mat (UT(1;1=>c) ; Transpose(UT(2=>l;1=>c)) - ATTENTION : le nombre d’utilisateur DOIT être supérieur ou égal au nombre de morceaux. Mais on peu créer des Utilisateurs « neutres » avec toutes les appréciation à 0
- Si 3 millions de morceaux matrice carrée => 3M ^ 2 = 9G si TYINT (-128/+127) = 1 octet => besoin mémoire vive pour charger la matrice = 9Go. Mais on peut limiter la matrice aux SG notées au moins 1 fois. Les besoins de capacité devraient croitre progressivement avec le nombre d’utilisateurs. Si 1000 UT avec 50 choix absolument non communs => Matrice 50K^2 = 2,5Go
- un script PHP de streaming http://www.kplaylist.net/:
- Streaming playlist
- PHP/Mysql
- une bonne liste de scripts PHP
Problèmes :
- base de morceaux « commune » / Référentiel : le nom du fichier ne suffit pas.
Il faut ramener un morceau à une référence.- Soluce : base de CD open source : FreeDB
la base est téléchargeable ou interrogeable sur leurs serveurs - Base téléchargée : 3Go environ, 11 rep (Jazz, Classical, Soundtrack, etc….) 1 fichier par CD avec des balises de contenu => existe-t-il une version MySql de la base ?
- Il existe des convertisseurs : FreeDb => Mysql (pas aussi simple que je le souhaite / pas de script Php)
- Soluce : base de CD open source : FreeDB
- Streaming / copyright :
- Soluce base serveur / nom de domaine ? dans pays copyright non compliants : doc Sénat US : Russie / Chine / Ukraine / Suisse / Italie
- Quel format de diffusion ?
- Un fichier global MP3 (durée paramétrable : 1 heure / 2 heures…) ?
- Icecast avec un flux par auditeur : bande passante ?
- Playlist qui tape ensuite dans le stock de fichiers MP3 ?
- Comment récupérer les note de préférence utilisateur (Thumb up/down) ?
- Un article sur le Clustering sour R.