Unit1.pas 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  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/mmtools.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: 06.09.98 - 14:37:22 $ =}
  24. {========================================================================}
  25. unit Unit1;
  26. interface
  27. uses
  28. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  29. StdCtrls, FileCtrl, MMWave, MMObj, MMUtils, MMWheel, Mask, ExtCtrls, MMVolume, MMConect,
  30. MMRingBf, MMWMixer, MMDSPObj, MMWavOut, MMHTimer, MMDesign, MMDIBCv,
  31. MMLevel, MMCstDlg, MMDSPMtr, MMLEDS, MMACMCvt, MMHook, MMAudio;
  32. type
  33. TMainForm = class(TForm)
  34. MMDesigner1: TMMDesigner;
  35. WaveOut1: TMMWaveOut;
  36. RingBuffer1: TMMRingBuffer;
  37. Connector1: TMMConnector;
  38. Panel1: TPanel;
  39. Volume1: TMMWheel;
  40. Label5: TLabel;
  41. Label6: TLabel;
  42. Panning1: TMMWheel;
  43. FilePanel1: TPanel;
  44. btnFile1: TButton;
  45. FName1: TLabel;
  46. btnStart1: TButton;
  47. btnStop1: TButton;
  48. Level1: TMMLevel;
  49. Level2: TMMLevel;
  50. Panel2: TPanel;
  51. Label1: TLabel;
  52. Label2: TLabel;
  53. MMLevel1: TMMLevel;
  54. MMLevel2: TMMLevel;
  55. Volume2: TMMWheel;
  56. Panning2: TMMWheel;
  57. Panel3: TPanel;
  58. FName2: TLabel;
  59. btnFile2: TButton;
  60. btnStart2: TButton;
  61. btnStop2: TButton;
  62. RingBuffer2: TMMRingBuffer;
  63. WaveOut2: TMMWaveOut;
  64. Connector2: TMMConnector;
  65. btnDevice1: TButton;
  66. btnDevice2: TButton;
  67. OpenDialog: TOpenDialog;
  68. AudioFile1: TMMAudioFile;
  69. AudioFile2: TMMAudioFile;
  70. procedure btnStartClick(Sender: TObject);
  71. procedure btnStopClick(Sender: TObject);
  72. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  73. procedure btnFileClick(Sender: TObject);
  74. procedure VolumeChange(Sender: TObject);
  75. procedure PanningChange(Sender: TObject);
  76. procedure WaveOut1Start(Sender: TObject);
  77. procedure WaveOut1Stop(Sender: TObject);
  78. procedure btnDeviceClick(Sender: TObject);
  79. private
  80. public
  81. end;
  82. var
  83. MainForm: TMainForm;
  84. implementation
  85. {$R *.DFM}
  86. uses unit2;
  87. {-- TMainForm -----------------------------------------------------------------}
  88. procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
  89. begin
  90. WaveOut1.Close;
  91. WaveOut2.Close;
  92. end;
  93. {-- TMainForm -----------------------------------------------------------------}
  94. procedure TMainForm.WaveOut1Start(Sender: TObject);
  95. begin
  96. case TControl(Sender).Tag of
  97. 0: begin
  98. btnFile1.Enabled := False;
  99. btnDevice1.Enabled := False;
  100. btnStart1.Enabled := False;
  101. btnStop1.Enabled := True;
  102. end;
  103. 1: begin
  104. btnFile2.Enabled := False;
  105. btnDevice2.Enabled := False;
  106. btnStart2.Enabled := False;
  107. btnStop2.Enabled := True;
  108. end;
  109. end;
  110. end;
  111. {-- TMainForm -----------------------------------------------------------------}
  112. procedure TMainForm.WaveOut1Stop(Sender: TObject);
  113. begin
  114. case TControl(Sender).Tag of
  115. 0: begin
  116. WaveOut1.Close;
  117. btnFile1.Enabled := True;
  118. btnDevice1.Enabled := True;
  119. btnStart1.Enabled := True;
  120. btnStop1.Enabled := False;
  121. end;
  122. 1: begin
  123. WaveOut2.Close;
  124. btnFile2.Enabled := True;
  125. btnDevice2.Enabled := True;
  126. btnStart2.Enabled := True;
  127. btnStop2.Enabled := False;
  128. end;
  129. end;
  130. end;
  131. {-- TMainForm -----------------------------------------------------------------}
  132. procedure TMainForm.btnDeviceClick(Sender: TObject);
  133. begin
  134. with TPreferencesForm.Create(Self) do
  135. try
  136. case TControl(Sender).Tag of
  137. 0: begin
  138. WaveOut := WaveOut1;
  139. RingBuffer:= RingBuffer1;
  140. end;
  141. 1: begin
  142. WaveOut := WaveOut2;
  143. RingBuffer:= RingBuffer2;
  144. end;
  145. end;
  146. ShowModal;
  147. finally
  148. Free;
  149. end;
  150. end;
  151. {-- TMainForm -----------------------------------------------------------------}
  152. procedure TMainForm.btnStartClick(Sender: TObject);
  153. begin
  154. case TControl(Sender).Tag of
  155. 0: begin
  156. WaveOut1.Start;
  157. end;
  158. 1: begin
  159. WaveOut2.Start;
  160. end;
  161. end;
  162. end;
  163. {-- TMainForm -----------------------------------------------------------------}
  164. procedure TMainForm.btnStopClick(Sender: TObject);
  165. begin
  166. case TControl(Sender).Tag of
  167. 0: begin
  168. WaveOut1.Close;
  169. end;
  170. 1: begin
  171. WaveOut2.Close;
  172. end;
  173. end;
  174. end;
  175. {-- TMainForm -----------------------------------------------------------------}
  176. procedure TMainForm.btnFileClick(Sender: TObject);
  177. procedure UpdateFileLabel(Tag: integer);
  178. begin
  179. case Tag of
  180. 0: FName1.Caption := MinimizeName(AudioFile1.FileName,FName1.Canvas,FName1.Width);
  181. 1: FName2.Caption := MinimizeName(AudioFile2.FileName,FName2.Canvas,FName2.Width);
  182. end;
  183. end;
  184. begin
  185. if OpenDialog.Execute then
  186. begin
  187. case TControl(Sender).Tag of
  188. 0: begin
  189. AudioFile1.FileName := OpenDialog.FileName;
  190. btnStart1.Enabled := not AudioFile1.Empty;
  191. end;
  192. 1: begin
  193. AudioFile2.FileName := OpenDialog.FileName;
  194. btnStart2.Enabled := not AudioFile2.Empty;
  195. end;
  196. end;
  197. UpdateFileLabel(TControl(Sender).Tag);
  198. end;
  199. end;
  200. {-- TMainForm -----------------------------------------------------------------}
  201. procedure TMainForm.VolumeChange(Sender: TObject);
  202. begin
  203. case TControl(Sender).Tag of
  204. 0: AudioFile1.Volume := Volume1.Value;
  205. 1: AudioFile2.Volume := Volume2.Value;
  206. end;
  207. end;
  208. {-- TMainForm -----------------------------------------------------------------}
  209. procedure TMainForm.PanningChange(Sender: TObject);
  210. begin
  211. case TControl(Sender).Tag of
  212. 0: AudioFile1.Panning := Panning1.Value;
  213. 1: AudioFile2.Panning := Panning2.Value;
  214. end;
  215. end;
  216. end.