Museria - um repositório descentralizado de música

imagem

Certa vez, reuni-me para escrever um aplicativo para selecionar músicas para mim e ouvir em casa / na rua / treinamento etc. E para que tudo isso funcione em um fluxo, com o mínimo de minha participação. Ele criou a arquitetura, esboçou um protótipo e acabou com um "pequeno problema".

E não está claro onde obter os arquivos de música. Nesse momento, o VKontakte já havia fechado sua API, tudo estava surdo em grandes portais de música, até as músicas eram dadas em pedaços para não serem analisadas. Havia apenas alguns sites de um dia separados, com toneladas de publicidade e todo tipo de lixo, todos os tipos de programas de captura duvidosa e outras opções "sujas". Em geral, nem uma única decisão válida válida. Obviamente, você pode comprar uma assinatura de algumas músicas do Yandex ou similares. Mas, novamente, não há API pública aberta e você não tem acesso à música programaticamente. Várias grandes empresas, de fato, restringiram o restante de seu acesso à música. Por que isso aconteceu? Indo mais fundo, ficou claro que o principal problema dos direitos autorais. A solução atual na forma de assinaturas atende a muitos autores comerciais de obras musicais e a essas mesmas empresas.Ao mesmo tempo, músicas sem fins lucrativos e shareware também se enquadram na lista geral. Você paga por tudo ou não ouve nada.

E comecei a pensar no que fazer com tudo isso. Como pode ser organizada a distribuição gratuita de música? O que eu faria se estivesse criando música e gostaria de ganhar dinheiro com isso? Gostaria se minhas músicas começassem a ser distribuídas de forma pirata? O que é uma solução alternativa?

Como resultado, havia dois problemas principais que precisam ser resolvidos:

  • Organização de distribuição gratuita de música por métodos convenientes para a maioria das pessoas, incluindo software.
  • Oferecer alternativas aos criadores de música por dinheiro

Repositório global de músicas descentralizadas


Inicialmente, tentei encontrar soluções existentes e criar tudo com base nisso. Depois de algum tempo pesquisando, o ipfs gostou primeiro . Comecei a implementar minha ideia, mas depois de um tempo encontrei vários problemas críticos nessa solução:

  • Ipfs - armazenamento para tudo e qualquer coisa. Aqui, imagens, músicas e vídeos, e qualquer outra coisa. Em geral, um grande "lixo" planetário. Portanto, quando você inicia seu nó, você recebe imediatamente uma carga enorme. O carro apenas se contorce de dor.
  • - «». , , , , . , . , , ipfs .
  • ( ), . , , . , , , . .

Ainda havia muitos problemas menores, a impressão era então inequívoca: isso não pode ser usado para o projeto. Continuei procurando o repositório, explorei várias opções, mas ainda não encontrei nada adequado.

No final, decidi que valia a pena tentar escrever um armazenamento descentralizado. Não pretenda ser interplanetário, mas resolverá uma tarefa específica.

Isto é como barrar , stOracle , metastocle , museria , museria global acabou .

expansível- Esta é a camada principal, a mais baixa, que permite combinar nós em uma rede. Ele contém um algoritmo que até agora parcialmente implementei com base em algum lugar em 10.000 servidores. A versão completa do algoritmo é muito mais difícil de implementar e exigiria alguns meses adicionais (talvez mais).

Em detalhes, não descreverei o que pode ser distribuído neste artigo, é melhor escrever um artigo separado de alguma forma. Aqui apenas observo alguns recursos:

  • Funciona através de http / https.
  • Você pode criar uma rede separada para uma tarefa específica, o que reduzirá significativamente a carga em cada projeto individual do que se todos estivessem na mesma rede.
  • Inicialmente, um mecanismo com timeouts e outras pequenas coisas foi pensado. E isso funciona para todos os métodos no cliente e no nó. Você pode gerenciar de maneira flexível as configurações do seu aplicativo.
  • nodejs. . «», . : , , , ...

storacle é uma camada herdada da capacidade de expansão que permite armazenar arquivos na rede. Cada arquivo possui seu próprio hash de acordo com o conteúdo, pelo qual ele pode ser obtido posteriormente. Os arquivos não são divididos em blocos, mas são armazenados na sua totalidade.

metastocle - uma camada herdada da capacidade de expansão, que permite armazenar dados na rede, mas não arquivos. A interface é semelhante ao banco de dados nosql. Você pode, por exemplo, adicionar um arquivo ao armazenamento, obter seu hash e gravá-lo no metastocle com referência a algo.

museria - herdada de storacle e metastocle. Essa camada é diretamente responsável pelo armazenamento de música. O repositório funciona apenas com arquivos mp3 e tags id3.

Como a "chave" da música, seu nome completo é usado no formato Artista (TPE1) - Título (TIT2) . Por exemplo:

  • Brimstone — The Burden
  • Hi-rez — Lost My Way (feat. Emilio Rojas, Dani Devinci)

Você pode descobrir, tanto quanto possível, como os nomes das músicas são formados aqui . É necessário olhar para a função utils.beautifySongTitle () .

Uma correspondência de chave é uma porcentagem definida nas configurações do nó. Por exemplo, um valor de 0,85 significa que, se a função de comparação de teclas (nomes de músicas) encontrar uma similaridade de mais de 85%, essa será a mesma música.

Um algoritmo para determinar a similaridade está no mesmo lugar, na função utils.getSongSimilarity () .

Capa da música, para recuperação posterior, também anexada via tags ( APIC ). Os utils têm todos os métodos necessários para receber e processar tags.

Um exemplo de trabalho com o repositório por meio do cliente pode ser encontrado em leia-me .
. , .

museria-global é um repositório git já configurado para lançar seu próprio nó na rede global de música. Clone npm i && npm start e é isso. Você pode configurar com mais detalhes, executar na janela de encaixe, etc. Os detalhes estão no github .

Quando o repositório é atualizado, você precisa atualizar seu site. Se o número da versão principal ou secundária for alterado, essa ação será necessária, caso contrário, os nós antigos serão ignorados pela rede.

Você pode trabalhar com músicas manual e programaticamente. Cada nó inicia o servidor para várias tarefas. Inclusive, quando você visita o ponto de extremidade padrão, obtém uma interface para trabalhar com música. Por exemplo, você pode ir para o nó raiz(o link pode não ser relevante posteriormente, os nós de entrada também podem ser obtidos por telegrama ou ver atualizações no github).

Assim, você pode pesquisar e fazer upload de músicas para o repositório. O download de músicas pode ocorrer em dois modos: normal e moderado. O segundo modo significa que o trabalho é realizado por uma pessoa, não por um programa. E se você marcar esta caixa ao adicionar, precisará resolver o captcha. As músicas podem ser adicionadas com as prioridades -1, 0 ou 1. A prioridade 1 só pode ser definida no modo moderado. São necessárias prioridades para tornar o repositório mais eficaz na decisão do que fazer quando você tenta substituir uma música existente por uma nova. Quanto maior a prioridade, maior a probabilidade de substituir o arquivo existente. Isso ajuda a combater o spam e aumenta a qualidade das músicas baixadas.

Se você começar a adicionar músicas ao repositório, tente anexar imagens (capa), embora este campo seja opcional. Em 99% dos casos, as primeiras fotos no Google por nomes de músicas são capas de álbuns.

Como tecnicamente os arquivos são adicionados em poucas palavras:

  • O cliente recebe o endereço de um nó livre, que por algum tempo se tornará o coordenador.
  • A função de adicionar uma música é acionada (por uma pessoa ou por um código); é feita uma solicitação para adicionar um coordenador ao ponto final.
  • O coordenador calcula quantas duplicatas precisam ser salvas (parâmetro configurável).
  • Os nós mais adequados para salvar são pesquisados.
  • O arquivo vai diretamente para esses nós.

Como tecnicamente os arquivos são recebidos:
  • O cliente recebe o endereço de um nó livre, que por algum tempo se tornará o coordenador.
  • A função de receber a música é acionada (por uma pessoa ou por um código), uma solicitação é recebida para levar um coordenador ao ponto final.
  • . , , .
  • , .


Sempre me interessei pela questão: como avaliar objetivamente o valor de muitos trabalhos criativos? Por que, por exemplo, uma pessoa expõe seu álbum de música por US $ 10? Ou por US $ 20 ou US $ 100. Onde está o algoritmo? Quando, por exemplo, estamos falando de algum tipo de produto físico, ou mesmo de muitos tipos de serviços, podemos pelo menos calcular o preço de custo e prosseguir com isso.

Ok, vamos colocar $ 10. É realmente eficaz? Suponha que eu escutei um álbum em algum lugar ou uma música de lá e decidi agradecer. Mas, de acordo com meus sentimentos e minhas próprias habilidades, US $ 3 é meu limite. E como estar aqui? Provavelmente eu simplesmente não farei nada, como a maioria das pessoas.

Ao definir um preço fixo para o trabalho criativo, você simplesmente se limita, não permite que um grande número de pessoas lhe envie menos dinheiro, o que no total pode ser mais impressionante do que aqueles que compram pelo preço que você definir. Parece-me que a criatividade é exatamente a área em que as doações devem ser direcionadas primeiro. Para fazer isso, você precisa:

  • Ensinar as pessoas a dar graças dessa maneira. Os próprios criadores de conteúdo devem mostrar claramente que gostariam de receber doações, adicionar em todos os lugares links para diferentes métodos de pagamento etc.
  • . , , .

    , :

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

    , :

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

    .

    museria , , / . . , , .

, , ,


  • , , , . museria , . , , , .
  • - : , , ...
  • , . , .
  • - . , , .

O projeto está agora em sua infância. Uma rede de teste está em execução, os nós geralmente podem ser reinicializados, exigir atualizações etc. Na ausência de problemas críticos durante o período de avaliação, a mesma rede é transformada na principal.

Veja informações sobre o site de fora: o número de músicas, espaço livre, etc., você pode clicar no tipo de link http://node-address/statusou em Meus contatos:http://node-address/status?pretty




All Articles