Museria - это децентрализованное музыкальное хранилище, основанное на распространяемом, козе и метастокле.
Здесь есть статья с объяснением.
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 ) ;
}
Вы также можете использовать клиент в браузере. Посмотрите на описание распространенной библиотеки. В окне у вас есть window.clientmuseria вместо Window.clients Apreadable . Подготовленное имя файла - museria.client.js .
Посмотрите на описание распространенной библиотеки. Вам нужно только изменить везде распространяемое слово на Museria .
Механизм библиотеки очень похож на копье. Единственное отличие состоит в том, что ключом к файлу является имя песни, а не хеш. Кроме того, уникальная песня считается не полным титульным матчем, а процент совпадения, установленного в опциях.
В настоящее время поддерживается только формат MP3. Теги ID3, основанные на Node-ID3. Теги TPE1 и TIT2 необходимы для хранения песни. Вы можете использовать Setter fulltitle в качестве TPE1 - TIT2, когда вы устанавливаете теги, используя UTIL . Это должна быть допустимая комбинация для функции utils.issongtitle () . Кроме того, сеть может иметь свои собственные требования к размеру покрытия. Количество песен, которые можно добавить в один узел, также настраивается.
Посмотрите на требования к сфотографии и требования к метастоклю.
Добавив песню, вы можете указать, смягчить ли вы ее или нет. Управляемый вариант отвечает за это. По умолчанию это ложно . Режим модерации подразумевает, что вы заботитесь о соответствии и качестве песни. Файл соответствующей песни, расположенной в хранилище, будет заменен новой без проверки. Добавление песен в этом режиме требует подтверждения CAPTCHA.
await client . addSong ( file , { controlled : true } ) ;
Вы также можете указать приоритет вашего файла как -1 , 0 или 1 . По умолчанию это 0 . Если приоритет новой песни выше существующей, то это заменит это без проверки. Если они равны, то само хранение решит, какой из них выбрать. Если меньше, то песня в репозитории останется прежней. В этом случае могут быть обновлены только теги, обложка и другая дополнительная информация. Приоритет 1 может использоваться только в режиме умеренного.
await client . addSong ( file , { priority : - 1 } ) ;
await client . addSong ( file , { priority : 1 , controlled : true } ) ;
Например, мы можем собрать всю музыку на планете вместе в одном месте, но децентрализованным способом с возможностью доступа к ней в любое время.
Вы можете использовать его для хранения музыки, как вам нравится.
Поскольку библиотека написана в JavaScript, вы можете получать / отправлять / работать с песнями в браузере и вообще не использовать код сервера. В некоторых случаях это может быть очень удобно.
Когда вы создаете экземпляр узла, вы можете передать параметры ниже. Здесь описаны только конкретные варианты этой библиотеки без учета вариантов родительских классов.
{Object} [Music] - раздел, который отвечает на настройки музыки.
{number} [music.similality = 0,91] - номер от 0 до 1, указывая, насколько должны быть похожи на песни, чтобы считать их одинаковыми.
{number | string} [music.audioheadersmaxsize = "180KB"] - максимальный размер заголовков аудио.
{number | string} [music.coverheadersmaxsize = "5 кб"] - максимальный размер заголовков обложки.
{number} [music.findingstringminlength = 4] - минимальные символы для поиска песен.
{number} [music.findinglimit = 200] - песни, находящиеся максимальный размер списка результатов.
{number | string} [music.relevancetime = "14d"] - Как долго существующая песня имеет приоритет над новой.
{boolean} [music.preparetitle = true] - Подготовьте заголовок перед добавлением или нет. Подготовка означает привлечение заголовка к общему мнению.
{boolean} [music.preparecover = true] - Подготовьте обложку перед добавлением или нет. Подготовка означает подведение размера и качества изображения до нужных значений.
{integer} [music.coverquality = 80] - Подготовленное качество обложки от 0 до 100. Он работает только тогда, когда музыка.
{integer} [music.coverminsize = 200] - Минимальный размер обложки в px. Это работает только тогда, когда музыка.
{integer} [music.covermaxsize = 500] - максимальный размер покрытия в PX. Это работает только тогда, когда музыка.
{number | string} [music.covermaxfilesize = "110KB"] - максимальный размер файла обложки. Это работает только тогда, когда музыка.
{number | string} [task.cleanupmusicinterval = "1m"] - интервал задачи очистки музыки.
async client.prototype.addsong () - добавить файл в сеть.
Async Client.prototype.getSong () - Получить основную информацию.
async client.prototype.getsonginfo () - Получить песню полную информацию.
Async client.prototype.findsongs () - Найти песни на матче.
Async Client.prototype.findartistsongs () - Найти песни от имени артиста.
async client.prototype.getsongaudiolink () - Получить ссылку на аудиофайл песни.
Async Client.prototype.getSongCoverlink () - Получить ссылку на обложку песни.
Async client.prototype.getsongaudiotobuffer () - Загрузите аудиофайл песни и верните буфер.
Async Client.prototype.getSongCovertoBuffer () - Загрузите файл обложки песни и верните буфер.
Async client.prototype.getsongaudiotopath () - Загрузите аудиофайл песни и напишите его на указанный путь.
Async Client.prototype.getSongCovertoPath () - Загрузите файл обложки песни и напишите его на указанный путь.
Async client.prototype.getsongaudiotoblob () - Загрузите аудиофайл песни и верните Blob. Только для клиента браузера.
Async client.prototype.getsongcovertoblob () - Загрузите файл обложки песни и верните Blob. Только для клиента браузера.
async client.prototype.removesong () - удалить песню.
Client.prototype.createrequestedsongaudiolink () - sreate Запрошенную ссылку на аудиофайл. Это удобно, если вам нужно получить ссылку, не выполняя асинхронных операций в данный момент.
Client.prototype.creater QuaresedsongCoverlink () - Sreate Запрошенную ссылку на файл обложки. Это удобно, если вам нужно получить ссылку, не выполняя асинхронных операций в данный момент.
При необходимости у вас есть возможность экспортировать песни с одного сервера на другой. Есть два варианта:
Скопируйте все файлы проекта на второй сервер. Это удобно и работает в текущий момент, потому что узел способен реконфигурировать всю информацию на новый адрес. Но нет никакой гарантии, что это сработает в будущем.
Используйте функцию экспорта песни: запустить метод node.exportSongs()
или через командную строку в качестве museria -a exportSongs -n 2.2.2.2:2079
. Здесь вы должны добавить первый сервер в список доверия второго, чтобы передавать все песни, в том числе с приоритетом 1. Без этого узел потребует решения CAPTCHA, и файл не будет добавлен. Используйте опционную сеть .
Если вы столкнетесь с ошибкой или имеете представление о том, как улучшить библиотеку, создайте проблему на GitHub. Чтобы что -то исправить или добавить новый код самостоятельно, разделите библиотеку, внесите изменения и создайте запрос на вытягивание в главную филиал. Не забывайте о тестах в этом случае. Также вы можете присоединиться к проекту на GitHub.