Museria es un almacenamiento musical descentralizado basado en una propagación, Storacle y Metastocle.
Hay un artículo aquí con una explicación.
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 ) ;
}
También puede usar el cliente en un navegador. Mire la descripción de la biblioteca propagable. En la ventana tiene ventana. CLIENTMUSERIA en lugar de ventana . El nombre del archivo preparado es museria.client.js .
Mire la descripción de la biblioteca propagable. Solo necesita cambiar en todas partes la palabra dispersable a Museria .
El mecanismo de la biblioteca es muy similar al de Storacle. La única diferencia es que la clave del archivo es el nombre de la canción, no el hash. Además, una canción única no se considera con el título completo de título, sino el porcentaje de coincidencia establecido en las opciones.
Actualmente, solo se admite el formato MP3. Las etiquetas son ID3, basadas en Node-ID3. Se requieren etiquetas TPE1 y TIT2 para almacenar la canción. Puede usar Setter Fulltitle como TPE1 - TIT2 cuando configura las etiquetas usando Utils . Debe ser una combinación válida para la función de utils.issongtitle () . Además, la red puede tener sus propios requisitos de tamaño de cobertura. El número de canciones que se pueden agregar a un nodo también es configurable.
Mire los requisitos de Storacle y los requisitos de Metastocle.
Al agregar una canción, puede indicar si la modera o no. La opción controlada es responsable de esto. Por defecto, es falso . El modo de moderación implica que se encarga de la conformidad y la calidad de la canción. El archivo de la canción correspondiente ubicada en el almacenamiento se reemplazará con una nueva sin cheques. Agregar canciones en este modo requiere confirmación de captcha.
await client . addSong ( file , { controlled : true } ) ;
También puede especificar la prioridad de su archivo como -1 , 0 o 1 . Por defecto, es 0 . Si la prioridad de la nueva canción es más alta que la existente, lo reemplazará sin cheques. Si son iguales, entonces el almacenamiento en sí decidirá cuál elegir. Si es menos, entonces la canción en el repositorio seguirá siendo la misma. Solo las etiquetas, la cobertura y otra información adicional pueden actualizarse en este caso. La prioridad 1 solo se puede usar en modo de moderación.
await client . addSong ( file , { priority : - 1 } ) ;
await client . addSong ( file , { priority : 1 , controlled : true } ) ;
Por ejemplo, podemos recopilar toda la música en el planeta juntos en un solo lugar, pero de manera descentralizada con la capacidad de acceder a ella en cualquier momento.
Puedes usarla para almacenar música como quieras.
Dado que la biblioteca está escrita en JavaScript, puede recibir / enviar / trabajar con canciones en el navegador y no usar el código del servidor en absoluto. En algunos casos, puede ser muy conveniente.
Cuando crea una instancia del nodo, puede pasar las opciones a continuación. Aquí solo se describen opciones específicas de esta biblioteca, sin considerar las opciones de las clases de los padres.
{objeto} [música] - sección que responde para la configuración de la música.
{Número} [Music.Similarity = 0.91] - Número de 0 a 1 que indica cómo deben ser los títulos de canciones similares, para considerarlos igual.
{Número | String} [Music.audioheadersmaxSize = "180kb"] - Tamaño máximo de encabezados de audio.
{Número | String} [Music.CoverHeadersMaxSize = "5kb"] - Tamaño máximo de encabezados de portada.
{Número} [Music.FindingStringMinLength = 4] - Símbolos mínimos para encontrar canciones.
{Número} [Music.FindingLimit = 200] - Canciones para encontrar el tamaño máximo de la lista de resultados.
{Número | String} [Music.RelEvancTime = "14d"] - ¿Cuánto tiempo tiene una canción existente con precedencia sobre recién agregado?
{boolean} [music.preparetitle = true] - Prepare el título antes de la adición o no. La preparación significa llevar el título a una vista general.
{boolean} [music.preparecover = true] - Prepare la portada antes de la adición o no. La preparación significa llevar el tamaño y la calidad de la imagen a los valores correctos.
{Integer} [music.coverquality = 80] - Calidad de portada preparada de 0 a 100. Funciona solo cuando Music.PrepareCover es verdadero.
{Integer} [music.coverminsize = 200] - tamaño mínimo de cubierta en PX. Funciona solo cuando Music.PrepareCover es cierto.
{Integer} [Music.CoverMaxSize = 500] - Tamaño máximo de cubierta en PX. Funciona solo cuando Music.PrepareCover es cierto.
{Número | String} [Music.CoverMaxFilesize = "110kb"] - Tamaño máximo del archivo de portada. Funciona solo cuando Music.PrepareCover es cierto.
{Número | String} [task.CleanupMusicInterval = "1m"] - Intervalo de tarea de limpieza de música.
async client.prototype.addsong () : agregue el archivo a la red.
Async Client.prototype.getSong () - Obtenga la información principal de la canción.
Async Client.prototype.getSonginfo () - Obtenga la canción completa información.
async client.prototype.findsonongs () - Encuentra canciones del partido.
Async Client.prototype.findartistsongs () - Encuentra canciones del nombre del artista.
Async Client.prototype.getSongaudiolink () - Obtenga el enlace del archivo de audio de la canción.
Async Client.prototype.getSongCoverLink () - Obtenga el enlace del archivo de portada de la canción.
Async Client.prototype.getSongaudiotObuffer () : descargue el archivo de audio de la canción y devuelva el búfer.
Async Client.prototype.getSongCoverToBuffer () : descargue el archivo de portada de la canción y devuelva el búfer.
Async Client.prototype.getSongaudioTopath () : descargue el archivo de audio de la canción y escríbelo en la ruta especificada.
Async Client.prototype.getSongCovertoPath () : descargue el archivo de portada de la canción y escríbelo en la ruta especificada.
Async Client.prototype.getSongaudioToblob () : descargue el archivo de audio de la canción y devuelva el blob. Solo para el cliente del navegador.
Async Client.prototype.getSongCovertoBlob () : descargue el archivo de portada de la canción y devuelva el blob. Solo para el cliente del navegador.
async client.prototype.removesong () - Elimina la canción.
Client.prototype.CreateEcEcedSongaudiolink () - Realice un enlace de archivo de audio solicitado. Esto es conveniente si necesita obtener el enlace sin realizar operaciones asincrónicas en este momento.
Client.prototype.CreateRequestedSongCoverLink () - Realice un enlace de archivo de portada solicitado. Esto es conveniente si necesita obtener el enlace sin realizar operaciones asincrónicas en este momento.
Si es necesario, tiene la oportunidad de exportar canciones de un servidor a otro. Hay dos opciones:
Copie todos los archivos de proyecto al segundo servidor. Es conveniente y funciona en el momento actual, porque el nodo puede reconfigurar toda la información en una nueva dirección. Pero no hay garantía de que esto funcione en el futuro.
Use la función de exportación de canciones: ejecutar node.exportSongs()
o a través de la línea de comando como museria -a exportSongs -n 2.2.2.2:2079
. Aquí, debe agregar el primer servidor a la lista de fideicomiso de la segunda para transferir todas las canciones, incluidas aquellas con prioridad 1. Sin esto, el nodo requerirá una solución CaptCha y el archivo no se agregará. Use la opción Network.trustList de la biblioteca de propagación.
Si enfrenta un error o tiene una idea de cómo mejorar la biblioteca, cree un problema en GitHub. Para arreglar algo o agregar un nuevo código usted mismo, bifurcarse la biblioteca, hacer cambios y crear una solicitud de extracción a la rama maestra. No te olvides de las pruebas en este caso. También puede unirse al proyecto en GitHub.