Composição de Melodias usando redes neurais

  • por

Os alunos Joseildo e Samuel resolveram estudar o uso de redes neurais para compor melodias. O dataset utilizado inicialmente foi composto por 2506 músicas de diversos gêneros; já na segunda versão do dataset optou-se por reduzi-lo para 121 riffs de jazz.

O formato dos arquivos escolhido foi o padrão MIDI. Para o problema de aprendizado foi feito uso do framework Keras, com redes neurais recorrentes bidirecionais. Cada nota musical foi tratada como um vetor próprio, assim pode-se gerar as notas individualmente. Inicialmente foram usados alguns valores aleatórios, e após isso, as próximas notas são geradas baseando-se nos valores anteriores da rede.

Foi desenvolvido um conversor para extrair os dados relevantes dos arquivos MIDI para cada nota musical: Duração, Velocidade, Tempo relativo à nota anterior e Nota.

Todos os arquivos do dataset passaram pelo conversor e sofreram uma normalização: os valores de velocidade que iam de 0 a 127 foram transformados de 0 a 1, e os valores de nota que iam de 0 a 127 foram normalizados de 0 a 24 (valor correspondente a dois oitavos).

Os arquivos foram convertidos com a nossa representação para arquivos de formato MIDI, de forma a possibilitar sua utilização em softwares de composição musical com maior facilidade. Nessa conversão, o atributo velocidade é expandido de volta para seus valores originais entre 0-127 e as notas sofrem um arredondamento para dentro da escala musical.

Dos experimentos descritos abaixo pode-se verificar seus resultados parciais neste link (https://drive.google.com/drive/folders/1XPy568jc8i3A4OiF48LwPVSpF81s0Rlb) , onde os arquivos estão numerados de forma equivalente à esse texto.

saida1.mp3 – Grande repetição de notas: seu início era um pouco diverso, mas logo partia-se para repetição.

saida2.mp3 – Após a redução do dataset, a rede continuava a repetir as notas, mas assim foi feito para ganho de performance e concisão dos dados, mantendo apenas um estilo musical.

saida3.mp3 – Por causa d repetição excessiva de notas foram selecionados uns dos 5 atributos e inserida uma pequena perturbação de 0,01. A seleção do atributo deu-se de forma estocástica. A repetição foi reduzida, no entanto as notas continuaram a soar dissonantes.

saida4.mp3 – Quando o atributo a ser perturbado era o tom da nota, a perturbação passava a assumir um valor de 7 semitons. A justificativa dessa decisão é que esse valor representa uma quinta perfeita – e a maior chance da perturbação gerar um resultado harmonicamente agradável. Os resultados gerados começaram a ter variedade muito maior do que as tentativas anteriores, mas ainda com quantidade significativa de tons dissonantes.

saida5.mp3 – A última alteração foi uma melhoria na conversão da saída da rede para arquivos MIDI: no momento em que o atributo “nota” está sendo expandido (pois estava normalizado de 0 a 1) e convertido para inteiro para respeitar o formato MIDI, o arredondamento que acontece procura arredondar não simplesmente para o valor mais próximo, mas sim para o valor mais próximo que esteja dentro da escala harmônica. Com isso, o resultado tornou-se mais harmônico.

O trabalho foi um início de pesquisas na área por alunos da computação com alguma formação em música e amantes do assunto. O futuro já vem com ideias sobre a base de treinamento, arquitetura da rede e função de erro.

As criações podem ser utilizadas no auxílio para composição de pequenos motifs ou riffs, mas a ideia é montar no futuro uma peça com estruturas musicais tradicionais, utilizando inteligência artificial.