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 .
انظر إلى وصف المكتبة القابلة للانتشار. تحتاج فقط إلى تغيير كلمة قابلة للانتشار إلى موسريا .
آلية المكتبة تشبه إلى حد كبير Storacle. الفرق الوحيد هو أن مفتاح الملف هو اسم الأغنية ، وليس التجزئة. أيضًا ، لا تعتبر أغنية فريدة من نوعها مع تطابق العنوان الكامل ، ولكن النسبة المئوية للصدفة المحددة في الخيارات.
حاليا فقط تنسيق mp3 مدعوم. العلامات هي ID3 ، استنادًا إلى Node-ID3. علامات TPE1 و TIT2 مطلوبة لتخزين الأغنية. يمكنك استخدام Setter Fulltitle كـ TPE1 - TIT2 عند تعيين العلامات باستخدام utils . يجب أن يكون مزيجًا صالحًا لوظيفة utils.issongtitle () . أيضًا ، قد يكون للشبكة متطلبات حجم الغلاف الخاصة بها. عدد الأغاني التي يمكن إضافتها إلى عقدة واحدة قابلة للتكوين أيضًا.
انظر إلى متطلبات Storacle ومتطلبات ورم خبيث.
عن طريق إضافة أغنية ، يمكنك الإشارة إلى ما إذا كنت تقوم بتعديلها أم لا. الخيار المتحكم فيه مسؤول عن هذا. بشكل افتراضي ، إنه خطأ . يشير وضع الاعتدال إلى أنك تهتم بمطابقة وجودة الأغنية. سيتم استبدال ملف الأغنية المقابلة الموجودة في التخزين بأخرى جديدة بدون شيكات. تتطلب إضافة الأغاني في هذا الوضع تأكيد 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.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"] - كم من الوقت تتبع الأغنية الموجودة الأسبقية على الإضافة حديثًا.
{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.prototype.getsonginfo () - احصل على معلومات كاملة.
async client.prototype.findsongs () - البحث عن أغاني من قبل المباراة.
async client.prototype.findartistongs () - البحث عن أغاني باسم الفنان.
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.createQusteSongaUdiolink () - сreate رابط ملف صوتي مطلوب. هذا مناسب إذا كنت بحاجة إلى الحصول على الرابط دون القيام بأي عمليات غير متزامنة في الوقت الحالي.
client.prototype.createquestongcoverlink () - сreate رابط ملف تغطية مطلوب. هذا مناسب إذا كنت بحاجة إلى الحصول على الرابط دون القيام بأي عمليات غير متزامنة في الوقت الحالي.
إذا لزم الأمر ، لديك فرصة لتصدير الأغاني من خادم إلى آخر. هناك خياران:
انسخ جميع ملفات المشروع إلى الخادم الثاني. إنه مناسب ويعمل في اللحظة الحالية ، لأن العقدة قادرة على إعادة تكوين جميع المعلومات إلى عنوان جديد. ولكن ليس هناك ما يضمن أن هذا سيعمل في المستقبل.
استخدم ميزة تصدير الأغنية: تشغيل node.exportSongs()
أو عبر سطر الأوامر مثل museria -a exportSongs -n 2.2.2.2:2079
. هنا ، يجب عليك إضافة الخادم الأول إلى قائمة الثقة للثاني لنقل جميع الأغاني ، بما في ذلك تلك ذات الأولوية 1. بدون هذا ، ستتطلب العقدة حل Captcha ولن تتم إضافة الملف. استخدم Option Network.Trustlist من مكتبة Spreadable.
إذا واجهت خطأ أو لديك فكرة عن كيفية تحسين المكتبة ، فقم بإنشاء مشكلة على Github. من أجل إصلاح شيء ما أو إضافة رمز جديد بنفسك ، شوك المكتبة ، وإجراء تغييرات وإنشاء طلب سحب إلى الفرع الرئيسي. لا تنسى الاختبارات في هذه الحالة. كما يمكنك الانضمام إلى المشروع على جيثب.