初始化和退出
一个游戏除了精美的画面效果,还要有与之相对的音效。本节,我们要讲解的是音效和背景音乐的播放。 先把音频播放的扩展库加上:
#include "SDL2/SDL_mixer.h"此库中包含了与音频播放有关的函数,打开音频播放器
int Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize);
这个函数第一个参数为播放器的播放频率,如果你对音频处理播放很了解,那么你可以填上你自己认为最合适的值,如果不了解,仅仅是想使用,和我一样小白,那么填上Mixer为我们准备的MIX_DEFAULT_FREQUENCY,第二个参数为音频播放格式,咱们也填上默认的值MIX_DEFAULT_FORMAT,第三个是播放的声道,填默认的吧 MIX_DEFAULT_CHANNELS,第四个是音效的默认大小,这个不能随便填,看你的音频文件,自己尝试,填上一个值,如果播放有延迟那么就适当改小一点。
Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 2048);
还有退出函数
Mix_Quit();
Mix_Chunk 音效 code
mixer有一个储存音效的结构体Mix_Chunk用来储存音效,我们可以通过Mix_LoadWAV来加载音频文件
Chunk[0] = Mix_LoadWAV("Gunfire.wav");
Chunk[1] = Mix_LoadWAV("Bang.wav");
Chunk[2] = Mix_LoadWAV("Fanfare.wav");
Chunk[3] = Mix_LoadWAV("peow.wav");
播放音频的函数:
int Mix_PlayChannel(int channel, Mix_Chunk *chunk, int loops);
第一个参数是播放的通道,如果是-1则用空闲的通道,第二个参数是播放的音频,第三个是循环次数,当然,从0开始计数。返回播放音乐的通道
释放函数
void Mix_FreeChunk(Mix_Chunk *chunk);
Mix_Music 音乐 code
结构体Mix_Music
加载函数
Mix_Music * Mix_LoadMUS(const char *file);
释放函数
void Mix_FreeMusic(Mix_Music *music);
播放函数
int Mix_PlayMusic(Mix_Music *music, int loops);
loop是播放时是否循环播放,让我们看看其他函数
//暂停 void Mix_PauseMusic(void); //恢复播放 void Mix_ResumeMusic(void); //倒带 void Mix_RewindMusic(void); //用来判断是否暂停 int Mix_PausedMusic(void); //是否正在播放音乐 int Mix_PlayingMusic(void);
在使用以上函数前,有几个需要注意的地方。
- 必须在使用所有函数前使用OpenAudio函数;后果:导致函数失效,在加载函数使用后无法对Mix_Chunk和Mix_Music初始化,即一直为空。
- 不得将Free函数与加载函数放在同一个函数内,即使里面包含了播放函数;后果:音频在播放前被释放,导致播放失败。