Museria est un stockage de musique décentralisé basé sur Spreadable, Storacle et Metastocle.
Il y a un article ici avec une explication.
import { Node } from 'museria' ;
try {
const node = new Node ( {
port : 4000 ,
hostname : 'localhost'
} ) ;
await node . init ( ) ;
}
catch ( err ) {
console . error ( err . stack ) ;
process . exit ( 1 ) ;
}
import { Client } from 'museria' ;
import utils from 'museria/src/utils.js' ;
try {
const client = new Client ( {
address : 'localhost:4000'
} ) ;
await client . init ( ) ;
const title = 'Artist - Title' ;
// Prepare the song tags
await utils . addSongTags ( './audio.mp3' , {
fullTitle : title ,
APIC : './cover.jpg'
} ) ;
// Add the song
await client . addSong ( './audio.mp3' ) ;
// Get the song info
const info = await client . getSong ( title ) ;
// Find songs
const songs = await client . findSongs ( 'arti' , { limit : 5 } ) ;
// Find the artist songs
const artistSongs = await client . findArtistSongs ( 'artist' ) ;
// Get the song audio link
const audioLink = await client . getSongAudioLink ( title ) ;
// Get the song cover link
const coverLink = await client . getSongCoverLink ( title ) ;
// Remove the song
await client . removeSong ( title ) ;
}
catch ( err ) {
console . error ( err . stack ) ;
process . exit ( 1 ) ;
}
Vous pouvez également utiliser le client dans un navigateur. Regardez la description de la bibliothèque diffusable. Dans Window, vous avez Window.ClientMuseria au lieu de Window.clients Preadable . Le nom de fichier préparé est Museria.client.js .
Regardez la description de la bibliothèque diffusable. Il vous suffit de changer partout de mots étalés en Museria .
Le mécanisme de la bibliothèque est très similaire à Storacle. La seule différence est que la clé du fichier est le nom de la chanson, pas le hachage. En outre, une chanson unique n'est pas considérée comme avec le match complet du titre, mais le pourcentage de coïncidence définie dans les options.
Actuellement, seul le format MP3 est pris en charge. Les balises sont ID3, basées sur Node-ID3. Des balises TPE1 et TIT2 sont nécessaires pour stocker la chanson. Vous pouvez utiliser Setter Fultitle comme TPE1 - TIT2 lorsque vous définissez les balises à l'aide d'utilisations . Il doit s'agir d'une combinaison valide pour utils.issongtitle () . De plus, le réseau peut avoir ses propres exigences de taille de couverture. Le nombre de chansons qui peuvent être ajoutés à un nœud est également configurable.
Regardez les exigences de Storacle et les exigences de métastocle.
En ajoutant une chanson, vous pouvez indiquer si vous le modérez ou non. L'option contrôlée en est responsable. Par défaut, c'est faux . Le mode de modération implique que vous prenez soin de la conformité et de la qualité de la chanson. Le fichier de la chanson correspondante située dans le stockage sera remplacé par un nouveau sans vérification. L'ajout de chansons dans ce mode nécessite une confirmation de captcha.
await client . addSong ( file , { controlled : true } ) ;
Vous pouvez également spécifier la priorité de votre fichier à -1 , 0 ou 1 . Par défaut, c'est 0 . Si la priorité de la nouvelle chanson est supérieure à celle existante, elle le remplacera sans chèques. S'ils sont égaux, le stockage lui-même décidera lequel choisir. Si moins, la chanson du référentiel restera la même. Seules les balises, la couverture et d'autres informations supplémentaires peuvent être mises à jour dans ce cas. La priorité 1 ne peut être utilisée qu'en mode modération.
await client . addSong ( file , { priority : - 1 } ) ;
await client . addSong ( file , { priority : 1 , controlled : true } ) ;
Par exemple, nous pouvons collecter toute la musique sur la planète en un seul endroit, mais d'une manière décentralisée avec la possibilité d'y accéder à tout moment.
Vous pouvez l'utiliser pour stocker la musique comme vous le souhaitez.
Étant donné que la bibliothèque est écrite en JavaScript, vous pouvez recevoir / envoyer / travailler avec des chansons dans le navigateur et n'utiliser pas du tout du code du serveur. Dans certains cas, cela peut être très pratique.
Lorsque vous créez une instance du nœud, vous pouvez transmettre des options ci-dessous. Seules les options spécifiques de cette bibliothèque sont décrites ici, sans considérer les options des classes parentales.
{objet} [Musique] - Section qui répond pour les paramètres de musique.
{Number} [music.similarity = 0.91] - Nombre de 0 à 1 indiquant comment les titres de chansons similaires doivent être, afin de les considérer comme.
{Number | String} [music.audioHeadersMaxSize = "180KB"] - taille maximale des en-têtes audio.
{Number | String} [music.coverheadersMaxSize = "5KB"] - taille maximale des en-têtes de couverture.
{nombre} [music.findingStringMinLength = 4] - Symboles minimums pour trouver des chansons.
{nombre} [music.findinglimit = 200] - chansons trouvant une taille maximale de liste de résultats.
{Number | String} [music.relevanceTime = "14d"] - Combien de temps une chanson existante a-t-elle priorité sur nouvellement ajouté.
{boolean} [music.prepareTitle = true] - Préparez le titre avant l'addition ou non. La préparation signifie apporter le titre à une vue générale.
{boolean} [music.preparecover = true] - Préparez la couverture avant l'addition ou non. La préparation signifie apporter la taille et la qualité de l'image aux bonnes valeurs.
{Integer} [music.coverquality = 80] - La qualité de la couverture préparée de 0 à 100. Il ne fonctionne que lorsque la musique.preparecover est vrai.
{Integer} [music.coverminsize = 200] - Taille minimale de la couverture en PX. Cela ne fonctionne que lorsque la musique.preparecover est vraie.
{Integer} [music.coverMaxSize = 500] - Taille maximale de la couverture en PX. Cela ne fonctionne que lorsque la musique.preparecover est vraie.
{Number | String} [music.coverMaxFileSize = "110KB"] - Taille maximale du fichier de couverture. Cela ne fonctionne que lorsque la musique.preparecover est vraie.
{Number | String} [Task.CleanupMusicInterval = "1M"] - Intervalle de tâche de nettoyage de la musique.
async client.prototype.addsong () - Ajoutez le fichier au réseau.
async client.prototype.getsong () - Obtenez les informations principales de la chanson.
async client.prototype.getsonginfo () - Obtenez la chanson complète des informations.
async client.prototype.findsongs () - trouver des chansons par le match.
async client.prototype.findartistsongs () - trouver des chansons du nom de l'artiste.
async client.prototype.getsongaudiolink () - Obtenez le lien de fichier audio de la chanson.
async client.prototype.getsongCoverLink () - Obtenez le lien de fichier de couverture de la chanson.
async client.prototype.getsongaudiotobuffer () - Téléchargez le fichier audio de la chanson et renvoyez le tampon.
async client.prototype.getsongCoverTobuffer () - Téléchargez le fichier de couverture de la chanson et renvoyez le tampon.
async client.prototype.getsongautiotopath () - Téléchargez le fichier audio de la chanson et écrivez-le sur le chemin spécifié.
async client.prototype.getsongCovertopath () - Téléchargez le fichier de couverture de la chanson et écrivez-le sur le chemin spécifié.
async client.prototype.getsongaudiotoblob () - Téléchargez le fichier audio de la chanson et renvoyez le blob. Pour le client du navigateur uniquement.
async client.prototype.getsongCoveroBlob () - Téléchargez le fichier de couverture de la chanson et renvoyez le blob. Pour le client du navigateur uniquement.
async client.prototype.removesong () - Supprimez la chanson.
Client.prototype.CreateeSetesdSongaudiolLink () - Créer un lien de fichier audio demandé. Cela est pratique si vous avez besoin d'obtenir le lien sans faire d'opérations asynchrones pour le moment.
Client.prototype.CreareeSetesdSongCoverLink () - Créez un lien de fichier de couverture demandé. Cela est pratique si vous avez besoin d'obtenir le lien sans faire d'opérations asynchrones pour le moment.
Si nécessaire, vous avez la possibilité d'exporter des chansons d'un serveur à un autre. Il y a deux options:
Copiez tous les fichiers du projet dans le deuxième serveur. Il est pratique et fonctionne au moment actuel, car le nœud est capable de reconfigurer toutes les informations à une nouvelle adresse. Mais rien ne garantit que cela fonctionnera à l'avenir.
Utilisez la fonction d'exportation de chanson: Exécutez node.exportSongs()
Méthode ou via la ligne de commande comme museria -a exportSongs -n 2.2.2.2:2079
. Ici, vous devez ajouter le premier serveur à la liste de confiance du second pour transférer toutes les chansons, y compris ceux qui ont la priorité 1. Sans cela, le nœud nécessitera une solution CAPTCHA et le fichier ne sera pas ajouté. Utilisez l'option Network.trustList de la bibliothèque diffusable.
Si vous faites face à un bug ou que vous avez une idée de la façon d'améliorer la bibliothèque, créez un problème sur GitHub. Afin de corriger quelque chose ou d'ajouter un nouveau code vous-même, débarquez la bibliothèque, apportez des modifications et créez une demande de traction vers la branche maître. N'oubliez pas les tests dans ce cas. Vous pouvez également rejoindre le projet sur GitHub.