Система обработки аудиоинформации. Подсистема фильтрации и обработки сигнала
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
tatus<>waiting then Exit;
Status := deformation;
SaveUndoInfo;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
SetVolumeOfAudio(AudioData, Start, Finish-Start+1, VolumeEdit.Value/100);
end;
Status := waiting;
PaintBox1.Repaint;
end;
procedure TMainForm.ChangeVolumeBitBtnClick(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>waiting then Exit;
Status := deformation;
SaveUndoInfo;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
ChangeVolumeOfAudio(AudioData, Start, Finish-Start+1, VolumeEdit.Value/100);
end;
Status := waiting;
PaintBox1.Repaint;
end;
procedure TMainForm.NormalizeBitBtnClick(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>waiting then Exit;
Status := deformation;
SaveUndoInfo;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
Normalize(AudioData, Start, Finish-Start+1);
end;
Status := waiting;
end;
procedure TMainForm.EffectButtonClick(Sender: TObject);
var
AudioSize: Cardinal;
begin
if Status<>waiting then Exit;
Status := deformation;
SaveUndoInfo;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
if Sender = BitBtn13 then Echo(AudioData, Start, Finish-Start+1, EffOptionsForm.nResponsesEdit.Value, EffOptionsForm.ResponseTimeEdit.Value, EffOptionsForm.ResponseVolumeEdit.Value/100);
if Sender = BitBtn14 then Reverberation(AudioData, Start, Finish-Start+1, EffOptionsForm.nEchosEdit.Value, EffOptionsForm.DelayEdit.Value, EffOptionsForm.EchoVolumeEdit.Value/100);
if Sender = BitBtn15 then ChangeVolumeOfAudio(AudioData, Start, Finish-Start+1, 0);
if Sender = BitBtn16 then ReChangeVolumeOfAudio(AudioData, Start, Finish-Start+1, 1);
{case EffectBox.ItemIndex of
0: ChangeVolumeOfAudio(AudioData, Start, Finish-Start+1, 0);
1: ReChangeVolumeOfAudio(AudioData, Start, Finish-Start+1, 1);
2: Echo(AudioData, Start, Finish-Start+1, nResponsesEdit.Value, ResponseTimeEdit.Value, ResponseVolumeEdit.Value/100);
3: Reverberation(AudioData, Start, Finish-Start+1, nEchosEdit.Value, DelayEdit.Value, EchoVolumeEdit.Value/100);
end;}
end;
Status := waiting;
PaintBox1.Repaint;
end;
procedure TMainForm.PaintAudioGraph;
var
PaintPos, MaxPaintPos: Cardinal;
AudioPos, {SamplesPerPoint,} LeftSamples, MaxAmplitude: Cardinal;
numChannels, Channel, i: Word;
Smp, Smp1: Integer;
begin
with PaintBox1.Canvas do
begin
Pen.Color := clBlack;
MoveTo(Round(PaintBox1.Width/2),0);
LineTo(Round(PaintBox1.Width/2), Round(PaintBox1.Height));
MoveTo(0, Round(PaintBox1.Height/2));
LineTo(PaintBox1.Width, Round(PaintBox1.Height/2));
Pen.Color := clGreen;
end;
MaxPaintPos := PaintBox1.Width;
=0then"> if AudioPosition-PaintBox1.Width*SamplesPerPoint >= 0 then
begin
AudioPos := AudioPosition-PaintBox1.Width*SamplesPerPoint;
PaintPos := 0;
end
else
begin
AudioPos := 0;
PaintPos := PaintBox1.Width - Trunc(AudioPosition/SamplesPerPoint);
end;
numChannels := AudioData.nChannels;
MaxAmplitude := 1;
for i := 1 to AudioData.nBitsPerSample do
MaxAmplitude := MaxAmplitude*2;
Smp := 0;
for Channel := 0 to numChannels-1 do
begin
AudioData.ReadSample(AudioPos, Channel, Smp1);
Smp := Smp + Smp1;
end;
Smp := Round(Smp/numChannels);
PaintBox1.Canvas.MoveTo(PaintPos-Round(PaintBox1.Width/2), Round(PaintBox1.Height/2-Smp/MaxAmplitude*PaintBox1.Height));
LeftSamples := SamplesPerPoint;
while PaintPos<=(MaxPaintPos+Round(PaintBox1.Width/2)) do
begin
Smp := 0;
for Channel := 0 to numChannels-1 do
begin
AudioData.ReadSample(AudioPos, Channel, Smp1);
Smp := Smp + Smp1;
end;
if (Selection.StartExists)and(Selection.FinishExists)and
Selection.Start)and(AudioPosSelection.Start)and(AudioPos<Selection.Finish)
then PaintBox1.Canvas.Pen.Color := clRed
else PaintBox1.Canvas.Pen.Color := clGreen;
Smp := Round(Smp/numChannels);
PaintBox1.Canvas.LineTo(PaintPos-Round(PaintBox1.Width/2), Round(PaintBox1.Height/2-Smp/MaxAmplitude*PaintBox1.Height));
Inc(AudioPos);
Dec(LeftSamples);
if LeftSamples = 0 then
begin
Inc(PaintPos);
LeftSamples := SamplesPerPoint;
end;
end;
end;
procedure TMainForm.PaintBox1Paint(Sender: TObject);
begin
PaintAudioGraph;
end;
procedure TMainForm.WaveOutButtonClick(Sender: TObject);
begin
ShellExecute(Handle, open, PChar(sndvol32.exe), , , SW_Show);
end;
procedure TMainForm.WaveInButtonClick(Sender: TObject);
begin
ShellExecute(Handle, open, PChar(sndvol32.exe), PChar(/r), , SW_Show);
end;
procedure TMainForm.CopyToFileButtonClick(Sender: TObject);
var
FileName, Ext, EncMode, StereoMode, BitRate: String;
i: Byte;
TempAudio: TAudioData;
Code: Integer;
PCM: TPCMFile;
MP3: TMP3File;
EM1: TEM1File;
AudioSize: Cardinal;
begin
if Status<>waiting then Exit;
if SaveDialog.Execute then
FileName := SaveDialog.FileName else Exit;
Ext := ExtractFileExt(FileName);
with AudioData do
AudioSize := Data.Size div nBlockAlign;
TempAudio := TAudioData.Create;
with Selection do
begin
if not StartExists or not FinishExists then
begin
DeleteMarkers;
Start := 0;
Finish := AudioSize-1;
end;
CopyAudio(AudioData, TempAudio, Start, Finish);
end;
for i := 1 to Length(Ext) do Ext[i] := UpCase(Ext[i]);
if Ext = .WAV then
begin
PCM := TPCMFile.Create(FileName, TempAudio);
PCM.Destroy;
end;
if Ext = .MP3 then
begin
if RadioButton1.Checked then
begin
BitRate := MP3OptionsForm.ConstantBitRateComboBox.Text;
EncMode := -b;
end;
if RadioButton2.Checked then
begin
BitRate := MP3OptionsForm.AverageBitRateComboBox.Text;
EncMode := --abr;
end;
if RadioButton3.Checked then
begin
Str(MP3OptionsForm.VariableBitrateComboBox.ItemIndex, BitRate);
EncMode := -V;
end;
case MP3OptionsForm.StereoModeComboBox.ItemIndex of
0: StereoMode := s;
1: StereoMode := j;
2: StereoMode := f;
3: StereoMode := d;
4: StereoMode := m;
end;
MP3 := TMP3File.Create(FileName, TempAudio, BitRate, EncMode, StereoMode);
MP3.Destroy;
end;
if Ext = .EM1 then
begin
EM1 := TEM1File.Create(FileName, TempAudio);
EM1.Destroy;
end;
TempAudio.Destroy;
end;
procedure TMainForm.SaveUndoInfo;
begin
if not UndoCheckBox.Checked then Exit;
UndoInfo.AudioPosition := AudioPosition;
UndoInfo.Selection.Start := Selection.Start;
UndoInfo.Selection.Finish := Selection.Finish;
UndoInfo.Selection.StartExists := Selection.StartExists;
UndoInfo.Selection.FinishExists := Selection.FinishExists;
UndoInfo.AudioData.Data.Clear;
CopyAudio(AudioData, UndoInfo.AudioData, 0, AudioData.Data.Size div AudioData.nBlockAlign - 1);
end;
procedure TMainForm.UndoButtonClick(Sender: TObject);
begin
if Status<>waiting then Exit;
if UndoInfo.AudioData.Data.Size = 0 then Exit;
Status := undo;
DeleteMarkers;
AudioData.Data.Clear;
CopyAudio(UndoInfo.AudioData, AudioData, 0, UndoInfo.AudioData.Data.Si