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.
|