Página Inicial > Extensões, Outros, PHP > SDL_mixer. Sons no seu PHP

SDL_mixer. Sons no seu PHP

Ola pessoal. Depois de um longo tempo com problemas no meu hardware, o blog está de volta, e com muita novidade legal. Bem, enesse meio tempo, eu 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/. 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!

  1. Nenhum comentário ainda.
  1. Nenhum trackback ainda.