E aí galera, muitas pessoas ficam em duvida se tem como utilizar recursos sonoros em seus programas C, um grande recurso para isso é a utilização de bibliotecas gráficas como a SDL (que não é uma coisa muito fácil para iniciantes.) , entre outras específicas para sons. Um recurso muito interessante para burlar essas dificuldades é a utilização do que se têm em mãos, como o som de alerta da bios (isso mesmo, aquele som irritante de erro).
O código asseguir mostra a utilização da função Beep(int,int); que no primeiro parâmetro se da a entrada da frequência e o segundo a intensidade/tempo que o alerta permanesserá. Também utilizei a outras três funções, uma para teterminar um período de tempo para o próximo alerta e as outras para colorir textos e fundo de tela, que é algo muito legal, so que por falta de compatibilidade muitos não conseguem utilizar totalmente os recursos da biblioteca conio.h, onde elas são encontradas. (Eu somente portei essas duas funções de estilização de cores para fora dessa biblioteca.)
As funções são: Sleep( int); //Essa função determina um intervalo em milessegundos. [original da windows.h]
textcolor(int cor);
textbackground(int cor); //Essas outras duas aceitam constantes que já são definidadas dentro da biblioteca conio.h
Acho que não tem muito o que explicar, tudo é muito simples. O unico detalhe é na utilização das funções Beep(int freq,int ms); e Sleep(int ms); que devem ser escritas com iniciais maiúsculas, lembrando que linguagem C diferencia A de a. O resto é como eu disse, muito simples.
Quem é fã do Mário que vai gosta do pequeno aplicativo. shaushasuashusa...
Nota: Lembrando mais uma vez que Sleep e Beep devem ser inicialmente maiúsculas.
Dica: Eu apenas traduzi um código nativo de programinhas em shellscript utilizados em Mikrotiks: Super_Mario_Theme
Que é bem fácil de entender.
Mãos a obra... Esperimente vocês. :P {Não se assustem! Apesar de ser meio grande... É muito fácil de copreender.
/****************************************************/
/* Autor: Matheus Flauzino */
/* Data: 30 de maio de 2010 */
/* Curso: Ciência da Computação - 3º Período */
/* Centro Universitário do Sul de Minas */
/* e-mail/MSN: m4th3us.f@hotmail.com */
/****************************************************/
/* Aqui esta explesso claramente o uso de duas funções portadas da biblioteca conio.c que dá cor de fundo e primeiro plano nos
elementos impressos. */
#include <stdio.h>
#include <stdlib.h> //Fundamental para chamada de sistemas.
#include <windows.h> //Para funcionamento de Sleep e Beep
#include "conio.h" //Inclusão local da conio.h
// Declaramos una estructura text_info para almacenar la información
// sobre la ventana actual.
text_info vActual = {0, 0, 79, 24, WHITE, WHITE, C80, 25, 80, 1, 1}; //Utilizada para o funcionamento das funções textcolor e textbackground
void textcolor(int); /* Cor de primeiro plano [BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE] */
void textbackground(int); //Cor de Fundo [Definida pelas mesmas constantes da textcolor
void musica(void); //Usa duas outras funções da biblioteca windows.h que serve para emitir alertas sonoros Beep(freq,temp); e Sleep(temp);
void gogumelo(void); //Crio um gogumelo em ascii colorido com as funções textcolor e textbackground
void redefine(void); //Define o tamanho da tela com chamada do sistema
/* Função Principal */
int main(void){
redefine();
gogumelo();
musica();
Sleep(1000); //Temporizador
return 0;
}
/* Fim da Função Principal */
//Função textcolor: Define a cor de primeiro plano dos textos
void textcolor(int newcolor)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
(csbi.wAttributes & 0xf0) | newcolor);
vActual.attribute = (csbi.wAttributes & 0xf0) | newcolor;
}
//Função textbackground: Define a cor de fundo das fontes.
void textbackground(int newcolor)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
(csbi.wAttributes & 0x0f) | (newcolor << 4));
vActual.attribute = (csbi.wAttributes & 0x0f) | (newcolor << 4);
}
void gogumelo(void){ //Imprime o gogumelo do Mario Bros (Gerada em ascii)
textcolor(WHITE);
textbackground(LIGHTGRAY); printf("_____________________________________________________\n");
textbackground(LIGHTGRAY); printf("_________________"); textbackground(BLACK); printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶"); textbackground(LIGHTGRAY); printf("_______________\n");
textbackground(LIGHTGRAY); printf("_________________"); textbackground(LIGHTRED); printf("666666666666666666666"); textbackground(LIGHTGRAY); printf("_______________\n");
textbackground(LIGHTGRAY); printf("__________"); textbackground(BLACK); printf("¶¶¶¶¶¶¶"); textbackground(WHITE); printf("111111"); textbackground(LIGHTRED); printf("66666666"); textbackground(WHITE); printf("1111111"); textbackground(BLACK); printf("¶¶¶¶¶¶¶");textbackground(LIGHTGRAY); printf("________\n");
textbackground(LIGHTGRAY); printf("_______"); textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("1111111111"); textbackground(LIGHTRED); printf("66666666666666"); textbackground(WHITE); printf("1111111111"); textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTGRAY); printf("______\n");
textbackground(LIGHTGRAY); printf("_______"); textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("1111111111"); textbackground(LIGHTRED); printf("66666666666666"); textbackground(WHITE); printf("1111111111"); textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTGRAY); printf("______\n");
textbackground(LIGHTGRAY); printf("____"); textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTRED); printf("6666666666666"); textbackground(WHITE); printf("000MATHEUS0000"); textbackground(LIGHTRED); printf("6666666666666"); textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTGRAY); printf("___\n");
textbackground(LIGHTGRAY); printf("____"); textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTRED); printf("6666666666666"); textbackground(WHITE); printf("000FLAUZINO000"); textbackground(LIGHTRED); printf("6666666666666"); textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTGRAY); printf("___\n");
textbackground(LIGHTGRAY); printf("____"); textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTRED); printf("6666666666"); textbackground(WHITE); printf("0000UNIS0MG000000000"); textbackground(LIGHTRED); printf("6666666666"); textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTGRAY); printf("___\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("111"); textbackground(LIGHTRED); printf("66666666"); textbackground(WHITE); printf("000000"); textbackground(WHITE); printf("11111111111111"); textbackground(WHITE); printf("000000"); textbackground(LIGHTRED); printf("6666666"); textbackground(WHITE); printf("111"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("111"); textbackground(LIGHTRED); printf("66666666"); textbackground(WHITE); printf("000000"); textbackground(WHITE); printf("11111111111111"); textbackground(WHITE); printf("000000"); textbackground(LIGHTRED); printf("6666666"); textbackground(WHITE); printf("111"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("1111111"); textbackground(LIGHTRED); printf("6666"); textbackground(WHITE); printf("000"); textbackground(WHITE); printf("11111111111111111111"); textbackground(WHITE); printf("000"); textbackground(LIGHTRED); printf("6666"); textbackground(WHITE); printf("111111"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("1111111"); textbackground(LIGHTRED); printf("6666"); textbackground(WHITE); printf("000"); textbackground(WHITE); printf("11111111111111111111"); textbackground(WHITE); printf("000"); textbackground(LIGHTRED); printf("6666"); textbackground(WHITE); printf("111111"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("1111111"); textbackground(LIGHTRED); printf("6666"); textbackground(WHITE); printf("000"); textbackground(WHITE); printf("11111111111111111111"); textbackground(WHITE); printf("000"); textbackground(LIGHTRED); printf("6666"); textbackground(WHITE); printf("111111"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("1111"); textbackground(LIGHTRED); printf("6666666666"); textbackground(WHITE); printf("11111111111111111111"); textbackground(LIGHTRED); printf("6666666666"); textbackground(WHITE); printf("111"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(WHITE); printf("1111"); textbackground(LIGHTRED); printf("6666666666"); textbackground(WHITE); printf("11111111111111111111"); textbackground(LIGHTRED); printf("6666666666"); textbackground(WHITE); printf("111"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTRED); printf("666666666666666666"); textbackground(WHITE); printf("111111111111"); textbackground(LIGHTRED); printf("66666666666666666"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTRED); printf("666666666666666666"); textbackground(WHITE); printf("111111111111"); textbackground(LIGHTRED); printf("66666666666666666"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(BLACK); printf("¶¶¶"); textbackground(LIGHTRED); printf("66666666666"); textbackground(BLACK); printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶"); textbackground(LIGHTRED);printf("666666666"); textbackground(BLACK); printf("¶¶¶\n");
textbackground(LIGHTGRAY); printf("____"); textbackground(BLACK); printf("¶¶¶¶¶¶¶¶¶"); textbackground(YELLOW); printf("77777777"); textbackground(BLACK); printf("¶¶"); textbackground(YELLOW); printf("77777777"); textbackground(BLACK); printf("¶¶"); textbackground(YELLOW); printf("77777777"); textbackground(BLACK); printf("¶¶¶¶¶¶¶¶¶");textbackground(LIGHTGRAY); printf("___\n");
textbackground(LIGHTGRAY); printf("_______"); textbackground(BLACK); printf("¶¶"); textbackground(YELLOW); printf("7777"); textbackground(WHITE); printf("11111111"); textbackground(BLACK); printf("¶¶"); textbackground(WHITE); printf("11111111"); textbackground(BLACK); printf("¶¶"); textbackground(WHITE); printf("1111111"); textbackground(YELLOW); printf("7777"); textbackground(BLACK); printf("¶¶"); textbackground(LIGHTGRAY); printf("_______\n");
textbackground(LIGHTGRAY); printf("_______"); textbackground(BLACK); printf("¶¶"); textbackground(YELLOW); printf("7777"); textbackground(WHITE); printf("11111111"); textbackground(BLACK); printf("¶¶"); textbackground(WHITE); printf("11111111"); textbackground(BLACK); printf("¶¶"); textbackground(WHITE); printf("1111111"); textbackground(YELLOW); printf("7777"); textbackground(BLACK); printf("¶¶"); textbackground(LIGHTGRAY); printf("_______\n");
textbackground(LIGHTGRAY); printf("_______"); textbackground(BLACK); printf("¶¶"); textbackground(YELLOW); printf("7777"); textbackground(WHITE); printf("11111MATHEUS11FLAUZINO11111"); textbackground(YELLOW); printf("7777"); textbackground(BLACK); printf("¶¶");textbackground(LIGHTGRAY); printf("_______\n");
textbackground(LIGHTGRAY); printf("_______"); textbackground(BLACK); printf("¶¶"); textbackground(YELLOW); printf("7777"); textbackground(WHITE); printf("11111MATHEUS11FLAUZINO11111"); textbackground(YELLOW); printf("7777"); textbackground(BLACK); printf("¶¶");textbackground(LIGHTGRAY); printf("_______\n");
textbackground(LIGHTGRAY); printf("___________"); textbackground(BLACK); printf("¶¶"); textbackground(YELLOW); printf("7777"); textbackground(WHITE); printf("11111111111111111111"); textbackground(YELLOW); printf("7777"); textbackground(BLACK); printf("¶¶"); textbackground(LIGHTGRAY); printf("__________\n");
textbackground(LIGHTGRAY); printf("_____________"); textbackground(YELLOW); printf("7777"); textbackground(WHITE); printf("11111111111111111111"); textbackground(YELLOW); printf("7777");textbackground(LIGHTGRAY); printf("____________\n");
textbackground(LIGHTGRAY); printf("_____________"); textbackground(BLACK); printf("¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶"); textbackground(LIGHTGRAY); printf("_____________ \n");
textbackground(LIGHTGRAY); printf("_____________________________________________________\n");
}
void musica(void){ //Vinheta do Mario
Beep(660,100);Sleep(150); //Beep que faz a emissão do som e Sleep para esperar um tempo para o outro som ser emitido.
Beep(660,100);Sleep(300);
Beep(660,100);Sleep( 300);
Beep(510,100);Sleep( 100);
Beep(660,100);Sleep( 300);
Beep(770,100);Sleep( 550);
Beep(380,100);Sleep( 575);
Beep(510,100);Sleep( 450);
Beep(380,100);Sleep( 400);
Beep(320,100);Sleep( 500);
Beep(440,100);Sleep( 300);
Beep(480,80);Sleep( 330);
Beep(450,100);Sleep( 150);
Beep(430,100);Sleep( 300);
Beep(380,100);Sleep( 200);
Beep(660,80);Sleep( 200);
Beep(760,50);Sleep( 150);
Beep(860,100);Sleep( 300);
Beep(700,80);Sleep( 150);
Beep(760,50);Sleep( 350);
Beep(660,80);Sleep( 300);
Beep(520,80);Sleep( 150);
Beep(580,80);Sleep( 150);
Beep(480,80);Sleep( 500);
Beep(510,100);Sleep( 450);
Beep(380,100);Sleep( 400);
Beep(320,100);Sleep( 500);
Beep(440,100);Sleep( 300);
Beep(480,80);Sleep( 330);
Beep(450,100);Sleep( 150);
Beep(430,100);Sleep( 300);
Beep(380,100);Sleep( 200);
Beep(660,80);Sleep( 200);
Beep(760,50);Sleep( 150);
Beep(860,100);Sleep( 300);
Beep(700,80);Sleep( 150);
Beep(760,50);Sleep( 350);
Beep(660,80);Sleep( 300);
Beep(520,80);Sleep( 150);
Beep(580,80);Sleep( 150);
Beep(480,80);Sleep( 500);
Beep(500,100);Sleep( 300);
Beep(760,100);Sleep( 100);
Beep(720,100);Sleep( 150);
Beep(680,100);Sleep( 150);
Beep(620,150);Sleep( 300);
Beep(650,150);Sleep( 300);
Beep(380,100);Sleep( 150);
Beep(430,100);Sleep( 150);
Beep(500,100);Sleep( 300);
Beep(430,100);Sleep( 150);
Beep(500,100);Sleep( 100);
Beep(570,100);Sleep( 220);
Beep(500,100);Sleep( 300);
Beep(760,100);Sleep( 100);
Beep(720,100);Sleep( 150);
Beep(680,100);Sleep( 150);
Beep(620,150);Sleep( 300);
Beep(650,200);Sleep( 300);
Beep(1020,80);Sleep( 300);
Beep(1020,80);Sleep( 150);
Beep(1020,80);Sleep( 300);
Beep(380,100);Sleep( 300);
Beep(500,100);Sleep( 300);
Beep(760,100);Sleep( 100);
Beep(720,100);Sleep( 150);
Beep(680,100);Sleep( 150);
Beep(620,150);Sleep( 300);
Beep(650,150);Sleep( 300);
Beep(380,100);Sleep( 150);
Beep(430,100);Sleep(150);
Beep(500,100);Sleep(300);
Beep(430,100);Sleep(150);
Beep(500,100);Sleep( 100);
Beep(570,100);Sleep(420);
Beep(585,100);Sleep(450);
Beep(550,100);Sleep( 420);
Beep(500,100);Sleep(360);
Beep(380,100);Sleep(300);
Beep(500,100);Sleep(300);
Beep(500,100);Sleep( 150);
Beep(500,100);Sleep(300);
Beep(500,100);Sleep(300);
Beep(760,100);Sleep( 100);
Beep(720,100);Sleep( 150);
Beep(680,100);Sleep( 150);
Beep(620,150);Sleep( 300);
Beep(650,150);Sleep( 300);
Beep(380,100);Sleep( 150);
Beep(430,100);Sleep( 150);
Beep(500,100);Sleep( 300);
Beep(430,100);Sleep( 150);
Beep(500,100);Sleep( 100);
Beep(570,100);Sleep( 220);
Beep(500,100);Sleep( 300);
Beep(760,100);Sleep( 100);
Beep(720,100);Sleep( 150);
Beep(680,100);Sleep( 150);
Beep(620,150);Sleep( 300);
Beep(650,200);Sleep( 300);
Beep(1020,80);Sleep( 300);
Beep(1020,80);Sleep( 150);
Beep(1020,80);Sleep( 300);
Beep(380,100);Sleep( 300);
Beep(500,100);Sleep( 300);
Beep(760,100);Sleep( 100);
Beep(720,100);Sleep( 150);
Beep(680,100);Sleep( 150);
Beep(620,150);Sleep( 300);
Beep(650,150);Sleep( 300);
Beep(380,100);Sleep( 150);
Beep(430,100);Sleep( 150);
Beep(500,100);Sleep( 300);
Beep(430,100);Sleep( 150);
Beep(500,100);Sleep( 100);
Beep(570,100);Sleep( 420);
Beep(585,100);Sleep( 450);
Beep(550,100);Sleep( 420);
Beep(500,100);Sleep( 360);
Beep(380,100);Sleep( 300);
Beep(500,100);Sleep( 300);
Beep(500,100);Sleep( 150);
Beep(500,100);Sleep( 300);
Beep(500,60);Sleep( 150);
Beep(500,80);Sleep( 300);
Beep(500,60);Sleep( 350);
Beep(500,80);Sleep( 150);
Beep(580,80);Sleep( 350);
Beep(660,80);Sleep( 150);
Beep(500,80);Sleep( 300);
Beep(430,80);Sleep( 150);
Beep(380,80);Sleep( 600);
Beep(500,60);Sleep( 150);
Beep(500,80);Sleep( 300);
Beep(500,60);Sleep( 350);
Beep(500,80);Sleep( 150);
Beep(580,80);Sleep( 150);
Beep(660,80);Sleep( 550);
Beep(870,80);Sleep( 325);
Beep(760,80);Sleep( 600);
Beep(500,60);Sleep( 150);
Beep(500,80);Sleep( 300);
Beep(500,60);Sleep( 350);
Beep(500,80);Sleep( 150);
Beep(580,80);Sleep( 350);
Beep(660,80);Sleep( 150);
Beep(500,80);Sleep( 300);
Beep(430,80);Sleep( 150);
Beep(380,80);Sleep( 600);
Beep(660,100);Sleep( 150);
Beep(660,100);Sleep( 300);
Beep(660,100);Sleep( 300);
Beep(510,100);Sleep( 100);
Beep(660,100);Sleep( 300);
Beep(770,100);Sleep( 550);
Beep(380,100);Sleep( 575);
}
void redefine(void){
system("color f0"); //Padroniza a cor do sistema, aqui nem influencia muito.
system("MODE con cols=54 lines=29"); //Redimensiona a tela
system("title Super Mário - by: Matheus Flauzino - Ciência da Computação"); //Dá título a tela
}
Pergunta
Matheus Flauzino
E aí galera, muitas pessoas ficam em duvida se tem como utilizar recursos sonoros em seus programas C, um grande recurso para isso é a utilização de bibliotecas gráficas como a SDL (que não é uma coisa muito fácil para iniciantes.) , entre outras específicas para sons. Um recurso muito interessante para burlar essas dificuldades é a utilização do que se têm em mãos, como o som de alerta da bios (isso mesmo, aquele som irritante de erro).
O código asseguir mostra a utilização da função Beep(int,int); que no primeiro parâmetro se da a entrada da frequência e o segundo a intensidade/tempo que o alerta permanesserá. Também utilizei a outras três funções, uma para teterminar um período de tempo para o próximo alerta e as outras para colorir textos e fundo de tela, que é algo muito legal, so que por falta de compatibilidade muitos não conseguem utilizar totalmente os recursos da biblioteca conio.h, onde elas são encontradas. (Eu somente portei essas duas funções de estilização de cores para fora dessa biblioteca.)
As funções são: Sleep( int); //Essa função determina um intervalo em milessegundos. [original da windows.h]
textcolor(int cor);
textbackground(int cor); //Essas outras duas aceitam constantes que já são definidadas dentro da biblioteca conio.h
Acho que não tem muito o que explicar, tudo é muito simples. O unico detalhe é na utilização das funções Beep(int freq,int ms); e Sleep(int ms); que devem ser escritas com iniciais maiúsculas, lembrando que linguagem C diferencia A de a. O resto é como eu disse, muito simples.
Quem é fã do Mário que vai gosta do pequeno aplicativo. shaushasuashusa...
Nota: Lembrando mais uma vez que Sleep e Beep devem ser inicialmente maiúsculas.
Dica: Eu apenas traduzi um código nativo de programinhas em shellscript utilizados em Mikrotiks: Super_Mario_Theme
Que é bem fácil de entender.
Mãos a obra... Esperimente vocês. :P {Não se assustem! Apesar de ser meio grande... É muito fácil de copreender.
Notas finais:
* Eu utilizei o dev++ para a compilação.
* Codigo somente nativo no windows.
* Link já compilado clique aqui.
Ate mais galera. :blush:
Editado por Jonathan QueirozCorrigir link (Jonathan)
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.