• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

greed

[C] Programa para meter o speaker a tocar

4 mensagens neste tópico

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/kd.h>

#define MAXLINE 255

int main(int argc, char *argv[])
{
  int fd, arg, arg1, freq, time;
  char * pch;
  FILE * in;
  char data[MAXLINE];
  fd = open("/dev/tty0", O_RDONLY);
  if(fd == NULL){
   printf("Error opening /dev/tty0\n");
   return 0;
  }
  if (argc == 2 && argv[1] != NULL){

      in = fopen(argv[1],"r");
   if (in != NULL)
          while (fgets(data,MAXLINE,in) != NULL){
           pch = strtok (data," ");
           freq = atoi(pch);
                pch = strtok (NULL, " ");
              time = atoi(pch);
           arg = (time<<16)+(1193180/freq);
              ioctl(fd,KDMKTONE,arg);
              usleep(time * 1000);
           bzero(data, sizeof(data));
        }
   else
       printf("Error opening file %s\n",argv[1]);
  }
  else
   printf("Wrong arguments!\n");

 close(in);
 return 0;
}

Recebe de um ficheiro de texto (.txt) as frequências e o tempo de cada som.

Por exemplo:

440 200
333 200
700 200

Primeiro as frequências e dps o tempo de cada uma delas.

Agora podem brincar e se tiverem cão/gato em casa...podem-lhe atrufiar o juízo, check the following table:

http://www.lsu.edu/deafness/HearingRange.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito fixe o código. :)

O que faz a linha de código:

arg = (time<<16)+(1193180/freq);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito fixe o código. :)

O que faz a linha de código:

arg = (time<<16)+(1193180/freq);

N faço ideia. Saquei esse pedaço de código aqui: http://www.developer.com/open/article.php/10930_631191_3 que por sua vez sacaram de um gajo kker chamado : Matan Ziv-Av que e' um programming guru, portanto se ele e' um programming guru quem sou eu para dizer q ta mal??  :cheesygrin:

EDIT:

The argument d (primeiro argumento) must be an open file descriptor.

      The second argument is a device-dependent  request  code.  The third

      argument is  an untyped  pointer  to memory.

Com cada frequencia diferente posso ter um tom diferente, se o terceiro argumento aponta para a posicao da memoria, deve ser pq tem la **kker m****** com o som de cada tecla por exemplo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito fixe o código. :)

O que faz a linha de código:

arg = (time<<16)+(1193180/freq);

Segundo aquilo que sei, arg é uma variável que vai ser usada para definir se o socket é bloqueante ou não. Se for igual a 0 desactiva o socket bloqueante senão activa.

Ou seja, toma o valor da soma de dezasseis bits à esquerda da variável time mais a divisão desse número.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora