天天看點

SDL2.0 播放wav檔案

// SDL_Mixer.cpp : 定義控制台應用程式的入口點。
//

#include "stdafx.h"
#include "SDL/include/SDL.h"
#include "SDL_mixer/include/SDL_mixer.h"
#pragma comment(lib, "sdl/lib/x86/SDL2.lib")
#pragma comment(lib, "sdl_mixer/lib/x86/SDL2_mixer.lib")

int _tmain(int argc, _TCHAR* argv[])
{
	SDL_Init(SDL_INIT_EVERYTHING);

	/*
	對于那些使用OGG, MOD或者其他非WAV聲音格式的人,請使用Mix_Init()來初始化解碼器,并使用Mix_Quit()來關閉解碼器。因為這裡我們僅僅使用了WAV檔案,是以我們不必為了用不到的東西來添加更多代碼。
	flags:bitwise OR'd set of sample/music formats to support by loading a library now. The values you may OR together to pass in are:
			MIX_INIT_FLAC
			MIX_INIT_MOD
			MIX_INIT_MP3
			MIX_INIT_OGG
	*/
	Mix_Init(MIX_INIT_OGG);

	/*
	該函數的第一個參數是我們使用的聲音頻率,在本課中,它被設為22050,這也是推薦設定的值。第二個參數是聲音格式,我們使用了預設的格式。第三個參數是我們計劃使用的頻道數量。
	我們将它設為2來獲得立體聲,如果設為1,将隻有單聲道聲音。最後一個參數是樣本大小,這裡被設為4096。
	frequency:Output sampling frequency in samples per second(Hz). you might use MIX_DEFAULT_FREQUENCY(22050) since that is a good value for most games.
	format:Output sample format.
			AUDIO_U8:	Unsigned 8 - bit samples
			AUDIO_S8:Signed 8 - bit samples
			AUDIO_U16LSB:Unsigned 16 - bit samples, in little - endian byte order
			AUDIO_S16LSB:Signed 16 - bit samples, in little - endian byte order
			AUDIO_U16MSB:Unsigned 16 - bit samples, in big - endian byte order
			AUDIO_S16MSB:Signed 16 - bit samples, in big - endian byte order
			AUDIO_U16:same as AUDIO_U16LSB(for backwards compatability probably)
			AUDIO_S16:same as AUDIO_S16LSB(for backwards compatability probably)
			AUDIO_U16SYS:Unsigned 16 - bit samples, in system byte order
			AUDIO_S16SYS;Signed 16 - bit samples, in system byte order
			MIX_DEFAULT_FORMAT is the same as AUDIO_S16SYS.
	channels:Number of sound channels in output.Set to 2 for stereo, 1 for mono.This has nothing to do with mixing channels.
	*/
	Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096);//在初始化函數中,我們調用Mix_OpenAudio() 來初始化SDL_mixer中的聲音函數。

	//要加載音樂,我們使用Mix_LoadMUS()。這個函數接受一個音樂檔案的檔案名并傳回其中的音樂資料。如果出錯,它會傳回NULL。
	//要加載聲效,我們使用Mix_LoadWAV()。它加載了傳入的檔案名所對應的聲音檔案,并傳回了一個Mix_Chunk,如果出錯了,則傳回NULL。
	Mix_Music *music = Mix_LoadMUS("F:\\vip.wav");

	//函數Mix_PlayMusic()的第一個參數是我們将要播放的音樂。第二個參數是音樂将要循環的次數。由于它被設為了-1,音樂将在手動停止前不停地循環下去。
	//如果播放音樂出現問題,該函數會傳回 - 1。
	Mix_PlayMusic(music, 1);

	SDL_Delay(5000);//不延遲不會播放

	Mix_CloseAudio();
	Mix_FreeMusic(music);
	Mix_Quit();
	SDL_Quit();

	return 0;
}
           
demo:http://download.csdn.net/detail/sz76211822/9878701