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