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上加入該項目。