Como fazer um sintetizador conveniente com suas próprias mãos

Quando criança, eu tinha um piano tão real, soviético, 300 kg, gostava de dedilhar e até tocar algo depois de me formar na escola de música. Um piano é legal, autêntico, mas nada prático. E para ser absolutamente direto para a alma, você também precisa de uma bateria, cinco saltos de guitarra, clarinete, cítara e loops de amostra ...



Obviamente, agora não é mais necessário fazer um estúdio de garagem do apartamento por seis salários, basta instalar um editor de música gratuito no PC. Mas tudo isso é desconfortável.

O teclado do PC não é como um instrumento de teclado, aqui não é. Além disso, para ensinar uma criança isso não é de todo adequado. Parece não haver escolha a não ser comprar um sintetizador. Mas as dúvidas ainda me separam.

O que é um sintetizador? Um dispositivo grande com um teclado musical, que em algum lugar deve ocupar um lugar decente. Na qual a acústica está embutida, e ainda tenho um receptor com alto-falantes. Que possui um PC bonito, mas eu tenho um PC bom.

Acontece que, por 40 mil, compro o que já tenho da melhor qualidade, com exceção apenas do teclado. Isso é apenas algumas despesas irracionais máximas.

Em busca de um teclado separado, me deparei com uma classe de dispositivos como o USB MIDI Keyboard.
Sempre me pareceu que o MIDI é do campo da atividade musical profissional.
Mas agora toda a música é feita em um PC, em qualquer lugar conveniente, o que significa que os músicos precisam de teclados musicais móveis que cabem facilmente em uma mochila.

Aqui está!



Um plano imediatamente se formou na minha cabeça. Conectamos o teclado MIDI ao centro de mídia doméstico baseado no Raspberry Pi 3, onde o sintetizador de software está girando, permitindo que qualquer pessoa que queira realizar sua próxima obra-prima a qualquer momento. Nesses teclados MIDI, como regra, há um conjunto de botões giratórios e botões adicionais programados para vários efeitos ou instrumentos musicais adicionais. Parece e soa muito legal!

Existem dispositivos maiores e menores, são mais caros e um pouco mais baratos. Eu escolhi a opção por cerca de 5 sput. Ele tem duas oitavas, uma chave de tamanho normal, um botão para bateristas, um botão de afinação, e é tudo o que um músico eletrônico novato pode sonhar.

Eu não sou especial na criação de música em um PC, por isso foi difícil procurar maneiras de implementar minhas idéias. As informações tiveram que ser coletadas pouco a pouco. O quebra-cabeça gradualmente começou a tomar forma e acabou montando uma solução funcional, que eu compartilho com você. Curiosamente, na distribuição padrão do Raspbian / Debian, tudo foi encontrado de que você precisava, você nem precisava conectar repositórios externos.

O Fluidsynth é usado como sequenciador (um aplicativo que reproduz arquivos MIDI).
O teclado MIDI é detectado imediatamente pelo ALSA e está disponível para conexão com um seqüenciador.
Para tocar os sons de vários instrumentos, use bancos de dados de amostra abertos no formato SoundFont2. Para começar, instale tudo.

sudo -s apt-get update apt-get -y install alsa-utils fluid-soundfont-gm fluidsynth 

Conectamos o teclado MIDI ao Raspberry e iniciamos o seqüenciador no modo servidor:

 fluidsynth -i -s -a alsa -g 3 /usr/share/sounds/sf2/FluidR3_GM.sf2 

Nós executamos o comando:

 aconnect -o 

Como resultado, veremos uma lista de clientes MIDI disponíveis:

 client 14: 'Midi Through' [type=kernel] 0 'Midi Through Port-0' client 20: 'VMini' [type=kernel] 0 'VMini MIDI 1 ' 1 'VMini MIDI 2 ' client 128: 'FLUID Synth (1628)' [type=user] 0 'Synth input port (1628:0)' 

Aqui, é importante lembrar os números dos clientes de teclado e seqüenciador e conectá-los ao comando:

 aconnect 20:0 128:0 

Agora estamos prontos para tocar o Yamaha Piano (este é o instrumento padrão). Leia o manual do fluidsynth , existem muitos comandos interessantes, por exemplo, para mudar o instrumento para bateria ou vento, definir a quantidade de reverberação ou coro.

Vamos tornar nosso sintetizador de software conveniente. Para não conectar manualmente o teclado ao seqüenciador sempre, escreveremos um demônio simples que fará isso na inicialização automaticamente.

 cat > /etc/init.d/fluidsynth << EOF #!/bin/bash ### BEGIN INIT INFO # Provides: fluidsynth # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Fluidsynth deamon to play via MIDI-keyboard ### END INIT INFO startDaemon() { sleep 30s && fluidsynth -i -s -a alsa -g 3 --load-config=/home/osmc/midi-router >/var/log/fluidsynth & sleep 60s && aconnect 20:0 128:0 & } stopDaemon() { pkill -9 fluidsynth &> /dev/null } restartDaemon() { stopDaemon startDaemon } case "$1" in start) startDaemon ;; stop) stopDaemon ;; restart) restartDaemon ;; status) ;; *) startDaemon esac exit 0 EOF 

Registre o daemon para execução automática:

 chmod 755 /etc/init.d/fluidsynth update-rc.d fluidsynth defaults 

Observe que agora na inicialização o arquivo de configuração (/ home / osmc / midi-router) contendo os comandos que transformam nosso teclado em um sintetizador real é transferido para o seqüenciador.

Aqui está a coisa. Cada tecla e toque no teclado envia eventos específicos, com seu próprio número. Pelo que entendi, não existem padrões especiais, então todo fabricante faz o que quer. Por exemplo, eu quero que as teclas quadradas soem bateria, o resto das teclas toque piano, os botões para controlar o volume, reverberação e refrão.

Portanto, preciso mapear os códigos de evento do teclado para diferentes instrumentos, e os códigos das alças para os códigos que o seqüenciador entende. No fluidsynth, isso é feito usando um roteador. São esses comandos que estão contidos no arquivo de configuração.

Aqui está um exemplo do meu arquivo de configuração, com comentários sobre o que ele faz.

 cat > /home/osmc/midi-router << EOF #     ,  -    load /usr/share/sounds/sf2/FluidR3_GM.sf2 load /home/osmc/241-Drums.SF2 #       select 1 2 128 0 select 2 1 0 0 #       0 #          router_begin note router_chan 0 0 0 1 router_par1 36 48 1 0 router_end #          router_begin note router_chan 0 0 0 2 router_par1 0 35 1 0 router_end router_begin note router_chan 0 0 0 2 router_par1 49 255 1 0 router_end #      ,   , #         fluidsynth router_begin cc router_chan 0 0 0 2 router_par1 14 14 0 98 router_end router_begin cc router_chan 0 0 0 2 router_par1 15 15 0 11 router_end router_begin cc router_chan 0 0 0 2 router_par1 16 16 0 91 router_end router_begin cc router_chan 0 0 0 2 router_par1 17 17 0 93 router_end #     0, #      #      cc 0 7 0 EOF 

Para descobrir quais códigos seu dispositivo gera, você precisa usar este utilitário:

 aseqdump -p 20:0 

Ela escuta e exibe eventos do teclado MIDI no console. Pressione o botão ou gire o botão e você verá o tipo, canal e código do evento. Você pode programar seu teclado da maneira que desejar, e não da maneira que os engenheiros que desenvolveram o sintetizador específico vieram. Pelo qual muito obrigado aos desenvolvedores de fluidsynth, alsa, SoundFont2, Raspberry e V-Mini.

A propósito, este tópico com sintetizadores DIY é refletido em várias invenções, recomendo para estudo: uma e duas vezes .

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


All Articles