home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / DELPHIX.ZIP / Samples / Sound / AStream / Main.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1998-10-06  |  6.7 KB  |  282 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ExtCtrls, Menus, ComCtrls, DXSounds, MMSystem, Wave;
  8.  
  9. type
  10.   TMainForm = class(TForm)
  11.     DXSound: TDXSound;
  12.     Timer: TTimer;
  13.     PlayButton: TButton;
  14.     PanTrackBar: TTrackBar;
  15.     MainMenu1: TMainMenu;
  16.     FileMenu: TMenuItem;
  17.     FileOpen: TMenuItem;
  18.     FileClose: TMenuItem;
  19.     FileEnd: TMenuItem;
  20.     N1: TMenuItem;
  21.     LoopCheckBox: TCheckBox;
  22.     VolumeTrackBar: TTrackBar;
  23.     FrequencyTrackBar: TTrackBar;
  24.     ProgressTrackBar: TTrackBar;
  25.     StopButton: TButton;
  26.     PanLabel: TLabel;
  27.     VolumeLabel: TLabel;
  28.     FrequencyLabel: TLabel;
  29.     ProgressLabel: TLabel;
  30.     OpenDialog: TOpenDialog;
  31.     Bevel1: TBevel;
  32.     BytesLabel: TLabel;
  33.     PauseButton: TButton;
  34.     O1: TMenuItem;
  35.     GlobalFocusItem: TMenuItem;
  36.     procedure TimerTimer(Sender: TObject);
  37.     procedure FileCloseClick(Sender: TObject);
  38.     procedure StopButtonClick(Sender: TObject);
  39.     procedure FormShow(Sender: TObject);
  40.     procedure FileOpenClick(Sender: TObject);
  41.     procedure PlayButtonClick(Sender: TObject);
  42.     procedure LoopCheckBoxClick(Sender: TObject);
  43.     procedure PanTrackBarChange(Sender: TObject);
  44.     procedure VolumeTrackBarChange(Sender: TObject);
  45.     procedure FrequencyTrackBarChange(Sender: TObject);
  46.     procedure FileEndClick(Sender: TObject);
  47.     procedure ProgressTrackBarChange(Sender: TObject);
  48.     procedure PauseButtonClick(Sender: TObject);
  49.     procedure DXSoundFinalize(Sender: TObject);
  50.     procedure GlobalFocusItemClick(Sender: TObject);
  51.   private
  52.     FUpdating: Boolean;
  53.     procedure ChangeStates;
  54.   public
  55.     Audio: TAudioFileStream;
  56.   end;
  57.  
  58. var
  59.   MainForm: TMainForm;
  60.  
  61. implementation
  62.  
  63. {$R *.DFM}
  64.  
  65. procedure TMainForm.DXSoundFinalize(Sender: TObject);
  66. begin
  67.   Audio.Free; Audio := nil;
  68. end;
  69.  
  70. procedure TMainForm.FormShow(Sender: TObject);
  71. begin
  72.   ChangeStates;
  73. end;
  74.  
  75. procedure TMainForm.FileOpenClick(Sender: TObject);
  76. var
  77.   WaveFormat: TWaveFormatEx;
  78. begin
  79.   if not OpenDialog.Execute then Exit;
  80.  
  81.   FileCloseClick(nil);
  82.   try
  83.     Caption := Application.Title + ' - ' + ExtractFileName(OpenDialog.FileName);
  84.  
  85.     DXSound.Initialize;
  86.  
  87.     Audio := TAudioFileStream.Create(DXSound.DSound);
  88.     Audio.AutoUpdate := True;
  89.     Audio.BufferLength := 1000;
  90.     Audio.FileName := OpenDialog.FileName;
  91.     Audio.Looped := LoopCheckBox.Checked;
  92.  
  93.     {  Setting of format of primary buffer.  }
  94.     MakePCMWaveFormatEx(WaveFormat, 44100, Audio.Format.wBitsPerSample, 2);
  95.     DXSound.Primary.SetFormat(WaveFormat);
  96.  
  97.  
  98.     ChangeStates;
  99.  
  100.     PlayButton.Enabled := True;
  101.     PauseButton.Enabled := False;
  102.     StopButton.Enabled := False;
  103.  
  104.     LoopCheckBox.Enabled := True;
  105.     PanTrackBar.Enabled := True;
  106.     VolumeTrackBar.Enabled := True;
  107.     FrequencyTrackBar.Enabled := True;
  108.     ProgressTrackBar.Enabled := True;
  109.  
  110.     FUpdating := True;
  111.     try
  112.       PanTrackBar.Position := Audio.Pan;
  113.       VolumeTrackBar.Position := Audio.Volume;
  114.       FrequencyTrackBar.Position := Audio.Frequency;
  115.       ProgressTrackBar.Max := Audio.Size;
  116.       ProgressTrackBar.PageSize := ProgressTrackBar.Max div 25;
  117.     finally
  118.       FUpdating := False;
  119.     end;
  120.   except
  121.     FileCloseClick(nil);
  122.     raise;
  123.   end;
  124. end;
  125.  
  126. procedure TMainForm.FileCloseClick(Sender: TObject);
  127. begin
  128.   Timer.Enabled := False;
  129.  
  130.   DXSound.Finalize;
  131.  
  132.   Caption := Application.Title;
  133.  
  134.   PlayButton.Enabled := False;
  135.   PauseButton.Enabled := False;
  136.   StopButton.Enabled := False;
  137.  
  138.   LoopCheckBox.Enabled := False;
  139.   PanTrackBar.Enabled := False;
  140.   VolumeTrackBar.Enabled := False;
  141.   FrequencyTrackBar.Enabled := False;
  142.   ProgressTrackBar.Enabled := False;
  143.  
  144.   ChangeStates;
  145. end;
  146.  
  147. procedure TMainForm.PanTrackBarChange(Sender: TObject);
  148. begin
  149.   if not FUpdating then
  150.   begin
  151.     Audio.Pan := PanTrackBar.Position*100;
  152.     ChangeStates;
  153.   end;
  154. end;
  155.  
  156. procedure TMainForm.VolumeTrackBarChange(Sender: TObject);
  157. begin
  158.   if not FUpdating then
  159.   begin
  160.     Audio.Volume := VolumeTrackBar.Position*100;
  161.     ChangeStates;
  162.   end;
  163. end;
  164.  
  165. procedure TMainForm.FrequencyTrackBarChange(Sender: TObject);
  166. begin
  167.   if not FUpdating then
  168.   begin
  169.     Audio.Frequency := FrequencyTrackBar.Position;
  170.     ChangeStates;
  171.   end;
  172. end;
  173.  
  174. procedure TMainForm.LoopCheckBoxClick(Sender: TObject);
  175. begin
  176.   Audio.Looped := LoopCheckBox.Checked;
  177. end;
  178.  
  179. procedure TMainForm.PlayButtonClick(Sender: TObject);
  180. begin
  181.   Audio.Play;
  182.  
  183.   PlayButton.Enabled := False;
  184.   PauseButton.Enabled := True;
  185.   StopButton.Enabled := True;
  186.   Timer.Enabled := True;
  187. end;
  188.  
  189. procedure TMainForm.PauseButtonClick(Sender: TObject);
  190. begin
  191.   Audio.Stop;
  192.  
  193.   PlayButton.Enabled := True;
  194.   PauseButton.Enabled := False;
  195.   StopButton.Enabled := False;
  196.   Timer.Enabled := False;
  197.  
  198.   ChangeStates;
  199. end;
  200.  
  201. procedure TMainForm.StopButtonClick(Sender: TObject);
  202. begin
  203.   Audio.Stop;
  204.   Audio.Position := 0;
  205.  
  206.   PlayButton.Enabled := True;
  207.   PauseButton.Enabled := False;
  208.   StopButton.Enabled := False;
  209.   Timer.Enabled := False;
  210.  
  211.   ChangeStates;
  212. end;
  213.  
  214. procedure TMainForm.TimerTimer(Sender: TObject);
  215. begin
  216.   if Audio.Playing then
  217.   begin
  218.     ChangeStates;
  219.   end else
  220.   begin
  221.     Audio.Position := 0;
  222.     StopButtonClick(nil);
  223.   end;
  224. end;
  225.  
  226. procedure TMainForm.ChangeStates;
  227. var
  228.   s: Integer;
  229. begin
  230.   if Audio<>nil then
  231.   begin
  232.     s := Audio.Position div Integer(Audio.Format^.nBlockAlign) div Integer(Audio.Format^.nSamplesPerSec);
  233.  
  234.     PanLabel.Caption := Format('Pan: %ddB', [Audio.Pan div 100]);
  235.     VolumeLabel.Caption := Format('Volume: %ddB', [Audio.Volume div 100]);
  236.     FrequencyLabel.Caption := Format('Frequency: %dHz', [Audio.Frequency]);
  237.     ProgressLabel.Caption := Format('Time: %.2d:%.2d:%.2d', [(s div 60) div 60, (s div 60) mod 60, s mod 60]);
  238.     ProgressTrackBar.Position := Audio.Position;
  239.  
  240.     BytesLabel.Caption := Format('%d Bytes', [Audio.Position]);
  241.   end else
  242.   begin
  243.     PanLabel.Caption := 'Pan';
  244.     VolumeLabel.Caption := 'Volume';
  245.     FrequencyLabel.Caption := 'Frequency';
  246.     ProgressLabel.Caption := 'Time';
  247.     BytesLabel.Caption := 'Bytes';
  248.   end;
  249. end;
  250.  
  251. procedure TMainForm.FileEndClick(Sender: TObject);
  252. begin
  253.   Close;
  254. end;
  255.  
  256. procedure TMainForm.ProgressTrackBarChange(Sender: TObject);
  257. begin
  258.   if not FUpdating then
  259.   begin
  260.     Audio.Position := ProgressTrackBar.Position;
  261.     ChangeStates;
  262.   end;
  263. end;
  264.  
  265. procedure TMainForm.GlobalFocusItemClick(Sender: TObject);
  266. begin
  267.   GlobalFocusItem.Checked := not GlobalFocusItem.Checked;
  268.  
  269.   if GlobalFocusItem.Checked then
  270.     DXSound.Options := DXSound.Options + [soGlobalFocus]
  271.   else
  272.     DXSound.Options := DXSound.Options - [soGlobalFocus];
  273.  
  274.   if Audio<>nil then
  275.   begin
  276.     {  Buffer re-making  }
  277.     Audio.RecreateBuf;
  278.   end;
  279. end;
  280.  
  281. end.
  282.