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.clientspreadable ชื่อไฟล์ที่เตรียมไว้คือ Museria.client.js
ดูคำอธิบายของไลบรารีที่แพร่กระจายได้ คุณจะต้องเปลี่ยนคำ ที่แพร่กระจาย ได้ทุกที่เป็น Museria
กลไกของห้องสมุดนั้นคล้ายกับ Storacle มาก ความแตกต่างเพียงอย่างเดียวคือกุญแจสู่ไฟล์คือชื่อของเพลงไม่ใช่แฮช นอกจากนี้เพลงที่ไม่ซ้ำกันนั้นไม่ได้มีการจับคู่ชื่อเต็ม แต่เปอร์เซ็นต์ของความบังเอิญที่ตั้งไว้ในตัวเลือก
ปัจจุบันรองรับรูปแบบ MP3 เท่านั้น แท็กคือ ID3 ซึ่งขึ้นอยู่กับ Node-ID3 ต้องใช้แท็ก TPE1 และ TIT2 เพื่อจัดเก็บเพลง คุณสามารถใช้ Setter FullTitle เป็น TPE1 - TIT2 เมื่อคุณตั้งค่าแท็กโดยใช้ UTILS มันจะต้องเป็นการรวมกันที่ถูกต้องสำหรับฟังก์ชัน 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.similarity = 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"] - เพลงที่มีอยู่นั้นมีความสำคัญมากกว่าการเพิ่มใหม่
{บูลีน} [music.preparetitle = true] - เตรียมชื่อก่อนเพิ่มเติมหรือไม่ การเตรียมการหมายถึงการนำชื่อมาสู่มุมมองทั่วไป
{บูลีน} [music.preprepover = true] - เตรียมหน้าปกก่อนเพิ่มหรือไม่ การเตรียมการหมายถึงการนำขนาดและคุณภาพของภาพมาใช้กับค่าที่เหมาะสม
{จำนวนเต็ม} [music.coverquality = 80] - เตรียมคุณภาพหน้าปกตั้งแต่ 0 ถึง 100 มันใช้งานได้เฉพาะเมื่อ music.preprepover เป็นจริง
{จำนวนเต็ม} [music.coverminsize = 200] - ขนาดฝาปิดขั้นต่ำใน PX มันใช้งานได้เฉพาะเมื่อ music.preprepover เป็นจริง
{Integer} [Music.CoverMaxSize = 500] - ขนาดฝาครอบสูงสุดใน PX มันใช้งานได้เฉพาะเมื่อ music.preprepover เป็นจริง
{number | string} [music.covermaxfilesize = "110kb"] - ขนาดไฟล์ปกสูงสุด มันใช้งานได้เฉพาะเมื่อ music.preprepover เป็นจริง
{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 () - сreateลิงค์ไฟล์เสียงที่ร้องขอ สิ่งนี้สะดวกถ้าคุณต้องการรับลิงค์โดยไม่ต้องดำเนินการแบบอะซิงโครนัสในขณะนี้
client.prototype.createRequestedSongCoverlink () - сreateลิงค์ไฟล์ปกที่ร้องขอ สิ่งนี้สะดวกถ้าคุณต้องการรับลิงค์โดยไม่ต้องดำเนินการแบบอะซิงโครนัสในขณะนี้
หากจำเป็นคุณมีโอกาสส่งออกเพลงจากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์ มีสองตัวเลือก:
คัดลอกไฟล์โครงการทั้งหมดไปยังเซิร์ฟเวอร์ที่สอง มันสะดวกและทำงานในขณะนี้เนื่องจากโหนดสามารถกำหนดค่าข้อมูลทั้งหมดเป็นที่อยู่ใหม่ได้ แต่ไม่มีการรับประกันว่าสิ่งนี้จะทำงานในอนาคต
ใช้คุณลักษณะการส่งออกเพลง: run node.exportSongs()
วิธีหรือผ่านบรรทัดคำสั่งเป็น museria -a exportSongs -n 2.2.2.2:2079
ที่นี่คุณควรเพิ่มเซิร์ฟเวอร์แรกลงในรายการความน่าเชื่อถือของเกมที่สองเพื่อถ่ายโอนเพลงทั้งหมดรวมถึงเพลงที่มีลำดับความสำคัญ 1 หากไม่มีสิ่งนี้โหนดจะต้องใช้โซลูชัน Captcha และจะไม่เพิ่มไฟล์ ใช้ Network Option.TrustList ของไลบรารีที่แพร่กระจายได้
หากคุณเผชิญกับข้อผิดพลาดหรือมีความคิดวิธีปรับปรุงห้องสมุดให้สร้างปัญหาเกี่ยวกับ GitHub เพื่อแก้ไขบางสิ่งหรือเพิ่มรหัสใหม่ด้วยตัวคุณเองให้แยกไลบรารีทำการเปลี่ยนแปลงและสร้างคำขอดึงไปยังสาขาหลัก อย่าลืมเกี่ยวกับการทดสอบในกรณีนี้ นอกจากนี้คุณสามารถเข้าร่วมโครงการใน GitHub