Moderadores: andre_luis, 51, guest2003, Renie
#include <stdio.h>
#include <math.h>
int main()
{
FILE *fp; // file descriptor para placa de som no linux
int i, s0, s1, k1, k2; // variaveis todas int de 32 bits
char saida, table[256]; // wavetable qq, no exemplo uma senoide
for(i=0;i!=256;i++) // inicializa wavetable com senoide
{
table[i] = (char)(127*sin(i*2.0*M_PI/256.0));
}
fp = fopen("/dev/dsp", "w"); // abre a placa de som
if(fp) // se abrir, roda o codigo, senao vai embora
{
k1 = (256*697)/8000; // k1 de linha 1 697hz
k2 = (256*1209)/8000; // k2 de coluna 1 1209hz
// 1,1 corresponde ao DTMF "1"
printf("coeficientes: 697Hz => %d, 1209Hz => %d\n",k1,k2);
for (i = 0;; i++) // loop eterno
{
s0 = table[(unsigned char) (i*k1)]; // primeiro resultado
s1 = table[(unsigned char) (i*k2)]; // segundo resultado
saida = (s0 + s1) / 2; // mixer simples
fputc(saida+128, fp); // envia para a placa de som
// a soma +128 no envio eh necessario
// pq a placa trabalha com pcm nao
// sinalizado, mas para processar audio
// *sempre* use sinalizado
}
}
return -1; // retorna erro se nao conseguir abrir o arquivo
}
k1 = (256*697); // k1 de linha 1 697hz
k2 = (256*1209); // k2 de coluna 1 1209hz
s0 = table[(unsigned char)((i*k1)/8000)]; // primeiro resultado
s1 = table[(unsigned char)((i*k2)/8000)]; // segundo resultado
float k1,k2;
...
k1 = 256.0*697.0/8000.0; // k1 de linha 1 697hz
k2 = 256.0*1209.0/8000.0; // k2 de coluna 1 1209hz
...
s0 = table[(unsigned char)((int)(i*k1))]; // primeiro resultado
s1 = table[(unsigned char)((int)(i*k2))]; // segundo resultado
proex escreveu:Pena que nao roda num PIC.![]()
Minha idéia inicial roda.
.
proex escreveu:Pena que nao roda num PIC.![]()
Minha idéia inicial roda.
.
Marcelo Samsoniuk escreveu:sei sei... mostra o codigo ae entao!proex escreveu:Pena que nao roda num PIC.![]()
Minha idéia inicial roda.
.
;------------------------------------------------
; Isso é apenas um exemplo de tabela. Não representa Wave de senoide
TAB_60HZ
DB 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x40, 0x00, 0x00
DB 0x40, 0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x80
DB 0x00, 0x00, 0x20, 0x00, 0x82, 0x3B, 0xB8, 0x20
DB 0x00, 0x82, 0x22, 0x10, 0x20, 0x00, 0x82, 0x33
DB 0x10, 0x20, 0x00, 0x82, 0x22, 0x10, 0x20, 0x00
DB 0x83, 0xBA, 0x10, 0x20, 0x08, 0x80, 0x00, 0x00
DB 0x20, 0x0C, 0x80, 0x00, 0x00, 0x20, 0xFE, 0xBF
DB 0xFF, 0xFF, 0xA1, 0x0C, 0xB1, 0xB3, 0x15, 0xA2
DB 0x08, 0xB6, 0xAF, 0xB5, 0xBC, 0x00, 0xB0, 0xA9
DB 0xB1, 0xA0, 0x00, 0xB5, 0xAD, 0xB5, 0xA0, 0x00
DB 0xB6, 0xB3, 0xB5, 0xA0, 0x00, 0xBF, 0xFF, 0xFF
DB 0xA0, 0x00, 0x9F, 0xFF, 0xFF, 0x20, 0x00, 0x40
DB 0x00, 0x00, 0x40, 0x00, 0x3F, 0xFF, 0xFF, 0x80
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0X00, 0X00
;Como ler a tabela acima:
MOVLW LOW(TAB_60HZ)
MOVWF TBLPTRL
MOVLW HIGH(TAB_60HZ)
MOVWF TBLPTRH
TBLRD*+
MOVFF TABLAT,DA_LOW
TBLRD*+
MOVF TABLAT,DA_HI
RETURN
.
barboza escreveu:Se as constantes k1 e k2 são respectivamente 22 e 38 e tabela tem 256 posições o máximo valor de i não deveria ser 6 (256/38)?
Acho que tem algo fora do controle ai.
proex escreveu:Marcelo Samsoniuk escreveu:sei sei... mostra o codigo ae entao!proex escreveu:Pena que nao roda num PIC.![]()
Minha idéia inicial roda.
.
Ai Vai:
- Código: Selecionar todos
;------------------------------------------------
; Isso é apenas um exemplo de tabela. Não representa Wave de senoide
TAB_60HZ
DB 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x40, 0x00, 0x00
DB 0x40, 0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x80
DB 0x00, 0x00, 0x20, 0x00, 0x82, 0x3B, 0xB8, 0x20
DB 0x00, 0x82, 0x22, 0x10, 0x20, 0x00, 0x82, 0x33
DB 0x10, 0x20, 0x00, 0x82, 0x22, 0x10, 0x20, 0x00
DB 0x83, 0xBA, 0x10, 0x20, 0x08, 0x80, 0x00, 0x00
DB 0x20, 0x0C, 0x80, 0x00, 0x00, 0x20, 0xFE, 0xBF
DB 0xFF, 0xFF, 0xA1, 0x0C, 0xB1, 0xB3, 0x15, 0xA2
DB 0x08, 0xB6, 0xAF, 0xB5, 0xBC, 0x00, 0xB0, 0xA9
DB 0xB1, 0xA0, 0x00, 0xB5, 0xAD, 0xB5, 0xA0, 0x00
DB 0xB6, 0xB3, 0xB5, 0xA0, 0x00, 0xBF, 0xFF, 0xFF
DB 0xA0, 0x00, 0x9F, 0xFF, 0xFF, 0x20, 0x00, 0x40
DB 0x00, 0x00, 0x40, 0x00, 0x3F, 0xFF, 0xFF, 0x80
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0X00, 0X00
;Como ler a tabela acima:
MOVLW LOW(TAB_60HZ)
MOVWF TBLPTRL
MOVLW HIGH(TAB_60HZ)
MOVWF TBLPTRH
TBLRD*+
MOVFF TABLAT,DA_LOW
TBLRD*+
MOVF TABLAT,DA_HI
RETURN
.
Nao precisa de calculeira e roda rapidinho num PIC. (que é o MCU que ele tá usando)
.
O LA de um violão, não é o mesmo lá de uma guita, e menos ainda de um cavaquinho..
Porem o LA do violão, é o mesmo de um piano..
vtrx escreveu:
- Código: Selecionar todos
O LA de um violão, não é o mesmo lá de uma guita, e menos ainda de um cavaquinho..
Porem o LA do violão, é o mesmo de um piano..
Acho que voce kizz dizer que não é o mesmo 'timbre' certo?
afine o LA de um violão, com um calibrador digital.
Depois afine tabem de uma guitarra.
A fundamental de uma nota LA de qq instrumento tem a mesma frequencia desde que estejam na mesma oitava
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante