SDL_mixer. Sons no seu PHP

Estive estudando muito sobre módulos PHP, e acabei desenvolvendo uma extensão, a SDLmixer, que pode ser baixada em http://code.google.com/p/phpsdlmixer/ https://github.com/scorninpc/php-sdlmixer. A extensão ainda não foi compilada para windows, por enquanto só linux, com a versão code, e o .so compiladinho para seu PHP 5.
Para quem não sabe, SDL é uma biblioteca multi-plataforma para desenvolvimento de jogos 2D, é comparada com o directdraw da MS, assim, juntando OpenGL+SDL temos um forte concorrente ao DirectX. Na extensão em questão, foi criada uma referencia somente a biblioteca SDL_mixer, uma lib a parte, como o DirectSound.
Quanto a novidades, estou programando uma série de posts sobre desenvolvimento de extensões, e garanto, tempo post pra mais de metro.

Bem, após baixada a extensão, instalada e tudo mais, vamos à utilização da mesma. Com ela é possível rodar musicas e sons, pode parecer redundante, porem musicas são fundos sonoros, e sons podem ser, estouro de bomba, o barulho de um carrinho andando, e muitas outras coisas.

A extensão foi programada utilizando os mesmos nomes da lib original C, assim, a documentação é enorme, podendo ser utilizada do mesmo modo.

Segue o código de um player simples, com algumas funcionalidades da lib.

< ?php
	$status = 0;
	
	$window = new GtkWindow();
	$window->set_size_request(500, 500);
	$fixed = new GtkFixed();
	
	$scVolume = new GtkVScrollbar();
	$scVolume->set_range(0, 128);
	$scVolume->set_size_request(30, 100);
	
	$scPosition = new GtkHScrollbar();
	$scPosition->set_range(0, 100);
	$scPosition->set_size_request(250, 30);
	
	$btnPlay = new GtkButton("Play");
	$btnPlay->set_size_request(70, 28);
	
	$btnSample = new GtkButton("Sample");
	$btnSample->set_size_request(70, 28);
	
	$btnPause = new GtkButton("Pause");
	$btnPause->set_size_request(70, 28);
	
	$btnStop = new GtkButton("Stop");
	$btnStop->set_size_request(70, 28);
	
	$fixed->put($btnPlay, 35, 15);
	$fixed->put($btnPause, 110, 15);
	$fixed->put($btnStop, 185, 15);
	$fixed->put($btnSample, 260, 15);
	$fixed->put($scVolume, 8, 15);
	$fixed->put($scPosition, 35, 45);
	
	$window->connect_simple("destroy", "window_quit");
	$btnPlay->connect_simple("clicked", "btnPlay_onclick");
	$btnPause->connect_simple("clicked", "btnPause_onclick");
	$btnStop->connect_simple("clicked", "btnStop_onclick");
	$btnSample->connect_simple("clicked", "btnSample_onclick");
	$scVolume->connect("adjust-bounds", "scVolume_onchange");
	
	function scVolume_onchange($range, $value)
	{
		Mix_VolumeMusic((int)$value);
	}
	
	function btnPlay_onclick()
	{
		global $musica, $status;
		
		Mix_PlayMusic($musica);
		$status = 1;
	}
	
	function btnPause_onclick()
	{
		global $status, $btnPause;
		
		if($status == 1)
		{
			$status = 2;
			Mix_PauseMusic();
			$btnPause->set_label("Resume");
		}
		else
		{
			$status = 1;
			Mix_ResumeMusic();
			$btnPause->set_label("Pause");
		}
	}
	
	function btnStop_onclick()
	{
		Mix_FadeOutMusic(1000);
		//Mix_HaltMusic();
	}
	
	function btnSample_onclick()
	{
		global $sample;
		
		$sample = Mix_LoadWAV("/home/scorninpc/Projetos/projetos/NullName/data/exp.wav");
		Mix_PlayChannel(-1, $sample, 0);
	}
	
	function window_quit()
	{
		Mix_CloseAudio(); 
		Gtk::main_quit();
	}

	// Inicia a aplicação
	Mix_OpenAudio(22050, 2, 1024);
	$musica = Mix_LoadMUS("/home/scorninpc/Musicas/Arch Enemy/Stigmata/Arch Enemy - Vox Stellarum.mp3");
	
	$window->add($fixed);
	$window->show_all();
	Gtk::main();

Lembre que os caminhos das musicas e dos sons devem ser alterados.

Have fun!