Fentuino Open Synth - projeto "faça você mesmo" seu sintetizador.

Autor Mensagem
Casper
Veterano
# mar/18


====================
Fentuino Open Synth
====================


O que é:
Uma colaboração dos usuários do fórum para desenvolver
um sintetizador baseado no Arduino:

https://www.arduino.cc/

Alguns pontos importantes do projeto são:

a) Tem que ser acessível a todos interessados ($);

b) Tem que utilizar necessariamente componentes
que possam ser adquiridos com facilidade;

c) Tem que ser um projeto sem dificuldades de
calibração, e que possa ser replicado facilmente;

d) Todo o hardware e software será amplamente
divulgado, só usaremos bibliotecas de software livres;

e) Não envolve ganho monetário.

Essa é uma iniciativa dos usuários desse fórum,
e conta com a participação de todos, mesmo
que não tenha como participar tecnicamente,
participe com ideias.


Inicialmente penso em um sintetizador monofônico
monotimbral, com possibilidade de ser expandido para
polifônico. Vamos discutindo aqui os conceitos e ideias.

_BLACKMORE_
Veterano
# mar/18
· votar


Justo!
Irei acompanhar e colaborar quando eu possuir conhecimento para tal.

fernando tecladista
Veterano
# mar/18
· votar


Postando para acompanhar

JJJ
Veterano
# mar/18
· votar


Recentemente comprei um kit de peças nesse padrão "arduíno", só que para montar pedais de guitarra...

Não sou muito de teclas (não que não goste, mas porque me falta muito nessa área!), mas vamos acompanhar o tópico do véio casper, porque pode ser muito interessante (pena que pegue o fórum num período de vacas anoréxicas...).

silvG8
Veterano
# mar/18
· votar


Como já disse, estou aqui pra contribuir, se não tecnicamente, com ideias e sugestões. Talvez uma forma interessante seria definir componentes básicos de como o som do sintetizador será formado em termos de especificações.

Estarei acompanhando!

Mauro Lacerda
Veterano
# mar/18
· votar


Também vou acompanhar e ajudar se puder. Ótima iniciativa!

Adler3x3
Veterano
# mar/18
· votar


Bem.
Vamos torcer para que dê certo.
Fico acompanhando.

Casper
Veterano
# mar/18
· votar


Prosseguindo:

a) Tem que ser acessível a todos interessados ($);

b) Tem que utilizar necessariamente componentes
que possam ser adquiridos com facilidade;


Então, por questões práticas, limitei a esses dois Arduinos:

arduino uno (15 reais no ebay)
arduino nano (10 reais no ebay)

No mercado livre se acha o uno a 30 reais
e o nano a 15 reais.

Existem versões nacionais: na robocore:

https://www.robocore.net/

Tem uma versão de uno a 85 reais e o
pro-mini a 29 reais. Esse pro-mini é o nano
sem programador. Precisa de um uno ou de
um programador para usar o pro-mini.

Para o MIDI chegar no Arduino é necessário
um acoplador óptico.

Dois caminhos:

1) Cada um monta o seu
2) Usa-se um MIDI Shield (25 reais no ebay)

O sistema mínimo seria esse:

http://i63.tinypic.com/mrwrc4.jpg

==================================

É necessária uma biblioteca de síntese, e essa
é minha sugestão:

http://sensorium.github.io/Mozzi/

Chega o primeiro ponto. Se colocar o protocolo MIDI
e o Mozzi no mesmo arduino, será difícil expandir.
Acho que a melhor solução seria (monofônico):

http://i67.tinypic.com/kqolk.jpg

A conexão entre os arduinos é feita com I2C,
um protocolo 12x mais rápido que o MIDI e que
permite interconectar centenas de arduinos com
dois fios apenas.

E permitiria fazer um polifônico:

http://i67.tinypic.com/wqsepx.jpg

Então seria possível começar com monofônico e
ir expandindo aos poucos.

fernando tecladista
Veterano
# mar/18
· votar


Acha que no caso eu que sou zero a esquerda em eletronica, consegue montar um?

Casper
Veterano
# mar/18
· votar


Caro fernando tecladista:

Com absoluta certeza.

silvG8
Veterano
# mar/18
· votar


Casper
Bom saber! Se eu achar que é algo realmente acessível, pretendo fazer um também.

Já brinquei com um primo meu que mexe com robótica, usei um Arduino e uma protoboard pra tentar alguma coisa e consegui fazer um oscilador simples de onda quadrada (isso sem ter uma mínima noção). Hoje já esqueci tudo! Heheheh!

Vou dar uma olhada no github pra ter uma noção do que é possível.

Casper
Veterano
# mar/18 · Editado por: Casper
· votar


======================
Arduíno - primeiro contato
======================

O que é um Arduino?

É uma plataforma que consiste em uma placa
de circuito impresso com um microprocessador
e os componentes necessários para ele funcionar
e ser programado. Temos acesso aos pinos do
microcontrolador, que podem ser configurados
como entrada, saída, comunicação, leitura de
sensores diversos (no nosso caso a leitura
da posição de potenciômetros, por exemplo,
é fundamental) etc.

https://www.arduino.cc/

O fabricante fornece um sistema de programação
em linguagem C++ muito amigável e claro, o Arduino IDE:

https://www.arduino.cc/en/Main/Software

Como existem muitas pessoas envolvidas no
desenvolvimento dessa plataforma, é fácil encontrar
muito código conveniente já escrito para facilitar
sua implementação. Principalmente bibliotecas.

O que são bibliotecas?

São coleções de programas que podem ser adicionados ao
ambiente de programação, e adicionam novas funcionalidades
para o microcontrolador. Por exemplo, MIDI, que vamos usar.

Bibliotecas são grandes facilitadores na programação, e
são provavelmente blocos de programação muito mais
estáveis que escrever o código "a partir do zero" toda vez.

Portanto penso em utilizar várias bibliotecas para facilitar
o trabalho.

Sugiro que quem tenha interesse em participar do
projeto e não tenha nenhuma experiência duas coisas:

1) Adquirir um arduino qualquer.
2) Instalar o ambiente de programação.

Mais nada é necessário para começar. O próprio
cabo USB alimenta a placa e serve como meio para
programá-la.

O fabricante disponibiliza uma referência interessante
para ser consultada:

https://www.arduino.cc/reference/en/

Abaixo, uma bela introdução, para quem está tendo
o primeiro contato com a plataforma:

https://www.circuitar.com.br/tutoriais/programacao-para-arduino-primei ros-passos/

Casper
Veterano
# mar/18 · Editado por: Casper
· votar


Achei essa biblioteca que eventualmente pode ser muito útil:

https://forum.arduino.cc/index.php?topic=482903.0

https://code.google.com/archive/p/arduino-pwm-frequency-library/downlo ads

Gera sinais quadrados com frequência controlada
e com qualquer relação cíclica (pulsos), permitindo
fácil modulação PWM.

fernando tecladista
Veterano
# mar/18
· votar


No mercado livre se acha o uno a 30 reais
e o nano a 15 reais.


começando a brincadeira

no ML tem os dois, também vi uns kits, 100 cento e poucas peças
jumper, cabinhos led....

é interessante já comprar o kit ou será dinheiro jogado fora

o MIDI Shield só vi mesmo no ebay

Casper
Veterano
# mar/18
· votar


Caro fernando tecladista:

Se sua experiência com montagem é zero,
eu diria que comprar um kit mais completo
e um MIDI Shield é o caminho mais correto.

Se esse kit tiver um módulo de LCD ele será
extremamente útil no projeto.

Casper
Veterano
# mar/18
· votar


Arduino MIDI Library v4.3.1:

https://github.com/FortySevenEffects/arduino_midi_library/releases

https://github.com/FortySevenEffects/arduino_midi_library

http://fortyseveneffects.github.io/arduino_midi_library/index.html

fernando tecladista
Veterano
# mar/18
· votar


Casper
Mandarei links para você ver

Casper
Veterano
# mar/18
· votar


Caros colegas:

Quem tiver interesse em colocar um teclado no próprio
sintetizador (e não usar somente USB/MIDI externo)
pode pensar em usar um Mega no lugar do Uno/Nano.
O Mega tem muito mais pinos, e fica mais fácil de implementar
um teclado simples.

Casper
Veterano
# mar/18 · Editado por: Casper
· votar


=====================================
O mínimo que você precisa saber sobre MIDI
=====================================


MIDI (Musical Instrument Digital Interface)
é um protocolo de comunicação serial com
foco em troca de informações para equipamentos
musicais. Ele envia dados e comandos de controle.

As mensagens são enviadas de 8 bits (= 1 byte)
em uma taxa de 31,25 kbit/s.

Uma mensagem típica tem essa cara:
STATUS byte + DATA bytes

Um STATUS byte sempre começa com 1, em binário:

0b1xxxxxxx

Um DATA byte sempre começa com 0, em binário:

0b0xxxxxxx

Notas musicais:

Quando se aperta uma tecla, o que sai é um note on:

Status byte : 1001 CCCC
Data byte 1 : 0PPP PPPP
Data byte 2 : 0VVV VVVV

onde

"CCCC" é o canal MIDI (0 até 15)
"PPP PPPP" é a nota (0 até 127)
"VVV VVVV" é a velocidade (intensidade) ( 0 até 127)

Quando se solta a tecla - note off:

Status byte : 1000 CCCC
Data byte 1 : 0PPP PPPP
Data byte 2 : 0VVV VVVV

onde

"CCCC" é o canal MIDI (0 até 15)
"PPP PPPP" é a nota (0 até 127)
"VVV VVVV" é a velocidade de desligamento ( 0 até 127)



Alguns comandos comuns:

program change

Status byte : 1100 CCCC
Data byte 1 : 0XXX XXXX

Controles MIDI

Status byte : 1011 CCCC
Data byte 1 : 0NNN NNNN
Data byte 2 : 0VVV VVVV

CCCC = canal MIDI
NNNNNNN = número do controle (0 até 127)
VVVVVVV = valor (0 até 127)

por exemplo:

7 = Volume level of the instrument


Canal = 8
Volume = 7
Valor do volume = 127

Status byte : 1011 1000
Data byte 1 : 0000 0111
Data byte 2 : 0111 1111

Esse é o absolutamente básico.

Vamos usar essencialmente NOTE on/off,
bend, modulation e alguns comandos CC.

Quem quiser saber mais detalhes:

http://www.music-software-development.com/midi-tutorial.html

silvG8
Veterano
# mar/18
· votar


Casper
Sempre considero qualquer feedback como algo muito positivo. Excelente postagem, principalmente pra mim que entendo pouco de programação.

Ficou bastante didático, deu pra pegar o começo da ideia da coisa. Já consigo ter uma noção de como seria com o pitchbend e modulation.

Obrigado mais uma vez pelo esforço pra tornar esse projeto realidade. Estou dando uma olhada no Arduino, vamos nos falando no privado.

Casper
Veterano
# mar/18 · Editado por: Casper
· votar


Caro silvG8:

Espero estar ajudando...

=====================================
Conexão MIDI - Arduino
=====================================


O cabo envia mensagen sem uma taxa de 31,25 kbit/s
em um cabo geralmente com três fios, onde um é não
utilizado. Na verdade existem vários tipos de cabo MIDI,
mas o que nos interessa é o de dois condutores.

O padrão é usar um acoplador óptico entre o cabo
e o Arduino. Isso traz vários benefícios:

1) Evita problemas de aterramento
2) Evita acidentes elétricos
3) Evita ruídos indesejados

Enfim, faz tudo que o USB não faz. ;)

A cara da conexão é assim:


MIDI-IN

Acopladores 6N138 ou 6N139 são excelentes, confiáveis
e rápidos. Mas esse não é um componente tão crítico.
Existem muitas opções:

Acopladores

Colocar uma saída MIDI Thru é sempre bacana.

Quem optar por usar um shield para arduino não
tem que se preocupar com esses detalhes. É só
espetar e correr para o abraço:

Shield

E para quem quiser se aventurar e montar
o acoplador em formato de shield:

http://www.instructables.com/id/Arduino-MIDI-in-shield/

Casper
Veterano
# mar/18 · Editado por: Casper
· votar


===========================
Esboço do Hardware
===========================


Arduino Uno (master)

Pino 0 - RX (MIDI)
Pino 1 - TX (MIDI)
Pino 2 - Gate Ch 1 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 3 - Gate Ch 2 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 4 - Gate Ch 3 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 5 - Gate Ch 4 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 6 - Gate Ch 5 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 7 - Gate Ch 6 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 8 - Gate Ch 7 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 9 - Gate Ch 8 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 10 - Forma de onda (bit 0)
Pino 11 - Forma de onda (bit 1)
Pino 13 - LED MIDI
Pino 18 - SDA (I2C)
Pino 19 - SCL (I2C)
Pino A0 - Potênciometro uso geral (seleciona canal MIDI)
Pino A1 - Potênciometro uso geral (seleciona MODO - Poli/Mono/Unison)
Pino A2 - Potênciometro uso geral (forma de onda)
Pino A3 - Potênciometro uso geral (ainda não sei)



Arduino Nano (cada um é um oscilador, escravo do Uno)

Pino 2 - Entrada GATE vindo do Uno (dispara interrupção para ler o novo valor de frequência do oscilador)
Pino 3 - Saída do oscilador
Pino 4 - Forma de onda (bit 0)
Pino 5 - Forma de onda (bit 1)
Pino A0 - Potênciometro uso geral comum para todos osciladores (envelope attack?)
Pino A1 - Potênciometro uso geral comum para todos osciladores (envelope decay/release?)
Pino A2 - Potênciometro uso geral comum para todos osciladores (filter resonance?)
Pino A3 - Potênciometro uso geral comum para todos osciladores (filter cutoff?)
Pino 18 - SDA (I2C)
Pino 19 - SCL (I2C)


Eu vou implementar somente 5 osciladores, mas
o projeto irá implementar entre 1 e 8 osciladores.
Evidentemente que optar por um não vai implementar
o modo polifônico.

Casper
Veterano
# mar/18
· votar


DCO explicado:



Casper
Veterano
# mar/18 · Editado por: Casper
· votar


===========================
Esboço do Hardware V2.0
===========================


Arduino Uno (master)

Pino 0 - RX (MIDI)
Pino 1 - TX (MIDI)
Pino 2 - Gate Ch 1 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 3 - Gate Ch 2 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 4 - Gate Ch 3 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 5 - Gate Ch 4 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 6 - Gate Ch 5 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 7 - Gate Ch 6 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 8 - Gate Ch 7 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 9 - Gate Ch 8 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 13 - LED MIDI
Pino 18 - SDA (I2C)
Pino 19 - SCL (I2C)
Pino A0 - Potênciometro uso geral (seleciona canal MIDI)
Pino A1 - Potênciometro uso geral (seleciona MODO - Poli/Mono/Unison)
Pino A2 - Potênciometro uso geral (forma de onda)
Pino A3 - Potênciometro uso geral (ainda não sei)



Arduino Nano (cada um é um oscilador, escravo do Uno)

Pino 2 - Entrada GATE vindo do Uno (dispara interrupção para ler o novo valor de frequência do oscilador)
Pino 3 - Saída do oscilador
Pino 4 - Endereço físico da placa do oscilador (de 0 até 7 - 8canais) (bit 0) LSB
Pino 5 - Endereço físico da placa do oscilador (de 0 até 7 - 8canais) (bit 1)
Pino 6 - Endereço físico da placa do oscilador (de 0 até 7 - 8canais) (bit 2) MSB
Pino A0 - Potênciometro uso geral comum para todos osciladores (envelope attack?)
Pino A1 - Potênciometro uso geral comum para todos osciladores (envelope decay/release?)
Pino A2 - Potênciometro uso geral comum para todos osciladores (filter resonance?)
Pino A3 - Potênciometro uso geral comum para todos osciladores (filter cutoff?)
Pino 18 - SDA (I2C)
Pino 19 - SCL (I2C)

O que mudou?

Os pinos 4, 5 e 6 agora são os endereços de cada oscilador.
Para entender o motivo, vou explicar a essência do protocolo I2C.

==========================
Protocolo I2C
==========================


I2C (Inter-Integrated Circuit) é um protocolo serial
que usa dois sinais apenas:

SDA – data
SCL – clock

A velocidade é de 400Khz (ou 100KHz).
Permite ligar até 112 dispositivos.
Normalmente, e esse é nosso caso, temos
um Master (MIDI) e até 8 Slaves (Osciladores).
Cada oscilador tem um endereço único, que vai
ser composto com os pinos 4, 5 e 6. Isso permite
que um programa de oscilador sirva para os 8
osciladores, caso contrário eu teria que programar um
por um.

Exemplo:

Quero mandar um oscilador ter a frequência
da nota 64. O que vai acontecer?

1) O Arduíno Uno recebe um note-on 64
2) Ele seleciona o primeiro oscilador livre
e aciona o GATE;
3) O Uno manda um byte pelo I2C de valor 64
para o oscilador livre do item 2;
4) O oscilador recebe esse 64 e vai em uma tabela que
devolve a frequência dessa nota (em Hertz).
5) O oscilador começa a operar nessa frequência.

Para quem quiser entender o I2C:

http://tronixstuff.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/

https://learn.sparkfun.com/tutorials/i2c

https://www.arduino.cc/en/Reference/Wire

Casper
Veterano
# mar/18 · Editado por: Casper
· votar


===========================
Esboço do Hardware V3.0
===========================


Arduino Uno (master)

Pino 0 - RX (MIDI)
Pino 1 - TX (MIDI)
Pino 2 - Gate Ch 1 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 3 - Gate Ch 2 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 4 - Gate Ch 3 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 5 - Gate Ch 4 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 6 - Gate Ch 5 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 7 - Gate Ch 6 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 8 - Gate Ch 7 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 9 - Gate Ch 8 (gera interrupção para atualizar o valor de frequência do oscilador)
Pino 13 - LED MIDI
Pino 18 - SDA (I2C)
Pino 19 - SCL (I2C)
Pino A0 - Potênciometro uso geral (seleciona canal MIDI)
Pino A1 - Potênciometro uso geral (seleciona MODO - Poli/Mono/Unison)
Pino A2 - Potênciometro uso geral (forma de onda)
Pino A3 - Potênciometro uso geral (ainda não sei)



Arduino Nano (cada um é um oscilador, escravo do Uno)

Pino 2 - Entrada GATE vindo do Uno (dispara interrupção para ler o novo valor de frequência do oscilador)
Pino 4 - Endereço físico da placa do oscilador (de 0 até 7 - 8canais) (bit 0) LSB
Pino 5 - Endereço físico da placa do oscilador (de 0 até 7 - 8canais) (bit 1)
Pino 6 - Endereço físico da placa do oscilador (de 0 até 7 - 8canais) (bit 2) MSB
Pino 9 - Saída do oscilador (1/2) - junto com o pino 10 compõe o sinal
Pino 10 - Saída do oscilador (1/2) - junto com o pino 10 compõe o sinal
Pino A0 - Potênciometro uso geral comum para todos osciladores (envelope attack?)
Pino A1 - Potênciometro uso geral comum para todos osciladores (envelope decay/release?)
Pino A2 - Potênciometro uso geral comum para todos osciladores (filter resonance?)
Pino A3 - Potênciometro uso geral comum para todos osciladores (filter cutoff?)
Pino 18 - SDA (I2C)
Pino 19 - SCL (I2C)



O que mudou?

O Mozzi usa a saída assim:

Mozzi Output

PS: Mozzi é sensacional!
PS: Nem vou tentar DCO, a gama de sons que
se consegue com essa biblioteca beira a insanidade:

http://sensorium.github.io/Mozzi/examples/



E como eu faço para selecionar a forma de onda,
porque o Véio Casper arrancou esses pinos de seleção...


No byte que mando para o oscilador, se o valor
for até 127 significa a nota MIDI respectiva, tudo
acima disso é comando.

Por exemplo :

130 - onda senoidal
131 - onda quadrada
132 - onda triangular
...
180 - filtro passa altas
181 - filtro passa baixas
...

E assim vai.

Casper
Veterano
# mar/18
· votar


O prophet 08 possui 8 LED's na direita
(2 linhas com 4 LED's cada).

Veka em 9:50 o comportamento quando
em modo polifônico. É esse comportamento
que quero replicar. As vozes vão entrando
sequêncialmente:



silvG8
Veterano
# mar/18
· votar


Excelentes postagens Casper. Estou pesquisando um pouco e vendo o que consigo absorver do negócio. Não é algo tão complexo quanto eu imaginava e lendo um pouco sobre percebe-se que dá pra aprender.

Quanto a implementação da polifonia, eu ainda poderia sugerir uma segunda coisa: se a saída do synth for stereo, teria como reproduzir o pan spread do P08... nada mais é que um parâmetro que gradativamente joga as vozes ímpares para um pan esquerdo e as pares para um pan direito. Acaba dando uma ambiencia bem legal aos sons.

Casper
Veterano
# mar/18
· votar


Caro silvG8:

Acredito que não é necessário entender todo o
The Art of Computer Programming do Donald E.
Knuth para se fazer algo decente.

Introdução para o Mozzi:

https://quod.lib.umich.edu/cgi/p/pod/dod-idx/mozzi-interactive-sound-s ynthesis-on-the-open-source-arduino.pdf?c=icmc;idno=bbp2372.2013.002;f ormat=pdf

Casper
Veterano
# mar/18 · Editado por: Casper
· votar


Pergunta:

Algum dos senhores tem interesse em polifonia
maior que 8 ?

PS: Fazer pan é moleza. Pode ser uma opção interessante.

TrebleH
Veterano
# mar/18
· votar


Opa,

Acompanhando tbm

Já estava pra começar a mexer com MIDI no arduino e outros kits dedicados tem um tempo. Bom saber que há uma comunidade aqui. Espero poder contribuir com algo útil.

Enviar sua resposta para este assunto
        Tablatura   
Responder tópico na versão original
 

Tópicos relacionados a Fentuino Open Synth - projeto "faça você mesmo" seu sintetizador.