Museria是基于可扩展,Storacle和Metastocle的分散音乐存储。
这里有一篇文章有解释。
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而不是窗口。准备好的文件名是museria.client.js 。
查看可扩展库的描述。您只需要将任何地方都能传播到Museria 。
库的机制与Storacle非常相似。唯一的区别是文件的关键是歌曲的名称,而不是哈希。同样,不考虑全部冠军赛的独特歌曲,而是选项中巧合的百分比。
目前仅支持MP3格式。标签是基于Node-id3的ID3。存储歌曲需要TPE1和TIT2标签。使用utils设置标签时,可以将setter fulltitle用作tpe1 -tit2 。它必须是utils.issongtitle()函数的有效组合。此外,网络可能有其自身的封面尺寸要求。可以添加到一个节点的歌曲的数量也可以配置。
查看Storacle要求和Metastocle要求。
通过添加歌曲,您可以指示是否对其进行调整。受控选项负责。默认情况下,它是错误的。节制模式意味着您要照顾歌曲的合规性和质量。位于存储中的相应歌曲的文件将被新的歌曲替换为没有检查的新歌曲。在此模式下添加歌曲需要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} [音乐] - 为音乐设置做出响应的部分。
{number} [music.simurality = 0.91] - 从0到1的数字指示歌曲标题的相似性,以便将它们视为相同。
{number | string} [music.audioheadersmaxsize =“ 180kb”] - 最大音频标头大小。
{number | String} [Music.CoverHeadersMaxSize =“ 5KB”] - 最大盖标头大小。
{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。仅当Music.PrepareCover为真时才有效。
{Integer} [music.coverminsize = 200] - PX中的最小盖尺寸。它仅在Music.preparecover为真时起作用。
{Integer} [music.covermaxsize = 500] - PX中的最大盖尺寸。它仅在Music.preparecover为真时起作用。
{number | String} [Music.CoverMaxFilesize =“ 110KB”] - 最大封面文件大小。它仅在Music.preparecover为真时起作用。
{number | string} [task.cleanupmusicinterval =“ 1m”] - 音乐清理任务间隔。
async client.prototype.addsong() - 将文件添加到网络中。
async client.prototype.getsong() - 获取歌曲主要信息。
async client.protype.getsonginfo() - 获取歌曲的完整信息。
async client.prototype.findsongs() - 通过比赛查找歌曲。
async client.protype.findartistsongs() - 以艺术家的名字查找歌曲。
async client.protype.getsongaudiolink() - 获取歌曲音频文件链接。
async client.protype.getsongcoverlink() - 获取歌曲封面文件链接。
async client.prototype.getsongodiotobuffer() - 下载歌曲音频文件并返回缓冲区。
async client.protype.getsongcovertobuffer() - 下载歌曲封面文件并返回缓冲区。
async client.protype.getsongodopath() - 下载歌曲音频文件并将其写入指定的路径。
async client.protype.getsongcovertopath() - 下载歌曲封面文件并将其写入指定的路径。
async client.protype.getsongodiotoblob() - 下载歌曲音频文件并返回blob。仅适用于浏览器客户端。
async client.prototype.getsongcovertoblob() - 下载歌曲封面文件并返回斑点。仅适用于浏览器客户端。
async client.prototype.removesong() - 删除歌曲。
Client.Prototype.CreaterEquestedsongaudiolink() - confeate tounde of Audio File链接。如果您目前需要在不进行任何异步操作的情况下获得链接,这很方便。
client.prototype.createrequestedsongcoverlink() - 请求的封面文件链接。如果您目前需要在不进行任何异步操作的情况下获得链接,这很方便。
如有必要,您有机会将歌曲从一台服务器导出到另一台服务器。有两个选择:
将所有项目文件复制到第二服务器。它很方便并且在当前时刻起作用,因为节点能够将所有信息重新配置为新地址。但是不能保证这将来会起作用。
使用歌曲导出功能:运行node.exportSongs()
方法或通过命令行作为museria -a exportSongs -n 2.2.2.2:2079
。在这里,您应该将第一台服务器添加到第二个传输所有歌曲的信任列表中,包括具有优先级1的歌曲。没有此,节点将需要验证码解决方案,并且不会添加文件。使用选项网络。
如果您面对错误或有想法改进库,请在Github上创建问题。为了修复某些内容或自己添加新代码,请将库分叉,进行更改并向主分支创建拉动请求。在这种情况下,不要忘记测试。您也可以在Github上加入该项目。