On 12 June 2012 16:17, silvioprog <[email protected]> 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 -
_______________________________________________
fpGUI - a cross-platform Free Pascal GUI toolkit
http://fpgui.sourceforge.net
_______________________________________________
fpc-pascal maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal