Reprodução de arquivos WAV com SDL_mixer e linguagem C

O objetivo deste artigo é explicar o funcionamento da biblioteca SDL_mixer na reprodução de arquivos de áudio WAV através de aplicações escritas em linguagem C. A SDL_mixer é uma biblioteca adicional da SDL, mais poderosa para tratamento de arquivos de áudio do que as funções de SDL_audio, possibilitando por exemplo a execução de vários arquivos de áudio simultaneamente.

[ Hits: 22.426 ]

Por: Felipe Martins dos Santos em 31/07/2009 | Blog: http://www.ime.usp.br/~fmsantos


Compilação



Para compilar o trecho de código execute:

gcc -o programaExecutavel programaFonte.c -lSDL -lSDL_mixer

Os parâmetros -lSDL e -lSDL_mixer informam ao compilador que o código sendo compilado utiliza as libraries SDL e SDL_mixer.

Para executar o programa, digite:

./programaExecutavel

Obs.: Não se esqueça de obter algum arquivo de áudio no formato .wav e mantê-lo no mesmo diretório do programa executável, ou então adapte o código na função Mix_LoadWAV("caminho do arquivo WAV");

Conclusão

Tive a ideia de escrever este artigo após ter lido um outro sobre a SDL aqui no Viva O Linux. Acredito que SDL, OpenGL e Allegro são ferramentas que precisam ser exploradas por nós que utilizamos o Linux para que os games possam evoluir nesse sistema. Muitas pessoas alegam que esse é um dos motivos pelos quais elas não utilizam o Linux ou não abandonam o Windows, e essa talvez seja uma maneira viável para se mudar essa história.

Se nós não criarmos os jogos, quem irá criar?

Sugestões para artigos

Seguem algumas sugestões para artigos com temas relacionados:
  • Integração entre SDL e OpenGL
  • Comparação entre SDL e Allegro
  • SDL - Instalação e configuração

Referências


Página anterior    

Páginas do artigo
   1. SDL e motivação
   2. Compilação
Outros artigos deste autor

Blender Game Engine: Uma introdução

LaTex no Fedora 20 - Instalação via YUM

Compilador GNU Prolog

Leitura recomendada

Tutorial OpenGL v2.0

Programando com uma granada de mão: uma visão da linguagem C

Brincando com o editor HT

Escrevendo o caos em C

Detectando assalto na multidão com visão computacional

  
Comentários
[1] Comentário enviado por quartodazona em 29/06/2010 - 21:38h

Olá amigo.

Linda iniciativa, mas o código não compila. Consegui reduzir o número de erros com a inclusão de stdlib, stdio e string.h no cabeçalho, mas isto não resolveu o problema. Não está claro também se tenho que instalar alguma biblioteca a parte.

Segue abaixo o código dos erros:

teste.c:1:21: error: SDL/SDL.h: Arquivo ou diretório não encontrado
teste.c:2:27: error: SDL/SDL_mixer.h: Arquivo ou diretório não encontrado
teste.c:7: error: conflicting types for ‘argv’
teste.c:7: note: previous definition of ‘argv’ was here
teste.c: In function ‘main’:
teste.c:10: warning: implicit declaration of function ‘SDL_Init’
teste.c:10: error: ‘SDL_INIT_VIDEO’ undeclared (first use in this function)
teste.c:10: error: (Each undeclared identifier is reported only once
teste.c:10: error: for each function it appears in.)
teste.c:10: error: ‘SDL_INIT_AUDIO’ undeclared (first use in this function)
teste.c:11: warning: implicit declaration of function ‘SDL_GetError’
teste.c:11: warning: format ‘%s’ expects type ‘char *’, but argument 3 has type ‘int’
teste.c:18: error: ‘Uint16’ undeclared (first use in this function)
teste.c:18: error: expected ‘;’ before ‘audio_format’
teste.c:23: warning: implicit declaration of function ‘Mix_OpenAudio’
teste.c:23: error: ‘audio_format’ undeclared (first use in this function)
teste.c:24: warning: implicit declaration of function ‘Mix_GetError’
teste.c:24: warning: format ‘%s’ expects type ‘char *’, but argument 3 has type ‘int’
teste.c:29: error: ‘Mix_Chunk’ undeclared (first use in this function)
teste.c:29: error: ‘sound’ undeclared (first use in this function)
teste.c:31: warning: implicit declaration of function ‘Mix_LoadWAV’
teste.c:33: warning: format ‘%s’ expects type ‘char *’, but argument 3 has type ‘int’
teste.c:37: error: ‘SDL_Surface’ undeclared (first use in this function)
teste.c:37: error: ‘screen’ undeclared (first use in this function)
teste.c:38: warning: implicit declaration of function ‘SDL_SetVideoMode’
teste.c:38: error: ‘SDL_ANYFORMAT’ undeclared (first use in this function)
teste.c:40: warning: too many arguments for format
teste.c:45: warning: implicit declaration of function ‘Mix_PlayChannel’
teste.c:47: warning: format ‘%s’ expects type ‘char *’, but argument 3 has type ‘int’
teste.c:51: warning: implicit declaration of function ‘Mix_Playing’
teste.c:53: warning: implicit declaration of function ‘Mix_FreeChunk’
teste.c:55: warning: implicit declaration of function ‘Mix_CloseAUdio’
teste.c:57: warning: implicit declaration of function ‘SDL_Quit’

Eu gostaria muito de que este programa funcionasse.

[2] Comentário enviado por felipemartinsss em 04/07/2010 - 23:44h

No momento estou bastante atarefado, mas assim que possível, reviso o código. Mas acredito que o problema seja de ambiente. Costumo compilar várias vezes antes de enviar.

[3] Comentário enviado por removido em 29/09/2010 - 11:52h

Ótimo tutorial. Esses erros que o amigo postou são por uma má configuração e instalação do SDL e do SDLMixer. Simplesmente o SDL não está instalado e o compilador não está encontrando os arquivos SDL.h e SDL_mixer.h.

[4] Comentário enviado por felipemartinsss em 19/09/2014 - 11:35h

Obrigado pela participação emanuelbotelho. Na época que o quartodazona postou, infelizmente eu não pude responder.

[5] Comentário enviado por quartodazona em 19/09/2014 - 15:41h

Meus caros, na época eu tinha instalados os arquivos SDL.h e SDL_mixer.h como ele havia descrito. Eu fiz a configuração com base no que o Felipe postou.

[6] Comentário enviado por felipemartinsss em 19/09/2014 - 15:44h


[5] Comentário enviado por quartodazona em 19/09/2014 - 15:41h:

Meus caros, na época eu tinha instalados os arquivos SDL.h e SDL_mixer.h como ele havia descrito. Eu fiz a configuração com base no que o Felipe postou.


Peço desculpas por não ter te dado suporte na época. Vou ver se faço uma nova configuração para testar isso.


Contribuir com comentário