Ir para o conteúdo principal

Como criar música usando inteligência artificial e aprendizado de máquina



Aprenda a criar música com inteligência artificial! Redes neurais recorrentes para criação de música!

Arquivo de dados MAESTRO e Wave2Midi2Wave
Depois de examinar essas fontes, encontrei um documento de pesquisa que apresenta um novo conjunto de dados chamado MAESTRO (que significa MIDI e áudio editado para trilhas e organização síncronas). Ele também cria a nova arquitetura Wave2Midi2Wave, que basicamente combina três algoritmos de última geração e os treina em um arquivo de dados MAESTRO.

MIDI é basicamente um padrão técnico que inclui muitos protocolos para computadores com diferentes tipos de dispositivos de áudio. Isso é útil porque as informações transmitidas incluem informações de tom, afinação, velocidade e andamento.

A principal razão pela qual esse novo conjunto de dados é tão importante é que ele contém muito mais dados do que qualquer conjunto de dados anterior. Para colocar em perspectiva, o arquivo de dados MAESTRO contém 172 horas de transcrições de áudio e MIDI. O arquivo de dados do MAPS contém apenas 17,9 horas e o arquivo de dados MusicNet apenas 15,3 horas.

Como mencionei anteriormente, o Wave2Midi2Wave é basicamente uma combinação de três modelos diferentes de última geração e cada um executa uma tarefa diferente. Primeiro, o Wave2Midi é usado para traduzir o som em uma representação simbólica (MIDI). Em seguida, parte da rede Midi cria novo conteúdo. Tudo isso é sintetizado pelo Midi2Wave para produzir som realista.

A primeira rede do Wave2Midi2Wave usa uma arquitetura de ponta chamada Onsets and Frames, que converte automaticamente suas gravações em notas representadas em MIDI. Então, se você estava improvisando, sabia exatamente o que estava tocando!

Usando CNN e LSTM, os cientistas foram capazes de "prever o início da afinação e, em seguida, usar essas previsões para ajustar as previsões da afinação do quadro". Isso significa essencialmente que uma rede neural no modelo é usada para prever quando uma nota é tocada (ou seja, início). E outra rede neural prevê quanto tempo uma nota é tocada (cada quadro que está ativo).

Midi: Music Transformer
Para a segunda rede no Wave2Midi2Wave, um tipo especial de transformador é usado para gerar novas seqüências de música com coerência a longo prazo. A saída de rede faz um sentido muito mais estrutural em comparação com outras redes neurais.

Em um transformador convencional, é dada atenção à modelagem dos relacionamentos entre as palavras, porque nas sentenças o significado de uma palavra se baseia não apenas nas palavras que a precederam, mas no contexto de toda a sentença.
Os transformadores agregam informações de todas as outras partes da rede e geram uma representação para cada palavra com base em todo o contexto. Esse processo é repetido para que cada palavra gere novas representações.

O ponto é que podemos usar transformadores para atribuir informações a diferentes partes de dados com base no contexto de toda a rede. Voltemos ao tópico da geração musical.
Um problema com o Transformer original é que ele depende de posições absolutas para sua própria atenção. Quando se aplica à música, os Transformers lutam com distâncias, ordem e repetição. Usando atenção relativa, o modelo de transformação musical pode se concentrar em elementos relacionais e gerar seqüências além do que foi mostrado nos exemplos de treinamento.

Midi2Wave: WaveNet
A última parte da rede pega o modelo WaveNet e o treina em um conjunto de dados de geração de música que literalmente soa como uma gravação. WaveNet é uma arquitetura de modelo baseada no PixelCNN e especializada em síntese de áudio.
A arquitetura usa camadas convolucionais. Como os encadeamentos não usam conexões recorrentes como na RNN, o que significa que geralmente é muito mais fácil treinar que a RNN. Um problema, no entanto, é que são necessárias toneladas de camadas ou filtros super grandes para aumentar o campo perceptivo (a quantidade de dados que um modelo pode cobrir), o que aumenta os custos computacionais.

Threads de expansão são usados ​​para ignorar. Isso basicamente significa que os filtros podem ser aplicados em uma área maior se certos valores de entrada forem ignorados. Você obterá quase o mesmo efeito que um filtro maior se o estender com zeros, mas é muito mais eficiente.

O treinamento WaveNet, o modelo mais moderno para síntese de fala, no conjunto de dados MAESTRO, traz alguns resultados incríveis, com os quais gradualmente os apresentarei a exemplos específicos.

Komentáře

Publicações populares deste blog

Rokytnice nad Jizerou, Lysa hora

Rokytnice nad Jizerou (em alemão Rochlitz an der Iser) é uma cidade e resort de montanha nas montanhas gigantes do oeste. Está localizado na região de Liberec, no distrito de Semily, no vale alongado do riacho Huťský, entre os maciços de Stráž (782 m), Čertova hora (1022 m) e Lysá hora (1344 m) e ao longo da margem esquerda (leste) do rio Jizera. Existem cerca de 2 habitantes.

Montanhas gigantes, montanhas Jizera, paraíso boêmio

Caros visitantes do servidor PetrPikora.com, páginas dedicadas às Montanhas Gigantes, Montanhas Jizera e Bohemian Paradise agora podem ser encontradas no novo domínio tcheco PetrPikora.czobrigado. Por um tempo limitado, as postagens mais antigas estarão disponíveis nos dois domínios ao mesmo tempo.

Calculadora simples de código Python

Este simples programa Python pede ao usuário para selecionar a operação desejada. As opções de seleção 1, 2, 3 e 4 são válidas. Dois se ... elif ... else números são selecionados e a ramificação é usada para executar uma seção específica do programa. As funções add (), subtrair (), multiplicar () e dividir () definidas pelo usuário executam as operações apropriadas.
# Esta função adiciona dois números def add (x, y): retorna x + y # Esta função subtrai dois números def subtrai (x, y): retorna x - y # Esta função multiplica dois númerosdef multiplica ( x, y): return x * y # Esta função divide dois númerosdefinal de divisão (x, y): retorna x / y print ("Selecionar operação.") print ("1.Add") print ("2.Subtract") print ("3.Multiply")