Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- {$mode objfpc}{$H+}
- {$define UseMusic}
- interface
- uses
- SysUtils, Forms, StdCtrls, sdl_mixer, sdl;
- type
- TSoundEngine = class; // forward declaration
- TForm1 = class(TForm)
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- private
- play: TSoundEngine;
- end;
- PSoundBlock = {$IFDEF UseMusic}PMIX_Music{$ELSE}PMIX_Chunk{$ENDIF};
- TSoundEngine = class
- public
- constructor Create;
- destructor Destroy; override;
- procedure MixError;
- procedure SDLError;
- procedure PlayingStop;
- procedure PlayingStart(aMusic: PSoundBlock);
- procedure PlayingPause;
- procedure PlayingContinue;
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.lfm}
- constructor TSoundEngine.Create;
- begin
- if SDL_Init(SDL_INIT_AUDIO) = -1 then
- SDLError;
- end;
- destructor TSoundEngine.Destroy;
- begin
- PlayingStop;
- MIX_CloseAudio;
- SDL_Quit;
- inherited Destroy;
- end;
- procedure TSoundEngine.MixError;
- begin
- raise Exception.Create(Mix_GetError);
- end;
- procedure TSoundEngine.SDLError;
- begin
- raise Exception.Create(SDL_GetError);
- 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;
- procedure TForm1.Button1Click(Sender: TObject);
- var
- mus: PSoundBlock;
- begin
- if Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT,
- MIX_DEFAULT_CHANNELS, 1024) = -1 then
- play.MixError;
- mus := {$IFDEF UseMusic}Mix_LoadMUS{$ELSE}Mix_LoadWAV{$ENDIF}(PChar('click.wav'));
- play.PlayingStart(mus);
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- play := TSoundEngine.Create;
- end;
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- play.Free;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement