Como tocamos música com redes neurais v 2.0

Oi Habr.

Este post é sobre como trouxemos redes neurais para a vida real. Se você gosta de robótica e engenharia aplicada, ou gosta de neurônios, ou pisca um LED no Arduin, será interessante. No entanto, esta é uma história sobre como montar muitos componentes e tecnologias diferentes em um único todo e criar uma idéia disso. Detalhes sob o corte.

imagem

Há um ano e meio, fizemos um projeto em que usamos redes neurais recorrentes para gerar música. Descreve como foi. Este ano, Eesti Kontsert (a instituição-alvo, o maior organizador de apresentações do país) realizou uma série de shows "Tecnologia e Música" e fomos convidados a fazer uma apresentação nessa série. Somos o grupo MODULSHTEIN (Alexander Zhedelev, Marten Altrov e Alexey Seminikhin) , bem como Alexander Potuzhny, que estava envolvido em engenharia mecânica, e eu, Alexander Tavgen, arquiteto de software da Playtech. Se no projeto anterior tudo aconteceu dentro de uma máquina e os sinais dos modelos foram exibidos em amostras, a idéia deste projeto é trazer os sinais para fora e conectá-los a um instrumento ao vivo. E como usamos modelos para gerar ritmo, o instrumento no qual a máquina tocará é um tambor.

O tambor que usaremos faz parte dos acessórios deixados na apresentação audiovisual do IDEM .

imagem

Uma pequena introdução


A música, como a linguagem, especialmente a linguagem falada, tem uma estrutura temporária. Este é o ritmo, intervalos, dinâmica. Se simularmos uma sequência musical como uma corrente de certos símbolos, então, para simular essa estrutura temporal, redes neurais recorrentes são adequadas. O famoso artigo de Andrej Karpathy é uma ótima introdução aos princípios por trás das redes neurais recorrentes e há ótimos exemplos. Qual é a única rede treinada no código fonte do Linux? Ou um modelo treinado nos discursos de Donald Trump.

O protocolo MIDI é ideal para representar a música como um fluxo de caracteres. Portanto, precisamos converter os sinais MIDI na entrada dos modelos e transformar a saída do modelo novamente em MIDI. E então o projeto Magenta do Google vem em socorro, anunciado em 2016.

Em essência, o Magenta fornece uma interface MIDI para os modelos TensorFlow. As portas MIDI virtuais são criadas para atender chamadas, grosso modo - entrada e saída. Você pode executar várias portas paralelas. Você pode conectar um modelo TensorFlow a cada par de portas. O chamado arquivo de pacote configurável é o ponto de verificação de treinamento e os metadados do gráfico do TensorFlow. Assim, você pode descrever brevemente o processo de interação.

imagem

Eu descrevi isso em detalhes aqui .

Mas se no projeto anterior exibimos sinais MIDI vindos dos modelos para as amostras, desta vez precisamos trazê-los para fora e conectá-los aos motores. Ou seja, tudo pode ser representado de alguma forma assim: Atuadores de microcontroladores em série Tensorflow-Magenta-MIDI. Os três primeiros passos já foram dados e toda a atenção foi dada nos últimos três links.

Antes de pensar em como converter e enviar sinais da máquina, você precisa selecionar um microcontrolador que receba sinais e controle os atuadores. A opção mais fácil é usar uma plataforma compatível com Arduino, embora qualquer controlador baseado em ATMega seja adequado.

O Arduino pode ler Serial via USB, e a tarefa era converter sinais MIDI em protocolo de porta serial. Existe um projeto aberto hairless-midiserial projectgus.imtqy.com/hairless-midiserial , que permite converter MIDI em dispositivos seriais, tanto para entrada quanto para saída. A conveniência do MIDI como um todo é que você pode controlar e conectar dispositivos de maneira muito flexível.

imagem

Bem, você precisa obter as ferramentas e começar a tentar várias opções de design.

O primeiro protótipo teve que ser realizado para avaliar possíveis atrasos e problemas com a sincronização.

O sinal foi para o Arduino, onde, dependendo da altura das notas, foi exibido em diferentes saídas. Para os testes, montei um circuito clássico baseado em MOSFET. O MOSFET é aproximadamente um transistor que permite controlar altas correntes; dando um sinal de controle, você pode abrir e fechar o transistor.

imagem

Bem, que tipo de projeto do Arduino é sem LED piscando. Defino o LED para que, em caso de problemas, entenda onde eles estão, se o sinal do Arduino vai para a entrada MOSFET. Em geral, parecia assim, os gatos realmente gostaram.



Em geral, não houve atrasos significativos e problemas de conexão, mas os problemas de um plano diferente foram esclarecidos. Os solenóides não são adequados para extrair o som do nosso grande tambor, eles não têm a força do impacto. Os próprios solenóides de 5 volts. Foi decidido procurar algo mais poderoso. A próxima opção são os motores usados ​​nas fechaduras dos carros. Eles são poderosos o suficiente, com boa tração e baratos.

imagem

Mas há um ponto. O motor da porta do carro não tem apenas um avanço, mas também um avanço. Para vencê-los, é necessário executar um movimento muito rápido de pausa para frente e para trás, mas, para frente e para trás, você não pode executar apenas um MOSFET, pois é necessário alterar a direção atual do motor ( ponte H ) para que ele se mova nas duas direções, então comprei escudo do motor para Arduino, compatível com Adafruit. Este tipo, apenas em um chip.

imagem

Aqui está a versão já com uma ponte de motor e um motor de uma porta de carro.


E agora sobre mecânica geral


Os LEDs piscando no Arduino são uma coisa, mas tivemos que construir um sistema que tocasse a hora do show. E aqui estão as dificuldades.

  1. Rigidez de um design. Os motores são potentes o suficiente e as montagens nas quais devem ser montados devem suportar vibrações por uma hora.


    imagem

    Tentamos 3 ou 4 opções de design até encontrar uma aceitável. O engate com o bastão não deve ser rígido, pois o bastão deve ter uma recuperação elástica do tambor, e um engate rígido degradará bastante o som. Usamos betonilhas de construção.
  2. A mecânica do próprio impacto. Consistia em movimento rápido para frente, pausa e movimento para trás. Mas qual deve ser o tamanho dos intervalos desse movimento? Isso só pode ser determinado empiricamente. Além disso, os intervalos dependiam do local de fixação do manche, as notas exibidas. Determinamos os intervalos por tentativa e erro. Para deixar claro, a parte do código do Arduino responsável pelos golpes era assim.

    imagem
  3. Todos os motores são diferentes. Os próprios motores possuem acionamento mecânico e, portanto, emitem um ruído bastante perceptível. Mas o ruído se torna muito mais forte se o motor se desviar do eixo do impacto, e isso aumenta o risco de quebra do motor. Dadas as forças de vibração e impacto, repousamos novamente na rigidez da estrutura. Alexander Potuzhny fez muito aqui em termos de melhoria de jogos.
  4. Redefina o controlador contra interferência espúria. Como haverá muitos dispositivos, cabos ao redor e os próprios motores emitem ruído.

Como os motores são movidos pela música, seria possível fazer brinquedos sexuais com isso. Ele encenou sua música favorita, como a Marcha Imperial, e ...

Montagem e ensaio


A montagem final e os ensaios foram realizados no estúdio de música do Teatro Russo da Estônia.

imagem



O problema com os ensaios com uma rede neural também é que a própria rede não é determinística. A interação ocorre no modo de resposta à chamada e cada vez que a rede responder será diferente - portanto, é impossível ensaiar a versão final.

Conceito de música


Para a apresentação, também preparamos um vídeo. Inicialmente, pensamos em controlar o fluxo de vídeo via MIDI também para reproduzir sobreposições e reduzir o vídeo gerado pelo GAN - mas não conseguimos criar um ambiente para a segunda máquina e conectar-se aos modelos. Portanto, o vídeo para cada parte da performance foi pré-renderizado; GAN e gerenciamento de sobreposição foram utilizados. Tudo sincronizado com o midi_clock principal.


Para o live, usei o VDMX5, através do qual o fluxo de vídeo passou.

imagem

Pouco antes da apresentação, eles fizeram uma apresentação na televisão.


E era muito incomum ver pôsteres na sala de concertos da Estônia (isso é como o Teatro Bolshoi de Moscou).

imagem

imagem

Desempenho


A performance em si ocorreu no palco do Sõltumatu Tantsu Lava, este é um pequeno salão (pouco mais de 100 pessoas) no bairro criativo de Telliskivi, no complexo de Vaba Lava. A instalação e configuração de todo o equipamento levou mais de 4 horas. Totalmente conectado já quase à noite.


E já sem luz.


O salão estava cheio, apesar da publicidade tardia. Eu estava do lado do palco e controlava o fluxo de vídeo. O show em si foi um grande sucesso - como o modelo funcionou, como o som e o vídeo foram. A platéia disse que eles foram enviados para a viagem em algum lugar em 10 a 15 minutos. :) Tudo acabou muito atmosférico.

imagem

imagem

imagem

imagem


imagem

www.Audiokinetica.com

Aleksandr Tavgen - solução de TI, desenvolvimento de software
Aleksandr Potužnoi - suporte técnico

Modulshtein:
www.Modulshtein.com

No spotify

Aleksandr Žedeljov tcp FAERSHTEIN - violão, Ableton, sintetizador analógico
Marten Altrov - clarinete, clarinete baixo
Aleksei Semenihhin, também conhecido como DJ Bandit - Fx, Amostras, Arranhões

Source: https://habr.com/ru/post/pt463237/


All Articles