Museria: archiviazione musicale decentralizzata

Museria: archiviazione musicale decentralizzata

Un giorno ho deciso di scrivere un'applicazione per selezionare la musica per me e ascoltarla a casa/per strada/allenamenti, ecc. E così tutto questo funziona in un flusso, con una partecipazione minima da parte mia. Ho ideato un’architettura, abbozzato un prototipo e alla fine mi sono imbattuto in un “piccolo problema”.

E non è chiaro dove trovare i file dei brani stessi. A questo punto VKontakte aveva già chiuso l'API, anche sui grandi portali musicali tutto era disattivato, anche le canzoni venivano distribuite in pezzi per non essere analizzate. Tutto ciò che restava erano alcuni siti individuali sfuggenti con un sacco di pubblicità e ogni sorta di spazzatura, ogni sorta di programmi di cattura dubbi e altre opzioni “sporche”. In generale, non una sola soluzione veramente buona. Ovviamente puoi acquistare un abbonamento ad alcuni brani musicali Yandex o simili. Ma ancora una volta, non esiste alcuna API pubblica aperta da nessuna parte e non hai accesso alla musica in modo programmatico. Diverse grandi aziende hanno sostanzialmente limitato l'accesso di altri alla musica. Perché è successo tutto questo? Scavando più a fondo, divenne chiaro che il problema principale era il copyright. L'attuale soluzione sotto forma di abbonamento è adatta a molti autori di musica commerciale e alle stesse aziende. Allo stesso tempo, anche la musica non commerciale e semicommerciale rientra nell'elenco generale. O paghi tutto o non ascolti niente.

E ho iniziato a pensare a cosa fare con tutto questo. Come organizzare la distribuzione gratuita della musica? Cosa farei se creassi musica da solo e volessi trarne dei soldi? Mi piacerebbe se le mie canzoni fossero piratate? Quale soluzione alternativa esiste comunque?

Di conseguenza, ci sono due problemi principali che devono essere risolti:

  • Organizzazione della distribuzione gratuita di musica utilizzando metodi convenienti per la maggior parte delle persone, incluso il software.
  • Offrire alternative ai creatori di musica per guadagnare denaro

Archiviazione musicale decentralizzata globale

Inizialmente, ho provato a trovare soluzioni esistenti e creare tutto sulla base di questo. Dopo un po' di ricerca, il primo che mi è piaciuto è stato IPFS. Ho iniziato a realizzare la mia idea, ma dopo un po' ho scoperto diversi problemi critici in questa soluzione:

  • Ipfs: spazio di archiviazione per tutto e tutti. Ci sono immagini, musica, video e tutto ciò che desideri. In generale, una "pattumiera" planetaria così grande. Pertanto, quando avvii il tuo nodo, ricevi immediatamente un carico enorme. L'auto si contorce dal dolore.
  • Una sorta di meccanismo di raccolta della “rifiuti” incompiuto. Non so come sia adesso, ma in quel momento, se scrivevi nella configurazione che volevi limitare lo spazio di archiviazione a dieci gigabyte di dati, allora non significava nulla. Lo spazio di archiviazione è cresciuto, ignorando molti parametri di configurazione. Di conseguenza, era necessario disporre di un'enorme riserva di disco rigido finché ipfs non capisse come ripristinare ciò che non è necessario.
  • Al momento dell'utilizzo della libreria (non so come sia adesso), nel client non erano implementati i timeout. Invii una richiesta per ricevere un file e, se non esiste, ti blocchi. Naturalmente, le persone hanno escogitato tutti i tipi di soluzioni alternative che hanno parzialmente risolto il problema, ma queste erano stampelle. Queste cose dovrebbero uscire dagli schemi.

C'erano ancora molti piccoli problemi e l'impressione era chiara: questo non può essere utilizzato per il progetto. Ho continuato a cercare un deposito, esplorando diverse opzioni, ma non ho mai trovato nulla di adatto.

Alla fine, ho deciso che valeva la pena provare a scrivere io stesso uno spazio di archiviazione decentralizzato. Anche se non pretende di essere interplanetario, risolverà un problema specifico.

E così è stato spalmabile, stoccaggio, metastocle, musei, musei-global.

spalmabile - questo è il livello principale, più basso, che ti consente di combinare i nodi in una rete. Contiene un algoritmo che finora ho implementato parzialmente sulla base di circa 10000 server. La versione completa dell’algoritmo è molto più difficile da implementare e richiederebbe diversi mesi aggiuntivi (forse di più).

Non descriverò lo spreadable in dettaglio in questo articolo; è meglio scriverne uno separato un giorno. Qui mi limiterò a notare alcune caratteristiche:

  • Funziona tramite http/https.
  • Puoi creare una rete separata per un'attività specifica, il che ridurrà significativamente il carico su ogni singolo progetto rispetto a se fossero tutti sulla stessa rete.
  • Inizialmente è stato pensato un meccanismo con timeout e altre piccole cose. E questo funziona per tutti i metodi sia nel client che nel node. Puoi gestire in modo flessibile le impostazioni dall'interno della tua applicazione.
  • La libreria è scritta in nodejs. I problemi di prestazioni dello stack sono compensati dalla sua natura decentralizzata. Il carico può essere “distribuito” aumentando il numero di nodi. In cambio, ci sono molti vantaggi: un'enorme comunità, semplicità e facilità d'uso, un client isomorfo, nessuna dipendenza esterna, ecc.

stoccaggio è un livello ereditato da spreadable che consente di archiviare file in rete. Ogni file ha il proprio hash del suo contenuto, che può essere utilizzato per recuperarlo in seguito. I file non sono divisi in blocchi, ma vengono archiviati interamente.

metastocle - un livello ereditato da spreadable, che consente di archiviare dati in rete, ma non file. L'interfaccia è simile a un database Nosql. Puoi, ad esempio, aggiungere un file a storacle, ottenere il suo hash e scriverlo a metastocle con un collegamento a qualcosa.

musei - ereditato da storacolo e metastocolo. Questo livello è direttamente responsabile della memorizzazione della musica. La memoria funziona solo con file mp3 e tag id3.

Come “chiave” della canzone, nella forma viene utilizzato il suo nome completo Artista (TPE1) - Titolo (TIT2). Ad esempio:

  • Zolfo - Il fardello
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Puoi scoprire nel modo più dettagliato possibile come si formano i titoli delle canzoni. qui. Devi guardare la funzione utils.beautifySongTitle().

La percentuale di corrispondenze definita nelle impostazioni del nodo è considerata una corrispondenza. Ad esempio, un valore di 0.85 significa che se la funzione di confronto delle tonalità (nomi dei brani) ha rilevato una somiglianza superiore all'85%, allora si tratta della stessa canzone.

L'algoritmo per determinare la somiglianza è lì, nella funzione utils.getSongSimilarity().

La copertina del brano, per una successiva ricezione, può anche essere attaccata tramite tag (APIC). Le utilità dispongono di tutti i metodi necessari per ricevere ed elaborare i tag.

È possibile trovare un esempio di utilizzo dell'archiviazione tramite un client in readme.

Tutti gli strati precedenti sono autonomi e possono essere utilizzati separatamente come strati inferiori per altri progetti. Ad esempio, c'è già l'idea di creare uno strato per riporre i libri.

musei-global è un repository git già configurato per lanciare il tuo nodo nella rete musicale globale. Clonazione npm i && npm iniziare e praticamente è tutto. Puoi configurarlo in modo più dettagliato, eseguirlo in Docker, ecc. Informazioni dettagliate sono disponibili all'indirizzo githabe.

Quando il repository viene aggiornato, devi aggiornare il tuo node. Se cambia il numero di versione maggiore o minore, questa azione è obbligatoria, altrimenti i vecchi nodi verranno ignorati dalla rete.

Puoi lavorare con i brani manualmente e in modo programmatico. Ogni nodo esegue un server per attività diverse. Inoltre, quando visiti l'endpoint predefinito, riceverai un'interfaccia per lavorare con la musica. Ad esempio, puoi andare a nodo radice (il collegamento potrebbe non essere rilevante in seguito, è possibile ottenere anche i nodi di input telegrammao cercare aggiornamenti su Github).

In questo modo puoi cercare e caricare brani nella memoria. Il caricamento dei brani può avvenire in due modalità: normale e moderata. La seconda modalità significa che il lavoro viene svolto da una persona, non da un programma. E se selezioni questa casella durante l'aggiunta, dovrai risolvere il captcha. I brani possono essere aggiunti con priorità -1, 0 o 1. La priorità 1 può essere impostata solo in modalità moderata. Le priorità sono necessarie affinché l'archiviazione possa decidere in modo più efficace cosa fare quando si tenta di sostituire un brano esistente con uno nuovo. Maggiore è la priorità, maggiore è la probabilità di sovrascrivere un file esistente. Ciò aiuta a combattere lo spam e aumenta la qualità dei brani scaricati.

Se inizi ad aggiungere brani al tuo archivio, prova ad allegare immagini (copertina), sebbene questo campo non sia obbligatorio. Nel 99% dei casi le prime immagini su Google basate sui titoli delle canzoni sono le copertine degli album.

Come avviene tecnicamente l'aggiunta di file, in poche parole:

  • Il client riceve l'indirizzo di un nodo libero, che per un po' diventerà coordinatore.
  • La funzione di aggiunta di una canzone viene attivata (da una persona o da un codice) e viene effettuata una richiesta per aggiungere un coordinatore all'endpoint.
  • Il coordinatore calcola quanti duplicati devono essere archiviati (parametro configurabile).
  • Vengono ricercati i nodi più adatti al salvataggio.
  • Il file va direttamente a questi nodi.

Come tecnicamente vengono ricevuti i file:

  • Il client riceve l'indirizzo di un nodo libero, che per un po' diventerà coordinatore.
  • Viene attivata la funzione di ricezione di una canzone (da parte di una persona o di un codice) e viene effettuata una richiesta per riceverla all'endpoint del coordinatore.
  • Il coordinatore verifica la presenza del collegamento nella cache. Se ce n'è uno e funziona, viene immediatamente restituito al client, altrimenti viene interrogata la disponibilità dei nodi.
  • Il file viene ricevuto dal collegamento, se ne viene trovato uno.

Alternative per i creatori di musica

Sono sempre stato interessato alla domanda: come si può valutare oggettivamente il valore di molte opere creative? Perché, ad esempio, una persona offre il suo album musicale per 10 dollari? O per $ 20 o $ 100. Dov'è l'algoritmo? Quando, ad esempio, parliamo di un prodotto fisico o anche di molti tipi di servizi, possiamo almeno calcolare il costo e procedere da quello.

Ok, diciamo che scommettiamo $10. È molto efficace? Diciamo che ho ascoltato un album da qualche parte o una canzone da lì e ho deciso di mostrare la mia gratitudine. Ma secondo i miei sentimenti e le mie capacità, 3$ è il mio tetto. Quindi cosa dovremmo fare? Molto probabilmente non farò nulla, come la maggior parte delle persone.

Fissando una sorta di prezzo fisso per il lavoro creativo, ti limiti semplicemente, impedendo a un numero maggiore di persone di inviarti meno denaro, il che nel complesso può essere più impressionante di coloro che acquisteranno al prezzo da te stabilito. Mi sembra che la creatività sia proprio l’ambito in cui le donazioni dovrebbero primeggiare. Per fare questo è necessario:

  • Insegna alle persone a ringraziare in questo modo. Gli stessi creatori devono mostrare chiaramente che desiderano ricevere donazioni, aggiungere collegamenti a diversi metodi di pagamento ovunque, ecc.
  • Sono necessari più meccanismi per semplificare e rafforzare questi processi. Ad esempio, crea una sorta di sito Web globale in cui puoi donare per la creatività utilizzando collegamenti protetti da copyright.

    Diciamo che il collegamento è qualcosa del genere:

    http://someartistsdonationsite.site/category/artist?external-info

    Se restringiamo il campo ai musicisti, allora:

    http://someartistsdonationsite.com/music/miyagi?song=blabla

    L'esecutore deve verificare il suo soprannome e allegarlo.

    Stiamo aggiungendo una funzione per generare tale collegamento al client museia e tutti i progetti che utilizzano il repository possono inserire pulsanti di donazione con questi collegamenti accanto alle canzoni sui loro siti web/applicazioni. Gli utenti hanno la possibilità di effettuare una donazione in modo molto semplice e veloce. Naturalmente questo approccio può essere utilizzato in qualsiasi progetto e categoria di creatività, non solo attraverso l'archiviazione.

Perché esattamente hai bisogno di un impianto di archiviazione musicale e come puoi parteciparvi?

  • Se stai lavorando a un progetto legato alla musica o stai pianificando di crearne uno, allora tutto è previsto per questo. Puoi utilizzare museia per archiviare e recuperare brani, aumentando il flusso di brani online. Se allo stesso tempo hai la capacità di sollevare e mantenere almeno un tuo nodo, questo sarà il miglior contributo allo sviluppo della rete.
  • Forse sei pronto per assumere qualche altro ruolo: aiutare con il codice, oppure compilare e moderare il database, distribuire informazioni sul progetto ai tuoi amici, ecc.
  • Forse ti è piaciuta l'idea e sei pronto ad aiutare finanziariamente affinché tutto viva e si sviluppi. Più nodi, più canzoni.
  • Oppure hai semplicemente bisogno di trovare e scaricare una canzone ad un certo punto. Puoi farlo in modo molto semplice, ad esempio, attraverso bot di telegramma.

Il progetto è ora nella fase iniziale. È stata avviata una rete di prova, i nodi potrebbero riavviarsi frequentemente, richiedere aggiornamenti, ecc. Se durante il periodo di valutazione non si verificano problemi critici, questa stessa rete viene trasformata in quella principale.

Puoi visualizzare le informazioni sul nodo dall'esterno: il numero di brani, lo spazio libero, ecc., utilizzando un collegamento come http://node-address/status o http://node-address/status?pretty

I miei contatti:

Fonte: habr.com

Aggiungi un commento