home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / DELPHIX.ZIP / Source / DXWaveEdit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-10-06  |  6.5 KB  |  275 lines

  1. unit DXWaveEdit;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, SysUtils, Classes, Forms, Dialogs, Controls, StdCtrls, ExtCtrls,
  7.   Buttons, ComCtrls, DXSounds, Wave;
  8.  
  9. type
  10.  
  11.   {  TDelphiXWaveEditForm  }
  12.  
  13.   TDelphiXWaveEditForm = class(TForm)
  14.     Bevel2: TBevel;
  15.     OKButton: TButton;
  16.     CancelButton: TButton;
  17.     SaveDialog: TSaveDialog;
  18.     OpenDialog: TOpenDialog;
  19.     PlayImage: TImage;
  20.     StopImage: TImage;
  21.     Timer: TTimer;
  22.     DXSound: TDXSound;
  23.     ClearButton: TButton;
  24.     SaveButton: TButton;
  25.     LoadButton: TButton;
  26.     Panel1: TPanel;
  27.     TrackBar: TTrackBar;
  28.     TestButton: TSpeedButton;
  29.     LengthLabel: TLabel;
  30.     FrequencyLabel: TLabel;
  31.     TypeLabel: TLabel;
  32.     SizeLabel: TLabel;
  33.     LengthValueLabel: TLabel;
  34.     FrequencyValueLabel: TLabel;
  35.     TypeValueLabel: TLabel;
  36.     SizeValueLabel: TLabel;
  37.     procedure OKButtonClick(Sender: TObject);
  38.     procedure CancelButtonClick(Sender: TObject);
  39.     procedure LoadButtonClick(Sender: TObject);
  40.     procedure SaveButtonClick(Sender: TObject);
  41.     procedure ClearButtonClick(Sender: TObject);
  42.     procedure FormShow(Sender: TObject);
  43.     procedure DXSoundInitialize(Sender: TObject);
  44.     procedure DXSoundFinalize(Sender: TObject);
  45.     procedure TestButtonClick(Sender: TObject);
  46.     procedure TimerTimer(Sender: TObject);
  47.     procedure TrackBarChange(Sender: TObject);
  48.     procedure FormDestroy(Sender: TObject);
  49.   private
  50.     FChanged: Boolean;
  51.     FAudio: TAudioStream;
  52.     FPlaying: Boolean;
  53.     FWaveStream: TCustomWaveStream;
  54.     FWaveFileName: string;
  55.     procedure UpDateData;
  56.     procedure SetPlaying(Value: Boolean);
  57.     property Playing: Boolean read FPlaying write SetPlaying;
  58.   public
  59.     Wave: TWave;
  60.   end;
  61.  
  62. var
  63.   DelphiXWaveEditForm: TDelphiXWaveEditForm;
  64.  
  65. implementation
  66.  
  67. uses DXConsts;
  68.  
  69. {$R *.DFM}
  70.  
  71. {  TDelphiXWaveEditForm  }
  72.  
  73. procedure TDelphiXWaveEditForm.FormDestroy(Sender: TObject);
  74. begin
  75.   FWaveStream.Free;
  76. end;
  77.  
  78. procedure TDelphiXWaveEditForm.FormShow(Sender: TObject);
  79. begin
  80.   if Wave.Size>0 then
  81.     FWaveStream := TWaveObjectStream.Create(Wave);
  82.  
  83.   TestButton.Glyph := PlayImage.Picture.Bitmap;
  84.   UpDateData;
  85. end;
  86.  
  87. procedure TDelphiXWaveEditForm.OKButtonClick(Sender: TObject);
  88. begin
  89.   Playing := False;
  90.  
  91.   if FChanged then
  92.   begin
  93.     if FWaveStream=nil then
  94.       Wave.Clear
  95.     else
  96.       Wave.LoadFromFile(FWaveFileName);
  97.  
  98.     Tag := 1;
  99.   end;
  100.  
  101.   Close;
  102. end;
  103.  
  104. procedure TDelphiXWaveEditForm.CancelButtonClick(Sender: TObject);
  105. begin
  106.   Close;
  107. end;
  108.  
  109. procedure TDelphiXWaveEditForm.ClearButtonClick(Sender: TObject);
  110. begin
  111.   Playing := False;
  112.  
  113.   FChanged := True;
  114.   FWaveStream.Free; FWaveStream := nil;
  115.   UpdateData;
  116. end;
  117.  
  118. procedure TDelphiXWaveEditForm.LoadButtonClick(Sender: TObject);
  119. var
  120.   Stream: TWaveFileStream;
  121. begin
  122.   if OpenDialog.Execute then
  123.   begin
  124.     Playing := False;
  125.  
  126.     Stream := TWaveFileStream.Create(OpenDialog.FileName, fmOpenRead or fmShareDenyWrite);
  127.     Stream.Open(False);
  128.  
  129.     FWaveStream.Free; FWaveStream := Stream;
  130.     FWaveFileName := OpenDialog.FileName;
  131.     FChanged := True;
  132.     UpdateData;
  133.   end;
  134. end;
  135.  
  136. procedure TDelphiXWaveEditForm.SaveButtonClick(Sender: TObject);
  137. var
  138.   Dest, Source: TStream;
  139. begin
  140.   if SaveDialog.Execute then
  141.   begin
  142.     Playing := False;
  143.  
  144.     if FChanged then
  145.     begin
  146.       if AnsiCompareFileName(FWaveFileName, SaveDialog.FileName)=0 then Exit;
  147.  
  148.       Source := TFileStream.Create(FWaveFileName, fmOpenRead or fmShareDenyWrite);
  149.       try
  150.         Dest := TFileStream.Create(SaveDialog.FileName, fmCreate);
  151.         try
  152.           Dest.CopyFrom(Source, Source.Size);
  153.         finally
  154.           Dest.Free;
  155.         end;
  156.       finally
  157.         Source.Free;
  158.       end;
  159.     end else
  160.     begin
  161.       Wave.SaveToFile(SaveDialog.FileName);
  162.     end;
  163.   end;
  164. end;
  165.  
  166. procedure TDelphiXWaveEditForm.SetPlaying(Value: Boolean);
  167. begin
  168.   if FPlaying<>Value then
  169.   begin
  170.     if FPlaying then
  171.     begin
  172.       Timer.Enabled := False;
  173.       FAudio.Stop;
  174.       TrackBar.Position := FAudio.Position;
  175.       DXSound.Finalize;
  176.     end;
  177.  
  178.     if Value then
  179.     begin
  180.       DXSound.Initialize;
  181.       DXSound.Primary.SetFormat(FAudio.Format^);
  182.  
  183.       FAudio.Position := TrackBar.Position;
  184.       FAudio.Play;
  185.  
  186.       Timer.Enabled := True;
  187.  
  188.       TestButton.Glyph := StopImage.Picture.Bitmap
  189.     end else
  190.       TestButton.Glyph := PlayImage.Picture.Bitmap;
  191.  
  192.     FPlaying := Value;
  193.   end;
  194. end;
  195.  
  196. procedure TDelphiXWaveEditForm.UpDateData;
  197. begin
  198.   TestButton.Enabled := False;
  199.   TrackBar.Enabled := False;
  200.   Timer.Enabled := False;
  201.  
  202.   if FWaveStream<>nil then
  203.   begin
  204.     ClearButton.Enabled := True;
  205.     SaveButton.Enabled := True;
  206.  
  207.     TrackBar.Position := 0;
  208.     TrackBar.Max := FWaveStream.Size;
  209.     TestButton.Enabled := True;
  210.     TrackBar.Enabled := True;
  211.  
  212.     LengthValueLabel.Caption := Format(SWaveLength, [FWaveStream.Size/FWaveStream.Format^.nAvgBytesPerSec]);
  213.  
  214.     FrequencyValueLabel.Caption := Format(SWaveFrequency, [FWaveStream.Format^.nSamplesPerSec]);
  215.  
  216.     TypeValueLabel.Caption := Format(SWaveBitCount, [FWaveStream.Format^.wBitsPerSample]) + ' ';
  217.  
  218.     case FWaveStream.Format^.nChannels of
  219.       1: TypeValueLabel.Caption := TypeValueLabel.Caption + SWaveMono;
  220.       2: TypeValueLabel.Caption := TypeValueLabel.Caption + SWaveStereo;
  221.     end;
  222.  
  223.     SizeValueLabel.Caption := Format(SWaveSize, [FWaveStream.Size]);
  224.   end else
  225.   begin
  226.     LengthValueLabel.Caption := Format(SWaveLength, [0.0]);
  227.     FrequencyValueLabel.Caption := Format(SWaveFrequency, [0]);
  228.     TypeValueLabel.Caption := Format(SWaveBitCount, [0]) + ' ' + SWaveMono;
  229.     SizeValueLabel.Caption := Format(SWaveSize, [0]);
  230.  
  231.     ClearButton.Enabled := False;
  232.     SaveButton.Enabled := False;
  233.     TrackBar.Position := 0;
  234.   end;
  235. end;
  236.  
  237. procedure TDelphiXWaveEditForm.DXSoundInitialize(Sender: TObject);
  238. begin
  239.   FAudio := TAudioStream.Create(DXSound.DSound);
  240.   FAudio.WaveStream := FWaveStream;
  241.   FAudio.BufferLength := 200;
  242. end;
  243.  
  244. procedure TDelphiXWaveEditForm.DXSoundFinalize(Sender: TObject);
  245. begin
  246.   FAudio.Free; FAudio := nil;
  247. end;
  248.  
  249. procedure TDelphiXWaveEditForm.TestButtonClick(Sender: TObject);
  250. begin
  251.   Playing := not Playing;
  252. end;
  253.  
  254. procedure TDelphiXWaveEditForm.TimerTimer(Sender: TObject);
  255. begin
  256.   FAudio.Update;
  257.   if FAudio.Playing then
  258.   begin
  259.     TrackBar.Position := FAudio.Position;
  260.   end else
  261.   begin
  262.     Playing := False;
  263.     TrackBar.Position := 0;
  264.   end;
  265. end;
  266.  
  267. procedure TDelphiXWaveEditForm.TrackBarChange(Sender: TObject);
  268. begin
  269.   if FAudio<>nil then
  270.     FAudio.Position := TrackBar.Position;
  271. end;
  272.  
  273.  
  274. end.
  275.