Unit1.pas 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. {========================================================================}
  2. {= (c) 1995-98 SwiftSoft Ronald Dittrich =}
  3. {========================================================================}
  4. {= All Rights Reserved =}
  5. {========================================================================}
  6. {= D 01099 Dresden = Fax.: +49(0)351-8037944 =}
  7. {= Loewenstr.7a = info@swiftsoft.de =}
  8. {========================================================================}
  9. {= Actual versions on http://www.swiftsoft.de/index.html =}
  10. {========================================================================}
  11. {= This code is for reference purposes only and may not be copied or =}
  12. {= distributed in any format electronic or otherwise except one copy =}
  13. {= for backup purposes. =}
  14. {= =}
  15. {= No Delphi Component Kit or Component individually or in a collection=}
  16. {= subclassed or otherwise from the code in this unit, or associated =}
  17. {= .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed =}
  18. {= without express permission from SwiftSoft. =}
  19. {= =}
  20. {= For more licence informations please refer to the associated =}
  21. {= HelpFile. =}
  22. {========================================================================}
  23. {= $Date: 17.11.98 - 16:45:01 $ =}
  24. {========================================================================}
  25. unit Unit1;
  26. interface
  27. uses
  28. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  29. MMUtils, MMObj, MMDSPObj, MMAPlay, MMAudio, StdCtrls, MMDIBCv, MMLevel, MMConect,
  30. MMHook, MMDesign, MMWavOut, MMSlider, ExtCtrls, MMSpectr, MMGauge, MMMPEG;
  31. type
  32. TForm1 = class(TForm)
  33. AudioPlayer: TMMAudioPlayer;
  34. btnPlay: TButton;
  35. btnStop: TButton;
  36. btnFile: TButton;
  37. OpenDialog: TOpenDialog;
  38. MMDesigner1: TMMDesigner;
  39. MMConnector1: TMMConnector;
  40. MMLevel1: TMMLevel;
  41. MMLevel2: TMMLevel;
  42. btnStopFade: TButton;
  43. SliderPosition: TMMSlider;
  44. Timer: TTimer;
  45. Label1: TLabel;
  46. btnPause: TButton;
  47. Label2: TLabel;
  48. Label3: TLabel;
  49. SliderPitch: TMMSlider;
  50. Timer1: TTimer;
  51. StreamGauge: TMMGauge;
  52. Label4: TLabel;
  53. Label5: TLabel;
  54. PlayGauge: TMMGauge;
  55. procedure btnFileClick(Sender: TObject);
  56. procedure btnStopClick(Sender: TObject);
  57. procedure btnPlayClick(Sender: TObject);
  58. procedure btnStopFadeClick(Sender: TObject);
  59. procedure SliderPositionTrack(Sender: TObject);
  60. procedure SliderPositionTrackEnd(Sender: TObject);
  61. procedure AudioPlayerStart(Sender: TObject);
  62. procedure AudioPlayerStop(Sender: TObject);
  63. procedure AudioPlayerPause(Sender: TObject);
  64. procedure AudioPlayerRestart(Sender: TObject);
  65. procedure TimerTimer(Sender: TObject);
  66. procedure btnPauseClick(Sender: TObject);
  67. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  68. procedure SliderPitchChange(Sender: TObject);
  69. procedure Timer1Timer(Sender: TObject);
  70. private
  71. Seeking: Boolean;
  72. FileStream: TFileStream;
  73. MemStream : TMemoryStream;
  74. procedure CopyData(nBytes: Longint);
  75. public
  76. end;
  77. var
  78. Form1: TForm1;
  79. implementation
  80. {$R *.DFM}
  81. {------------------------------------------------------------------------------}
  82. procedure TForm1.CopyData(nBytes: Longint);
  83. begin
  84. try
  85. nBytes := Min(nBytes,FileStream.Size-FileStream.Position);
  86. MemStream.CopyFrom(FileStream,nBytes);
  87. except
  88. // no exception please
  89. end;
  90. end;
  91. {------------------------------------------------------------------------------}
  92. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  93. begin
  94. AudioPlayer.Stop;
  95. end;
  96. {------------------------------------------------------------------------------}
  97. procedure TForm1.btnFileClick(Sender: TObject);
  98. begin
  99. if (FileStream = nil) and OpenDialog.Execute then
  100. begin
  101. FileStream := TFileStream.Create(OpenDialog.FileName,fmOpenRead);
  102. //FileStream := TFileStream.Create('C:\MP3Files\NALIN & KANE - BEACHBALL!!S.MP3',fmOpenRead);
  103. MemStream := TMemoryStream.Create;
  104. MemStream.Size := FileStream.Size;
  105. CopyData(AudioPlayer.NumBuffers*AudioPlayer.BufferSize);
  106. AudioPlayer.FileName := 'POINTER://'+IntToHex(Longint(MemStream.Memory),8);
  107. SliderPosition.MaxValue := AudioPlayer.FileLength;
  108. SliderPosition.Position := 0;
  109. btnPlay.Enabled := True;
  110. end;
  111. end;
  112. {------------------------------------------------------------------------------}
  113. procedure TForm1.btnPlayClick(Sender: TObject);
  114. begin
  115. if (wosPause in AudioPlayer.State) and (wosPlay in AudioPlayer.State) then
  116. AudioPlayer.Restart
  117. else
  118. begin
  119. if SliderPosition.Position >= AudioPlayer.FileLength-5000 then
  120. SliderPosition.Position := 0;
  121. { set the start position }
  122. AudioPlayer.Position := SliderPosition.Position;
  123. Timer1.Enabled := True;
  124. {set the fade In/Out params }
  125. //Audioplayer.FadeInDuration := 2500;
  126. //AudioPlayer.FadeOutDuration := 2500;
  127. //Audioplayer.FadeOutPosition := AudioPlayer.PlayLength-AudioPlayer.FadeOutDuration;
  128. AudioPlayer.Play;
  129. end;
  130. end;
  131. {------------------------------------------------------------------------------}
  132. procedure TForm1.btnPauseClick(Sender: TObject);
  133. begin
  134. if (wosPause in AudioPlayer.State) then
  135. AudioPlayer.Restart
  136. else
  137. AudioPlayer.Pause;
  138. end;
  139. {------------------------------------------------------------------------------}
  140. procedure TForm1.btnStopClick(Sender: TObject);
  141. begin
  142. AudioPlayer.Stop;
  143. end;
  144. {------------------------------------------------------------------------------}
  145. procedure TForm1.btnStopFadeClick(Sender: TObject);
  146. begin
  147. AudioPlayer.StopFade(5000);
  148. end;
  149. {------------------------------------------------------------------------------}
  150. procedure TForm1.SliderPositionTrack(Sender: TObject);
  151. begin
  152. Seeking := True;
  153. Label1.Caption := TimeToString(SliderPosition.Position);
  154. end;
  155. {------------------------------------------------------------------------------}
  156. procedure TForm1.SliderPositionTrackEnd(Sender: TObject);
  157. begin
  158. Audioplayer.FadeInDuration := 50;
  159. AudioPlayer.Position := SliderPosition.Position;
  160. Seeking := False;
  161. end;
  162. {------------------------------------------------------------------------------}
  163. procedure TForm1.AudioPlayerStart(Sender: TObject);
  164. begin
  165. Timer.Enabled := True;
  166. btnPlay.Enabled := False;
  167. btnStop.Enabled := True;
  168. btnStopFade.Enabled := True;
  169. btnPause.Enabled := True;
  170. //SliderPosition.Enabled := True;
  171. SliderPitch.Enabled := True;
  172. end;
  173. {------------------------------------------------------------------------------}
  174. procedure TForm1.AudioPlayerStop(Sender: TObject);
  175. begin
  176. Timer.Enabled := False;
  177. Timer1.Enabled := False;
  178. btnPlay.Enabled := True;
  179. btnStop.Enabled := False;
  180. btnStopFade.Enabled := False;
  181. btnPause.Caption := 'Pause';
  182. btnPause.Enabled := False;
  183. SliderPosition.Position := 0;
  184. SliderPosition.Enabled := False;
  185. SliderPitch.Enabled := False;
  186. end;
  187. {------------------------------------------------------------------------------}
  188. procedure TForm1.AudioPlayerPause(Sender: TObject);
  189. begin
  190. btnPause.Caption := 'Resume';
  191. btnPlay.Enabled := True;
  192. btnStopFade.Enabled := False;
  193. end;
  194. {------------------------------------------------------------------------------}
  195. procedure TForm1.AudioPlayerRestart(Sender: TObject);
  196. begin
  197. btnPause.Caption := 'Pause';
  198. btnPlay.Enabled := False;
  199. btnStopFade.Enabled := True;
  200. end;
  201. {------------------------------------------------------------------------------}
  202. procedure TForm1.TimerTimer(Sender: TObject);
  203. begin
  204. if not Seeking then
  205. begin
  206. SliderPosition.Position := AudioPlayer.Position;
  207. Label1.Caption := TimeToString(SliderPosition.Position);
  208. PlayGauge.Progress :=(SliderPosition.Position*100)div SliderPosition.MaxValue;
  209. end;
  210. end;
  211. {------------------------------------------------------------------------------}
  212. procedure TForm1.SliderPitchChange(Sender: TObject);
  213. begin
  214. AudioPlayer.Pitch := SliderPitch.Position;
  215. end;
  216. {------------------------------------------------------------------------------}
  217. procedure TForm1.Timer1Timer(Sender: TObject);
  218. begin
  219. if (FileStream.Position < FileStream.Size) then
  220. begin
  221. CopyData(32768);
  222. StreamGauge.Progress := (MemStream.Position*100)div MemStream.Size;
  223. end
  224. else Timer1.Enabled := False;
  225. end;
  226. end.