日度归档:2011 年 03 月 07 日

用C++和libSDL开发游戏系列(2) – 使用SDL_mixer播放音乐和音效

SDL_mixer的用法很简单,它可以帮助你在你使用了SDL的项目中播放音频文件,包括
项目网址是:http://www.libsdl.org/projects/SDL_mixer/

这里有SDL_mixer的API说明,很详细,而且用法很简单,看了代码你就知道了!
http://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_frame.html

编译选项:
g++ -lmingw32 -lSDLmain SDL_mixer.dll -lSDL main.cpp

随手写的一坨代码:

#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_mixer.h>

int main(int argc, char **argv)
{
	/* 初始化SDL */
	SDL_Init(SDL_INIT_AUDIO);
	/* 在使用SDL_mixer前进行初始化 */
	int ret = Mix_Init(MIX_INIT_MP3);
	if(ret & MIX_INIT_MP3 != MIX_INIT_MP3){
		perror("failed to initialize mp3 module.");
		exit(1);
	}
	
	/* 设置音频格式,使用44100的cd格式即可 */
	if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024)==-1) {
		fprintf(stderr, "Mix_OpenAudio: %s\n", Mix_GetError());
		exit(2);
	}

	/* 加载一个wav音频文件 */
	Mix_Chunk* wav = Mix_LoadWAV("./heal.wav");
	if(wav == NULL){
		fprintf(stderr, "Mix_LoadWAV: %s\n", Mix_GetError());
		exit(1);
	}
	/* 播放音频文件,第三个参数是循环次数这里设置为0表示播放一次,1表示播放两次,-1表示无穷次 
	 * 第一个参数是音频轨道,轨道数目可以通过Mix_AllocateChannels函数来改变,-1表示随机选择一个空闲的轨道 */
	Mix_PlayChannel(-1, wav, 0);
	
	/* 加载一首MP3吧! */
	Mix_Music* mp3 = Mix_LoadMUS("./music.mp3");
	if(mp3 == NULL){
		fprintf(stderr, "Mix_LoadMUS: %s\n", Mix_GetError());
		exit(1);
	}
	/* 播放一次 */
	Mix_PlayMusic(mp3, 1);
	/* 等待播放结束 */
	while(Mix_PlayingMusic())
		_sleep(1000);
		
	/* 资源回收处理 */
	Mix_CloseAudio();
	Mix_Quit();	
	return 0;
}