PIANO COM PIC?DESISTO PARCIALMENTE.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor ribeiro220 » 01 Abr 2017 22:36

Boa noite a todos!
Estive pesquisando sobre geração de notas musicais na net e encontrei um projeto interessante.
Depois de varias tentativas em rodar o programa que é Open source,acabei desistindo parcialmente do mesmo.
Alguém já viu esse projeto?
Se alguém quiser me ajudar,eu agradeço. :D
ribeiro220.
site em inglês
http://www.pic24.ru/doku.php/en/osa/art ... _osa_piano

traduzido para portugues.
https://translate.google.com.br/transla ... t=&act=url
ribeiro220
Bit
 
Mensagens: 42
Registrado em: 04 Mai 2007 21:06

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor Alexandro » 03 Abr 2017 11:14

Eu quero tambem, mas um som de Orgão, o problema são as teclas, pra gerar tudo isso de tecla precisa multiplexar. Mas a aceitação do usuario seria teclas moveis e pedaleiras, ai sim dificulta. Mas gerar os tons é facil, existe até exemplos disso na net.
Avatar do usuário
Alexandro
Byte
 
Mensagens: 436
Registrado em: 23 Out 2006 16:49
Localização: São José do Rio Preto - SP e Sao Paulo-SP

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor ribeiro220 » 03 Abr 2017 18:14

Alexandro escreveu:Eu quero tambem, mas um som de Orgão, o problema são as teclas, pra gerar tudo isso de tecla precisa multiplexar. Mas a aceitação do usuario seria teclas moveis e pedaleiras, ai sim dificulta. Mas gerar os tons é facil, existe até exemplos disso na net.


Alexandro,multiplexar da pra fazer nas entradas do pic,não precisa ser o exemplo citado e pode ser teclados com lâminas,o interessante é que fazendo rodar o programa e entendendo o mesmo,dá gerar tons e timbres diferentes como sons de violino,flauta e outros...
Voce gera senoides,dente de serra e quadrada que seria apropiada para sons de órgãos.
ribeiro220
Bit
 
Mensagens: 42
Registrado em: 04 Mai 2007 21:06

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor andre_luis » 04 Abr 2017 05:47

Na miha opiniao, pra ficar realistico teria de ter vários timers disponiveis no uC. E pra cada um, a saída deveria ser multiplexada por hadware, mas aí o filtro de saída e o ganho iriam variar conforme o tom. Já usei um uC da Texas (MSP430F149) que possuía 7 timers, mas creio que nem isso seja suficiente para essa aplicaçação, já que apesar de nao usarmos os 10 dedos simultaneamente ao tocar o piano, há o efeito da sustentação da tecla atravez do pedal, o que significa talvez na necessidade de mais de uma duzia de tons ao mesmo tempo. Nesse contexto, talvez o problema recaia num microcontrolador SoC, onde voce possa criar alguns recursos de hardware extra. Uma outra abordagem, mas agora mais profissional seria com a utilização de um DSP, mas aí o buraco seria mais embaixo, pois tudo teria de ser feito matematicamente em algoritmo. Enfim, se quizer algo bom, vai ter de suar mais um pouco.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor xultz » 04 Abr 2017 08:07

Vale mesmo a pena se ralar tanto prá sintetizar sons num PIC, ao invés de usar ele como interface midi prá um sintetizador em software? Eu sei que tem toda a diversão de produzir os sons, mas... é muito pouco provável que consiga algo que chegue perto de um sintetizador em um PC. Sei lá, só uma opinião...
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor norad58 » 04 Abr 2017 18:11

Usando um simples MCU, não sei se ficaria bom como um teclado normal, devido a varias limitações dadas como exemplo pelo Andre_teprom.
Eu já consertei alguns teclados antigos da decada de 60/70, fabricados no Brasil. O teclado mais antigo, para cada tecla havia um circuito gerador de tom com transistor, capacitores, resistores e bobina, depois havia outros circuitos para geração de efeitos e tremolo.
Um teclado da decada de 70 que reparei, tinha um circuito a transistor que oscilava a 2mhz, entrava em um circuito integrado divisor de frequencia dedicado que gerava as frequencias mestres para as cinco oitavas do teclado. Para cada oitava/tecla havia um outro divisor de frequencia cmos para gerar os tons.
Já reparei até teclados com CPU Z80, que tinha função para gerenciar os comandos e não gerar os tons das teclas, que eram produzidos por uma placa repleta de circuitos operacionais e varios filtros.
O problema que vejo é acionar teclas em simultaneo, por exemplo formando uma triade. Num teclado normal, há uma somatoria de tons gerando harmonicas, no teclado com um PIC ou oscilador simples, acho que não geraria o mesmo efeito..

Exemplo de um teclado antigo:
Imagem

Exemplo usando um fpga:
http://jonphilpott.blogspot.com.br/2010 ... chive.html
norad58
Word
 
Mensagens: 693
Registrado em: 08 Abr 2013 15:56

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor tcpipchip » 04 Abr 2017 21:32

fantastico este esquema eletrico!
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor ribeiro220 » 04 Abr 2017 21:35

André ,sim DSP seria muito bom,mas como disse é muito mais dificil,
Xultz a ideía com midi é muito boa e até andei vendo sobre isso talvez usando um raspberry mas vi comentários sobre latência ou seja a demora em se apertar uma tecla e o tempo que será emitido o som,porém é uma solução.
Norad58,obrigado pelo diagrama e o link do FPGA,também já pensei nisso.
mas vejam o que o cara faz com o programinha dele no PIC
https://www.youtube.com/watch?time_cont ... oic1seP8u8
Enfim agradeço-lhes pelas respostas.
ribeiro220
ribeiro220
Bit
 
Mensagens: 42
Registrado em: 04 Mai 2007 21:06

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor msamsoniuk » 04 Abr 2017 23:32

andre_teprom escreveu:Na miha opiniao, pra ficar realistico teria de ter vários timers disponiveis no uC. E pra cada um, a saída deveria ser multiplexada por hadware, mas aí o filtro de saída e o ganho iriam variar conforme o tom. Já usei um uC da Texas (MSP430F149) que possuía 7 timers, mas creio que nem isso seja suficiente para essa aplicaçação, já que apesar de nao usarmos os 10 dedos simultaneamente ao tocar o piano, há o efeito da sustentação da tecla atravez do pedal, o que significa talvez na necessidade de mais de uma duzia de tons ao mesmo tempo. Nesse contexto, talvez o problema recaia num microcontrolador SoC, onde voce possa criar alguns recursos de hardware extra. Uma outra abordagem, mas agora mais profissional seria com a utilização de um DSP, mas aí o buraco seria mais embaixo, pois tudo teria de ser feito matematicamente em algoritmo. Enfim, se quizer algo bom, vai ter de suar mais um pouco.


na realidade um unico timer para manter o data rate constante jah eh suficiente! :) veja este algoritmo gerador de tom ilustrado no apendice A deste paper da texas:

http://www.ti.com/lit/an/spra096a/spra096a.pdf

no caso do paper da texas, eles usam pares de geradores senoidais para gerar pares de tons que sao somados para gerar sinalizacao DTMF. e bom, eh facil imaginar que em telefonia usamos dezenas e dezenas de geradores DTMF em DSPs baratos para gerar e decodificar todo tipo de tom de sinalizacao. o interessante eh que o algoritmo consome muito poucos recursos, o que se traduz em um mar de tons gerados simultaneamente! outra parte interessante eh que sao todos gerados em um unico data rate, o que permite mixar diretamente eles para gerar resultados complexos de forma muito trivial!

basicamente, o gerador de tons trabalha com o seguinte algoritmo para cada amostra:

y[0] = a1*y[1] - y[2] + b0
y[2] = y[1]
y[1] = y[0]

onde vc pre-calcula no excel:

a1 = -2 cos(w)
b0 = A sin(w)
A = amplitude
w =2*PI*f/f0
f = frequencia da senoide
f0 = data rate
y[1] inicial = 0
y[2] inicial = -b0

assim, se vc tem N teclas com N frequencias diferentes, vc vai ter esses N conjuntos de coeficientes pre-calculados. a medida que as teclas sao ativadas, vc vai rodar o algoritmo gerador e ele vai gerar as amostras das respectivas senoides. todas as senoides sao geradas e somadas segundo uma soma ponderada, de modo que provavelmente vc vai ter:

- 1 multiplicacao + 2 somas p/ gerar a amostra de uma frequencia
- 2 copias de dados p/ cada frequencia
- 1 multiplicacao + soma por frequencia para fazer a soma ponderada

o resultado vai ser uma amostra que contem as amostras de todas as senoides somadas e isso vai para o seu DA ou PWM. se vc quiser, pode somar resultados de wave tables, desde que operado no mesmo data rate (existem tecnicas para adaptar o data rate de wave tables).

em termos de performance: sabendo que o cara tem 10 dedos, a composicao de uma amostra com os 10 tons requer 20 multiplicacoes, 20 copias de dados e 30 somas, totalizando 70 operacoes. com loops e controles, talvez chegue a 100 ou 150 instrucoes por amostra. o numero de amostras depende da qualidade desejada, mas supondo 16 bits x 44kHz padrao do CD, sao 44k x 150 instrucoes = 6.6MIPS. qualquer DSP de 20 anos atras ou microcontrolador fajuto de 16 bits que tenha multiplicacao em hardware dah conta de boa. evidentemente, somar 10 amostras de 16 bits vai dar um overflow em um microcontrolador de 16 bits, a menos que vc faca shift previamente. isso pode causar alguma degradacao de qualidade quando comparado a um DSP com acumulador grande, mas funciona. e claro, eh possivel fazer isso em um microcontrolador de 8 bits, as custas de performance para simular inteiros maiores e mais lentos ou as custas de qualidade para trabalhar com inteiros menores e mais rapidos. mas hoje em dia eu diria que qualquer ARM baratinho com registros de 32 bits faz isso com um custo muito baixo e com os pehs nas costas! :)

um bonus extra de implementar no ARM: vc pode testar todo o conceito matematico previamente no PC, rodando no linux, onde jah tem um acesso facil ao /dev/dsp rodando em 16 bits x 44kHz e compilador gcc. funcionando tudo certo, basta recompilar para o ARM, adaptar algumas firulas de IO e pronto.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor Alexandro » 05 Abr 2017 09:48

Mas voltando as teclas, um orgão eletronico comum possui 2 teclados de 44 teclas e 13 pedals = 101 inputs !!!! Se multiplexar isso vai ter latencia com certeza, ou teria que dividir em 4 Mcu. Isso eu empaquei..
Avatar do usuário
Alexandro
Byte
 
Mensagens: 436
Registrado em: 23 Out 2006 16:49
Localização: São José do Rio Preto - SP e Sao Paulo-SP

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor barboza » 05 Abr 2017 10:06

msamsoniuk escreveu:
...

o resultado vai ser uma amostra que contem as amostras de todas as senoides somadas e isso vai para o seu DA ou PWM. se vc quiser, pode somar resultados de wave tables, desde que operado no mesmo data rate (existem tecnicas para adaptar o data rate de wave tables).

....

eh possivel fazer isso em um microcontrolador de 8 bits, as custas de performance para simular inteiros maiores e mais lentos ou as custas de qualidade para trabalhar com inteiros menores e mais rapidos.
...


Estou trabalhando em um projeto que gera frequências tanto via DAC quanto via PWM, inclusive dual tones (DTMF) num AVR de 8 bits.

No DAC, com wave tables, se resume em 2 somas (da amostra wav e do indexador). Rodando a 2,5MHz com taxa de 10KHz numa boa.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor brasilma » 05 Abr 2017 10:50

Li os posts e não encontrei referência a questão da sensibilidade das teclas, nos teclados este recurso normalmente é dado pela velocidade ou força do acionamento, não imagino mecanica/eletrônicamente como é feito...
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor msamsoniuk » 05 Abr 2017 12:22

Alexandro escreveu:Mas voltando as teclas, um orgão eletronico comum possui 2 teclados de 44 teclas e 13 pedals = 101 inputs !!!! Se multiplexar isso vai ter latencia com certeza, ou teria que dividir em 4 Mcu. Isso eu empaquei..


como raiz quadrada de 101 eh aproximadamente 11, entao uma matriz 11x11 permite vc matar esse problema. e se, digamos, a cada amostra de audio processada a 44.1kHz vc testar uma tecla, vc vai ter 44100/101 = 436Hz de varredura. francamente, nao acho que 1/436 de latencia vai fazer alguma diferenca. mas se vc acha que faz, vc tem opcao de varrer o teclado inteiro a cada amostra: neste caso a latencia vai ser de 1/44100 e qualquer latencia menor eh indiferente, pq eh menor que o data rate do DA! note que isso eh o supra-sumo da precisao tecnologica em termos de teclado e eh indicado apenas para maquinas, aliens e seres capazes de pensar em microsegundos! profundamente inutil e um vasto desperdicio de performance, mas de qq forma, eh possivel e custa barato: se naquela conta de 150 instrucoes para o audio incluir o tempo de varredura de 101 teclas, vc teria 101 testes de tecla, digamos que cada um consome 10 instrucoes: (1010 + 150)*44100 = 52MIPS, bem dentro da faixa de trabalho da maioria dos ARMs baratos! :)
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor msamsoniuk » 05 Abr 2017 12:28

brasilma escreveu:Li os posts e não encontrei referência a questão da sensibilidade das teclas, nos teclados este recurso normalmente é dado pela velocidade ou força do acionamento, não imagino mecanica/eletrônicamente como é feito...


lembro vagamente de algo sobre isso de uns 30 anos atras e era calculado por um "envelope" que controlava o volume do tom: quando vc apertava a tecla, ele trigava o inicio do envelope e ele evoluia a medida que vc segurava, chegando ao volume maximo. entao, quando vc soltava, ele trigava o final do envelope e o volume ia caindo... eh facil ver que depende apenas da velocidade de ativacao e desativacao da tecla:

Imagem

note os pontos em que a tecla eh ativada e desativada: quando vc ativa e segura a tecla, os tempos evoluem e o envelope muda. quando vc desativa, ele simplesmente cai ateh zero. e eh por isso a somatoria das amostras tem que ser ponderada: cada tom segue seu envelope particular que depende do momento particular de ativacao. o envelope, por si, eh conjunto de retas e curvas que eh multiplicada com a amostra do tom, onde por sua vez cada tom eh uma senoide calculada segundo aquele filtro que mostrei no outro post.

isso para um caso simples, com ondas senoidais. mas o envelope p/ uma wave table seria mais ou menos caso: vc teria a amostra periodica do instrumento ou voz e, quando ativa a tecla, ele comeca a despachar as amostras segundo o envelope.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Re: PIANO COM PIC?DESISTO PARCIALMENTE.

Mensagempor xultz » 05 Abr 2017 16:37

Sam, o teclado matricial tem problemas quando você aperta teclas simultaneamente. No caso de um piano, não dá prá prever que teclas serão pressionadas juntas, então tem que ler cada uma de forma independente. Eu acho que dá prá fazer com shift register enorme, porque gastar 101 GPIOs é soda.

Quando a gerar um "velocity" baseado no tempo de acionamento da tecla, é um xunxo da pior espécie. O músico pode querer fazer um stacatto (ou seja uma nota bem curtinha) com um velocity alto (ou seja, alta intensidade sonora), ou baixo. Assim, tem que medir a força que a tecla foi pressionada, não tem jeito.


P.S. Eu usei uns termos difíceis só prá parecer que eu manjo muito de música, mas na verdade eu não entendo P**** nenhuma do assunto, mas ninguém precisa saber disso.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

x