Go Down

Topic: Geração de acorde (Read 8 times) previous topic - next topic

bubulindo


Rapaz, depois de passar o resto do dia estudando eu consegui entender que a Serie de Fourier não só foi o que definiu a classificação dos acordes como também tem a resposta para criar o encapsulamento de frequências.
Fiz um teste usando o Audacity, ele tem um gerador de tom, gerei duas notas e combinei as frequências ai pude compreender o que acontece com a onda.
Em teoria pode ser reproduzido através de algum algorítimo tenebroso pelo que notei, vamos ver se eu consigo desenvolver, afinal tenho que ter uma distração ...

Se tiver novidades eu posto aqui ...


Eu não disse que era simples. Gerar essas frequências com PWM é difícil, logo o melhor é começares a estudar timers e gerares tu o pwm. Já agora, dá uma vista de olhos sobre como não usar a digitalWrite() já que isso vai atrasar e muito o algoritmo.

Abraço e mete aqui o resultado.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

spiderpoison

bubulindo - Então em teoria eu consegui entender como proceder e para gerar os acordes, fiz algumas interações em um fórum de  música onde participo também e peguei alguns detalhes técnicos, se quiser dar uma lida: http://forum.cifraclub.com.br/forum/9/294246/ .
Estou desenvolvendo o algorítimo, vou ver se faço ele de forma visual para conferir os resultados usando alguma linguagem que permita eu desenhar gráficos e depois tento portar a função para o arduino desenvolvendo a função para gerar meu pulso.
Legal a dica do "como não usar o  digitalWrite()", talvez eu esteja fazendo alguns erros em outros projetos por causa desse detalhe.

abraços ...

bubulindo

Já que estás numa de aprender coisas úteis... tens aqui como fazer o set, reset e toggle de bits em C.

http://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle-a-single-bit-in-c
http://nepsweb.co.uk/docs/bitTwiddle.pdf

Eu tenho umas macros algures nuns ficheiros de código... quando as descobrir posto aqui.

O segredo para a tua aplicação é perceber como fazer o timer disparar uma interrupção e alterar o estado do pino o mais rápido possível. Para isso tens de estudar como funcionam os timers e como fazer as contas para acertar a temporização. :)
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

neuron_upheaval

#18
Sep 18, 2012, 06:21 pm Last Edit: Sep 18, 2012, 06:31 pm by neuron_upheaval Reason: 1
Você pode tentar dessa forma, como descrito pelo cara do seu post de fórum Cifrasclub, se quiser um acorde resultante da interferência de três senóides puras (uma senóide para cada nota do acorde, por exemplo):

Code: [Select]

#include <math.h>

#define PWMPERIOD 1.0/490.0
#define OMEGAC 2.0 * 3.14159 * 263.63
#define OMEGAE 2.0 * 3.14159 * 329.63
#define OMEGAG 2.0 * 3.14159 * 391.99

unsigned long time = 0;

void setup() {}

void loop() {
   double amplitude = 255.0 / 3.0 * (
       sin(OMEGAC * PWMPERIOD * time) +
       sin(OMEGAE * PWMPERIOD * time) +
       sin(OMEGAG * PWMPERIOD * time));

   analogWrite(3, (int)amplitude); // ligar o alto-falante no pino 3

   time++;
}

spiderpoison

neuron_upheava - Legal, acredito que seja por ai mesmo, preciso apenas de tempo para fazer os testes práticos, mas em teoria seria isso.

bubulindo - com certeza irei estudar ...

valeu pessoal

Go Up