
Un jour, j'ai décidé d'écrire une application pour choisir de la musique à écouter chez moi, en extérieur, pendant mes entraßnements, etc. Et pour que tout cela fonctionne en continu, avec un minimum de mon intervention. J'ai conçu l'architecture, esquissé un prototype et finalement, je suis tombé sur un petit "problÚme".
Mais je ne savais pas d'oĂč rĂ©cupĂ©rer les fichiers musicaux eux-mĂȘmes. Ă ce moment-lĂ , VKontakte avait dĂ©jĂ fermĂ© son API, et les grands portails musicaux Ă©taient Ă©galement bloquĂ©s ; mĂȘme les chansons Ă©taient dĂ©livrĂ©es en morceaux pour empĂȘcher le scraping. Il ne restait que quelques sites Ă©phĂ©mĂšres remplis de publicitĂ©s et de contenu indĂ©sirable, des programmes grabbers douteux et d'autres solutions "sales". En rĂ©sumĂ©, aucune solution rĂ©ellement valable. Bien sĂ»r, on peut acheter un abonnement Ă Yandex Music ou autre chose. Mais lĂ encore, il n'y a pas d'API publique ouverte et tu n'as pas d'accĂšs programmatique Ă la musique. Certaines grandes entreprises ont essentiellement limitĂ© l'accĂšs Ă la musique pour les autres. Pourquoi cela s'est-il produit ? En approfondissant, il est devenu clair que le problĂšme principal rĂ©side dans les droits d'auteur. La solution actuelle sous forme d'abonnements satisfait de nombreux auteurs commerciaux de compositions musicales et ces mĂȘmes entreprises. Cependant, la musique non commerciale et conditionnellement commerciale est Ă©galement incluse dans la liste gĂ©nĂ©rale. Soit tu paies pour tout, soit tu ne t'Ă©coutes rien du tout.
Alors j'ai commencé à réfléchir à ce qu'il fallait faire avec tout cela. Comment organiser la distribution libre de la musique ? Que ferais-je si je créais de la musique et voulais en vivre ? Est-ce que cela me plairait si mes chansons étaient diffusées de maniÚre pirate ? Quelle alternative existe-t-il ?
Au final, deux problÚmes principaux se sont dégagés qu'il faut résoudre :
- Organisation de la distribution libre de la musique par des méthodes confortables pour la plupart des gens, y compris des méthodes logicielles.
- Proposition d'alternatives aux créateurs de musique pour gagner de l'argent
Un stockage musical mondial décentralisé
Au départ, j'ai essayé de trouver des solutions existantes et de créer tout à partir de celles-ci. AprÚs un certain temps de recherche, j'ai été attiré en premier par . J'ai commencé à réaliser mon idée, mais aprÚs un certain temps, j'ai découvert plusieurs problÚmes critiques dans cette solution :
- Ipfs â un stockage pour tout et n'importe quoi. Des images, de la musique, des vidĂ©os, et tout ce que vous pouvez imaginer. En gros, c'est une vaste « dĂ©charge » planĂ©taire. Donc, lorsque vous lancez votre nĆud, vous ĂȘtes immĂ©diatement soumis Ă une charge Ă©norme. La machine souffre littĂ©ralement.
- C'est une sorte de mécanisme inachevé de collecte de « déchets ». Je ne sais pas comment ça se passe maintenant, mais à l'époque, si vous configuriez pour limiter le stockage à dix gigaoctets de données, cela ne signifiait rien. Le stockage s'étendait, ignorant de nombreux paramÚtres de configuration. En fin de compte, il fallait avoir une énorme capacité de disque dur tant qu'ipfs ne savait pas comment supprimer l'inutile.
- Au moment d'utiliser la bibliothĂšque (je ne sais pas comment c'est actuellement), le client n'avait pas de dĂ©lais d'attente. Vous envoyez une requĂȘte pour obtenir un fichier, et si celui-ci n'existe pas, vous restez simplement bloquĂ©. Bien sĂ»r, les gens ont trouvĂ© diverses solutions de contournement qui rĂ©solvaient en partie le problĂšme, mais ce n'Ă©tait que des rustines. De telles fonctionnalitĂ©s devraient ĂȘtre incluses de maniĂšre native.
Il y avait aussi de nombreux petits problÚmes, et l'impression que j'en ai gardée était claire : on ne peut pas l'utiliser pour un projet. J'ai continué à chercher un stockage, étudiant différentes options, mais je n'ai toujours rien trouvé de convenable.
En fin de compte, j'ai décidé d'essayer d'écrire mon propre stockage décentralisé. Qu'il ne prétende pas au rÎle interplanétaire, mais qu'il résolve un problÚme spécifique.
Ainsi sont nés , , , , .
spreadable â c'est la couche principale, la plus basse, qui permet de relier les nĆuds dans un rĂ©seau. Il contient un algorithme que j'ai partiellement implĂ©mentĂ© pour environ 10000 serveurs. La version complĂšte de l'algorithme est beaucoup plus compliquĂ©e Ă mettre en Ćuvre et nĂ©cessiterait encore plusieurs mois supplĂ©mentaires (peut-ĂȘtre plus).
Je ne vais pas décrire approfondiament spreadable dans cet article, je préfÚre écrire un article séparé un jour. Ici, je vais juste noter certaines caractéristiques :
- Fonctionne via http/https.
- Il est possible de crĂ©er un rĂ©seau distinct pour une tĂąche spĂ©cifique, ce qui rĂ©duit considĂ©rablement la charge sur chaque projet individuel, contrairement Ă s'ils Ă©taient tous sur un mĂȘme rĂ©seau.
- Un mĂ©canisme avec des dĂ©lais d'attente et d'autres petits dĂ©tails a Ă©tĂ© initialement prĂ©vu. Et cela fonctionne pour toutes les mĂ©thodes, tant dans le client que dans le nĆud. On peut gĂ©rer les paramĂštres de maniĂšre flexible depuis sa propre application.
- La bibliothĂšque est Ă©crite en nodejs. Les problĂšmes de performance de la pile sont compensĂ©s par la nature dĂ©centralisĂ©e. La charge peut ĂȘtre "Ă©talĂ©e" en augmentant le nombre de nĆuds. En retour, il y a beaucoup d'avantages : une immense communautĂ©, simplicitĂ© et facilitĂ© de travail, un client isomorphe, absence de dĂ©pendances extĂ©rieures, etc.
storacle â est une couche qui hĂ©rite de spreadable, permettant de stocker des fichiers sur le rĂ©seau. Chaque fichier a son propre hachage basĂ© sur son contenu, ce qui permet de l'accĂ©der par la suite. Les fichiers ne sont pas divisĂ©s en blocs, mais stockĂ©s en entier.
metastocle â est une couche qui hĂ©rite de spreadable, permettant de stocker des donnĂ©es sur le rĂ©seau, mais pas des fichiers. L'interface est similaire aux bases de donnĂ©es nosql. Par exemple, on peut ajouter un fichier Ă storacle, obtenir son hachage et l'Ă©crire dans metastocle avec un lien vers quelque chose.
museria â hĂ©rite de storacle et metastocle. Cette couche est directement responsable du stockage de la musique. Le stockage ne travaille qu'avec des fichiers mp3 et des tags id3.
La "clĂ©" de la chanson est son titre complet sous la forme de Artiste (TPE1) â Titre (TIT2). Par exemple :
- Brimstone â The Burden
- Hi-rez â Lost My Way (feat. Emilio Rojas, Dani Devinci)
Pour savoir comment les titres des chansons sont formés en détail, il faut regarder la fonction utils.beautifySongTitle().
Une correspondance par clĂ©s est considĂ©rĂ©e comme un pourcentage dĂ©fini dans les paramĂštres du nĆud. Par exemple, une valeur de 0,85 signifie que si la fonction de comparaison des clĂ©s (titres de chansons) dĂ©tecte une similaritĂ© supĂ©rieure Ă 85%, alors il s'agit de la mĂȘme chanson.
L'algorithme de détermination de similarité est également là , dans la fonction utils.getSongSimilarity().
La couverture de la chanson, pour un accĂšs ultĂ©rieur, doit Ă©galement ĂȘtre attachĂ©e via les tags (APIC). Dans les utilitaires (utils), tous les mĂ©thodes nĂ©cessaires pour obtenir et traiter les tags sont disponibles.
Un exemple de travail avec le stockage via le client peut ĂȘtre vu dans .
Tous les couches mentionnĂ©es ci-dessus sont autonomes et peuvent ĂȘtre utilisĂ©es sĂ©parĂ©ment comme des couches infĂ©rieures pour d'autres projets. Par exemple, l'idĂ©e de crĂ©er une couche pour le stockage de livres existe dĂ©jĂ .
museria-global â est un dĂ©pĂŽt git prĂ©configurĂ© pour lancer votre propre nĆud dans le rĂ©seau mondial de la musique. Clonez-le, npm i && npm start et c'est tout. Une configuration plus dĂ©taillĂ©e peut ĂȘtre effectuĂ©e, lancer dans docker, etc. Des informations dĂ©taillĂ©es sont disponibles sur .
Lorsqu'un dĂ©pĂŽt est mis Ă jour, il est Ă©galement nĂ©cessaire de mettre Ă jour votre nĆud. Si le numĂ©ro de version majeur ou mineur change, cette action est obligatoire, sinon les anciens nĆuds seront ignorĂ©s par le rĂ©seau.
Il est possible de travailler avec des chansons manuellement et par programme. Chaque nĆud lance un serveur pour diverses tĂąches. En visitant le point d'accĂšs par dĂ©faut, vous obtiendrez une interface pour travailler avec la musique. Par exemple, vous pouvez accĂ©der Ă (le lien peut ne plus ĂȘtre pertinent plus tard, les nĆuds d'entrĂ©e sont Ă©galement accessibles via , ou consulter les mises Ă jour sur GitHub).
Ainsi, vous pouvez rechercher et tĂ©lĂ©charger des chansons dans le stockage. Le tĂ©lĂ©chargement de chansons peut se faire en deux modes : normal et modĂ©rĂ©. Le deuxiĂšme mode signifie qu'une personne, et non un programme, gĂšre le processus. Si vous cochez cette case lors de l'ajout, vous devrez rĂ©soudre un captcha. Les chansons peuvent ĂȘtre ajoutĂ©es avec des prioritĂ©s -1, 0 ou 1. La prioritĂ© 1 ne peut ĂȘtre donnĂ©e qu'en mode modĂ©rĂ©. Les prioritĂ©s sont nĂ©cessaires pour que le stockage prenne des dĂ©cisions plus efficaces lorsque vous essayez de remplacer une chanson existante par une nouvelle. Plus la prioritĂ© est Ă©levĂ©e, plus vous aurez de chances de remplacer le fichier existant. Cela aide Ă lutter contre le spam et augmente la qualitĂ© des chansons tĂ©lĂ©chargĂ©es.
Si vous commencez Ă ajouter des chansons dans le stockage, essayez d'attacher des images (couverture), mĂȘme si ce champ n'est pas obligatoire. Dans 99 % des cas, les premiĂšres images sur Google en fonction des titres de chansons sont des couvertures d'albums.
En termes techniques, voici comment les fichiers sont ajoutés, en deux mots :
- Le client reçoit l'adresse d'un nĆud libre, qui deviendra coordonnateur pendant un certain temps.
- La fonction d'ajout de chanson (par une personne ou par code) est déclenchée, une demande d'ajout est envoyée au point d'accÚs du coordonnateur.
- Le coordonnateur calcule combien de doublons doivent ĂȘtre conservĂ©s (paramĂštre configurable).
- Les nĆuds les plus appropriĂ©s pour le stockage sont recherchĂ©s.
- Le fichier est directement envoyĂ© Ă ces nĆuds.
Voici comment les fichiers sont récupérés techniquement :
- Le client reçoit l'adresse d'un nĆud libre, qui deviendra coordonnateur pendant un certain temps.
- La fonction d'obtention de chanson (par une personne ou par code) est déclenchée, une demande d'obtention est envoyée au point d'accÚs du coordonnateur.
- Le coordonnateur vĂ©rifie la prĂ©sence du lien dans le cache. S'il existe et qu'il est actif, il est immĂ©diatement renvoyĂ© au client, sinon les nĆuds sont interrogĂ©s pour vĂ©rifier leur disponibilitĂ©.
- Le fichier est en cours de récupération via le lien, si trouvé.
Alternatives pour les créateurs de musique
Je me suis toujours demandĂ© comment Ă©valuer objectivement le prix de nombreuses Ćuvres crĂ©atives. Pourquoi, par exemple, une personne fixe-t-elle le prix de son album musical Ă 10 $ ? Ou Ă 20 $ ou Ă 100 $. Quel est l'algorithme ? Quand, par exemple, nous parlons d'un produit physique ou mĂȘme de nombreux types de services, nous pouvons au moins calculer le coĂ»t de production et partir de lĂ .
Ok, supposons qu'on fixe le prix à 10 $. Est-ce vraiment efficace ? Supposons que j'écoute l'album quelque part ou une chanson de celui-ci et que je souhaite remercier l'artiste. Mais selon mes impressions et mes capacités, 3 $ est mon plafond. Que faire alors ? Il est probable que je ne ferai rien, comme la plupart des gens.
En fixant un prix fixe pour un travail crĂ©atif, tu te limites simplement, tu ne permets pas Ă un plus grand nombre de personnes de t'envoyer moins d'argent, ce qui pourrait cumulativement ĂȘtre plus important que ce que ceux qui achĂštent Ă ton prix fixe. Je pense que la crĂ©ativitĂ© est justement ce domaine oĂč les dons devraient, en premier lieu, prĂ©dominer. Pour cela, il faut :
- Apprendre aux gens à remercier de cette maniÚre. Les créateurs doivent montrer clairement qu'ils aimeraient recevoir des dons, en ajoutant des liens vers différents moyens de paiement, etc.
- Il faut plus de mĂ©canismes pour simplifier et renforcer ces processus. Par exemple, crĂ©er un site global oĂč les dons pour la crĂ©ativitĂ© pourraient ĂȘtre faits via des liens d'auteur.
Disons que le lien est à peu prÚs comme ça :
http://someartistsdonationsite.site/category/artist?external-infoSi l'on se limite aux musiciens, alors :
http://someartistsdonationsite.com/music/miyagi?song=blablaL'interprÚte doit vérifier son pseudo et s'y rattacher.
Dans le client museria, nous ajoutons une fonction de gĂ©nĂ©ration de ce type de lien, et tous les projets utilisant le stockage peuvent placer sur leurs sites/applications des boutons pour des dons avec ces liens Ă cĂŽtĂ© des chansons. Les utilisateurs ont la possibilitĂ© de faire des dons trĂšs rapidement et facilement. Ăvidemment, cette approche peut ĂȘtre utilisĂ©e dans n'importe quel projet et catĂ©gorie de crĂ©ativitĂ©, pas seulement Ă travers le stockage.
Pourquoi, en particulier pour toi, un stockage musical, et comment y participer ?
- Si tu travailles sur un projet liĂ© Ă la musique ou si tu prĂ©vois d'en crĂ©er un, c'est pour cela que tout cela a Ă©tĂ© conçu. Tu peux utiliser museria pour stocker et obtenir des chansons, augmentant le flux de chansons en ligne. Si tu as la possibilitĂ© de crĂ©er et de maintenir au moins un nĆud, ce sera la meilleure contribution au dĂ©veloppement du rĂ©seau.
- Peut-ĂȘtre es-tu prĂȘt Ă assumer un autre rĂŽle : aider avec le code, ou remplir et modĂ©rer la base de donnĂ©es, diffuser des informations sur le projet Ă tes connaissances, etc.
- Peut-ĂȘtre que l'idĂ©e t'a plu et que tu es prĂȘt Ă aider financiĂšrement pour que tout cela vive et se dĂ©veloppe. Plus il y aura de nĆuds, plus il y aura de chansons.
- Ou peut-ĂȘtre qu'Ă un moment donnĂ©, tu auras simplement besoin de trouver et de tĂ©lĂ©charger une chanson. Tu pourras le faire trĂšs facilement, par exemple, via .
Le projet est actuellement Ă un stade trĂšs prĂ©coce. Un rĂ©seau test a Ă©tĂ© lancĂ©, les nĆuds peuvent souvent redĂ©marrer, nĂ©cessiter des mises Ă jour, etc. En l'absence de problĂšmes critiques pendant la pĂ©riode d'Ă©valuation, ce mĂȘme rĂ©seau sera transformĂ© en rĂ©seau principal.
Pour voir les informations sur un nĆud de l'extĂ©rieur : le nombre de chansons, l'espace libre, etc., tu peux te rendre sur un lien de type http://node-address/status ou http://node-address/status?pretty
Mes contacts :
Source : habr.com
