2012/6/12 Graeme Geldenhuys <graemeg.li...@gmail.com>: > On 12 June 2012 16:17, silvioprog <silviop...@gmail.com> wrote: >> >> So, how to play audio (wav/mp3) with only SDL framework in Free Pascal? > > > Simply reading a SDL tutorial or two, will quickly let you understand > the following code. TSoundEngine is just an convenience class we > created to add extra sound events and possibly swap out sound library > frameworks in future - without needing to change our application code. > Simple design pattern practices to simply your application code and > hide complexity. > > This is not the complete code, but is the gist of it. > > > uses > sdl_mixer, > sdl; > > const > // Global default extension for sound files. Set up as needed. > SoundExt = '.wav'; > > type > > PSoundBlock = {$IFDEF UseMusic}PMIX_Music{$ELSE}PMIX_Chunk{$ENDIF}; > > > ... > { in our project, this code is in a TSoundPlayer class. Result is of > type PSoundBlock } > Result := {$IFDEF > UseMusic}Mix_LoadMUS{$ELSE}Mix_LoadWAV{$ENDIF}(PChar(aFilename)); > if not Assigned(Result) then > SoundEngine.MixError; > ... > > > > constructor TSoundEngine.Create; > begin > if SDL_Init(SDL_INIT_AUDIO or SDL_INIT_TIMER) = -1 then > SDLError; > if Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, > MIX_DEFAULT_CHANNELS, 1024) = -1 then > MixError; > {$IFDEF > UseMusic}Mix_HookMusicFinished{$ELSE}Mix_ChannelFinished{$ENDIF}(@MusicFinished); > end; > > destructor TSoundEngine.Destroy; > begin > PlayingStop; > MIX_CloseAudio; > SDL_Quit; > inherited Destroy; > end; > > procedure TSoundEngine.PlayingStop; > begin > {$IFDEF UseMusic} > Mix_HaltMusic; > {$ELSE} > Mix_HaltChannel(1); > {$ENDIF} > end; > > procedure TSoundEngine.PlayingStart(aMusic: PSoundBlock); > begin > {$IFDEF UseMusic} > if Mix_PlayMusic(aMusic, 0) <> 0 then > MixError; > {$ELSE} > Mix_PlayChannel(1,aMusic, 0) > {$ENDIF} > end; > > procedure TSoundEngine.PlayingPause; > begin > {$IFDEF UseMusic} > Mix_PauseMusic; > {$ELSE} > Mix_Pause (1); > {$ENDIF} > end; > > procedure TSoundEngine.PlayingContinue; > begin > {$IFDEF UseMusic} > Mix_ResumeMusic; > {$ELSE} > Mix_Resume (1); > {$ENDIF} > end; > > > > -- > Regards, > - Graeme -
Hellow Graeme! :) I'll try to test it tomorrow and return here with the results ... Thank you in advance guy! :) -- Silvio Clécio My public projects - github.com/silvioprog _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal