Advertisement
Guest User

Untitled

a guest
Jun 14th, 2012
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.28 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4. {$define UseMusic}
  5.  
  6. interface
  7.  
  8. uses
  9.   SysUtils, Forms, StdCtrls, sdl_mixer, sdl;
  10.  
  11. type
  12.  
  13.   TSoundEngine = class; // forward declaration
  14.  
  15.   TForm1 = class(TForm)
  16.     Button1: TButton;
  17.     procedure Button1Click(Sender: TObject);
  18.     procedure FormCreate(Sender: TObject);
  19.     procedure FormDestroy(Sender: TObject);
  20.   private
  21.     play: TSoundEngine;
  22.   end;
  23.  
  24.   PSoundBlock = {$IFDEF UseMusic}PMIX_Music{$ELSE}PMIX_Chunk{$ENDIF};
  25.  
  26.   TSoundEngine = class
  27.   public
  28.     constructor Create;
  29.     destructor Destroy; override;
  30.     procedure MixError;
  31.     procedure SDLError;
  32.     procedure PlayingStop;
  33.     procedure PlayingStart(aMusic: PSoundBlock);
  34.     procedure PlayingPause;
  35.     procedure PlayingContinue;
  36.   end;
  37.  
  38. var
  39.   Form1: TForm1;
  40.  
  41. implementation
  42.  
  43. {$R *.lfm}
  44.  
  45. constructor TSoundEngine.Create;
  46. begin
  47.   if SDL_Init(SDL_INIT_AUDIO) = -1 then
  48.     SDLError;
  49. end;
  50.  
  51. destructor TSoundEngine.Destroy;
  52. begin
  53.   PlayingStop;
  54.   MIX_CloseAudio;
  55.   SDL_Quit;
  56.   inherited Destroy;
  57. end;
  58.  
  59. procedure TSoundEngine.MixError;
  60. begin
  61.   raise Exception.Create(Mix_GetError);
  62. end;
  63.  
  64. procedure TSoundEngine.SDLError;
  65. begin
  66.   raise Exception.Create(SDL_GetError);
  67. end;
  68.  
  69. procedure TSoundEngine.PlayingStop;
  70. begin
  71. {$IFDEF UseMusic}
  72.   Mix_HaltMusic;
  73. {$ELSE}
  74.   Mix_HaltChannel(1);
  75. {$ENDIF}
  76. end;
  77.  
  78. procedure TSoundEngine.PlayingStart(aMusic: PSoundBlock);
  79. begin
  80. {$IFDEF UseMusic}
  81.   if Mix_PlayMusic(aMusic, 0) <> 0 then
  82.     MixError;
  83. {$ELSE}
  84.   Mix_PlayChannel(1, aMusic, 0)
  85. {$ENDIF}
  86. end;
  87.  
  88. procedure TSoundEngine.PlayingPause;
  89. begin
  90. {$IFDEF UseMusic}
  91.   Mix_PauseMusic;
  92. {$ELSE}
  93.   Mix_Pause (1);
  94. {$ENDIF}
  95. end;
  96.  
  97. procedure TSoundEngine.PlayingContinue;
  98. begin
  99. {$IFDEF UseMusic}
  100.   Mix_ResumeMusic;
  101. {$ELSE}
  102.   Mix_Resume (1);
  103. {$ENDIF}
  104. end;
  105.  
  106. procedure TForm1.Button1Click(Sender: TObject);
  107. var
  108.   mus: PSoundBlock;
  109. begin
  110.   if Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT,
  111.     MIX_DEFAULT_CHANNELS, 1024) = -1 then
  112.     play.MixError;
  113.   mus := {$IFDEF UseMusic}Mix_LoadMUS{$ELSE}Mix_LoadWAV{$ENDIF}(PChar('click.wav'));
  114.   play.PlayingStart(mus);
  115. end;
  116.  
  117. procedure TForm1.FormCreate(Sender: TObject);
  118. begin
  119.   play := TSoundEngine.Create;
  120. end;
  121.  
  122. procedure TForm1.FormDestroy(Sender: TObject);
  123. begin
  124.   play.Free;
  125. end;
  126.  
  127. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement