Roteador MIDI no Raspberry Pi

Eu quero falar sobre como resolver um problema que provavelmente é familiar para os fãs de sintetizadores de hardware.


O que devo fazer se quiser encaixar um controlador e sintetizador MIDI, mas um deles possui apenas um conector USB e nenhum MIDI? Além disso, por razões óbvias, quero fazer tudo isso sem usar um computador.


Pesquisei na Internet várias vezes em busca de um dispositivo para isso, mas não encontrei nada, exceto alguns links para dois dispositivos de pequena circulação por muito dinheiro, que já foram descontinuados.


Em algum momento, ocorreu-me: você pode pegar o Raspberry Pi e fazer tudo nele - este é um computador real, e nele são feitas coisas facilmente.


Provavelmente será fraco para o processamento total do som, mas o fluxo de mensagens MIDI já deve ser bombeado.


[A propósito, existe um processador de efeitos sonoros para o Raspberry Pi , mas requer o modelo mais recente do Raspberry Pi, que é muito mais caro, além de um escudo adicional, que também não é barato, e decidi não me incomodar].


Mal disse o que fez. O Raspberry Pi obteve o primeiro modelo e montou um protótipo em funcionamento em algumas noites. Em poucas palavras, como funciona.


ALSA Midi


No começo, planejei pegar o PureData e escrever para ele um patch simples que transfere mensagens midi de uma porta para outra.


Mas quando comecei a usar MIDI no Linux, encontrei uma abordagem muito mais simples.


O Linux possui um sistema de entrada / saída de som padrão - ALSA. Ele suporta fluxos de áudio e MIDI.


Para que um programa receba mensagens MIDI através do ALSA, primeiro você precisa conectá-lo à fonte dessas mensagens. Mas é exatamente isso que precisamos para resolver esse problema! Sem pensar duas vezes, joguei fora o PureData e fiz tudo com as ferramentas nativas da ALSA.


Aqui está o resultado.


aconnect


Quando você conecta um dispositivo MIDI ao sistema, ele aparece nos dispositivos ALSA e você pode executar várias operações com comandos padrão. Estamos interessados ​​na equipe de aconnect , que apenas faz a conexão-desconexão de portas. Documentação detalhada pode ser encontrada aqui .


Na realidade, precisamos apenas de duas operações: exibir uma lista de dispositivos disponíveis e conectar um dispositivo a outro:


 #   MIDI-,    aconnect -l #     Arturia Keystep  Xio aconnect 'Arturia KeyStep 32' 'Xio' 

Eu envolvi esses comandos com scripts auto-start systemd e os configurei para iniciar constantemente em um loop, você pode ver como eu fiz isso aqui .


Alternativas


Se você ainda precisar processar de alguma forma o fluxo MIDI antes de enviá-lo para a saída, poderá usar várias opções:



Se você souber mais opções - envie.


Upd: Resumo


Após um mês e meio de experimentos, sumario.


Como resultado, a prática mostrou que isso não importa para a transferência de notas - as notas geralmente saem e pulam.


Para transmissão de relógio, é mais ou menos normal - na sincronização do arpejador do sintetizador controlado com o ritmo principal dos batentes, eu não ouço.


Mas para a transferência de mensagens do controlador, parece ser ideal.
Agora você pode conectar o Launch Control XL a qualquer sintaxe.


Referências


Quando estudei essa questão pela última vez por algum motivo, não consegui encontrar nada.


Desta vez, houve muitas coisas, vou postar links aqui para que você não repita meu caminho se o mesmo problema surgir.


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


All Articles