Ðåôåðàòû. Ñèñòåìà îáðàáîòêè àóäèîèíôîðìàöèè. Ïîäñèñòåìà ôèëüòðàöèè è îáðàáîòêè ñèãíàëà

 Terminate;

 Exit;

 end;

 MainForm.RecordButton.Flat := True;

 for i := 0 to BufNumber-1 do

 begin

 WaveHdr[i].lpData := @Buf[i];

 WaveHdr[i].dwBufferLength := BlockSize;

 WaveInPrepareHeader(WaveIn, @WaveHdr[i], SizeOf(TWaveHdr));

 end;

 WaveInStart(WaveIn);

 WaitForSingleObject(hEvent, INFINITE);

 for i := 0 to BufNumber-1 do

 WaveInAddBuffer(WaveIn, @WaveHdr[i], SizeOf(TWaveHdr));

 i := BufNumber-1;

 while not Terminated do

 begin

 if i = BufNumber-1 then i := 0 else Inc(i);

 if (WaveHdr[i].dwFlags and WHDR_DONE) <> WHDR_DONE then

 WaitForSingleObject(hEvent, INFINITE);

 AudioData.Data.Position := AudioPosition*AudioData.nBlockAlign;

 AudioData.Data.Write(Buf[i], WaveHdr[i].dwBytesRecorded);

 AudioPosition := AudioPosition + (WaveHdr[i].dwBytesRecorded div AudioData.nBlockAlign);

 WaveInAddBuffer(WaveIn, @WaveHdr[i], SizeOf(TWaveHdr));

 MainForm.SetAudioPosition;

 end;

 WaveInReset(WaveIn);

 for i := 0 to BufNumber-1 do

 WaveInUnprepareHeader(WaveIn, @WaveHdr[i], SizeOf(WaveHdr));

 WaveInClose(WaveIn);

 CloseHandle(hEvent);

 if not Terminated then Terminate;

 with MainForm.PositionSpinEdit do

 begin

 Value := AudioPosition;

 MinValue := 0;

 MaxValue := AudioData.Data.Size div AudioData.nBlockAlign;;

 end;

 MainForm.RecordButton.Flat := False;

 Status := 'waiting';

end;


procedure TMainForm.PauseButtonClick(Sender: TObject);

begin

 if Status = 'playing' then PlayThread.Terminate;

 if Status = 'recording' then RecordThread.Terminate;

end;

procedure TMainForm.TrackBarChange(Sender: TObject);

var

 AudioSize: Cardinal;

begin

 if Status<>'waiting' then Exit;

 with AudioData do

 AudioSize := Data.Size div nBlockAlign;

 if TrackBar.Position <> Round(AudioPosition*TrackBar.Max/AudioSize) then

 begin

 AudioPosition := Round(TrackBar.Position/TrackBar.Max*AudioSize);

 SetAudioPosition;

 end;

end;

procedure TMainForm.PositionSpinEditChange(Sender: TObject);

begin

 if Status<>'waiting' then Exit;

 AudioPosition := PositionSpinEdit.Value;

 SetAudioPosition;

end;

procedure TMainForm.SaveButtonClick(Sender: TObject);

var

 FileName, Ext, EncMode, StereoMode, BitRate: String;

 i: Byte;

 Code: Integer;

 PCM: TPCMFile;

 MP3: TMP3File;

 EM1: TEM1File;

begin

 if Status<>'waiting' then Exit;

 if SaveDialog.Execute then

 FileName := SaveDialog.FileName else Exit;

 Ext := ExtractFileExt(FileName);

 for i := 1 to Length(Ext) do Ext[i] := UpCase(Ext[i]);

 if Ext = '.WAV' then

 begin

 PCM := TPCMFile.Create(FileName, AudioData);

 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, AudioData, BitRate, EncMode, StereoMode);

 MP3.Destroy;

 end;

 if Ext = '.EM1' then

 begin

 EM1 := TEM1File.Create(FileName, AudioData);

 EM1.Destroy;

 end;

end;

procedure TMainForm.SetMarkerButtonClick(Sender: TObject);

begin

 SetMarker;

end;

procedure TMainForm.DeleteMarkersButtonClick(Sender: TObject);

begin

 DeleteMarkers;

end;

procedure TMainForm.CopyButtonClick(Sender: TObject);

var

 AudioSize: Cardinal;

 S: String;

begin

 if Status<>'waiting' then Exit;

 Status := 'editing';

 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;

 CopyAudio(AudioData, AudioClipBoard, Start, Finish);

 end;

 Str(AudioClipBoard.Data.Size div AudioClipBoard.nBlockAlign div AudioClipBoard.nSamplesPerSec, S);

 Memo1.Text := 'Â áóôôåðå ' + S + ' ñåê.';

 Status := 'waiting';

end;

procedure TMainForm.DeleteButtonClick(Sender: TObject);

var

 AudioSize: Cardinal;

begin

 if Status<>'waiting' then Exit;

 Status := 'editing';

 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;

 DeleteAudio(AudioData, Start, Finish);

 DeleteMarkers;

 AudioPosition := Start;

 SetAudioPosition;

 end;

 Status := 'waiting';

end;

procedure TMainForm.CutButtonClick(Sender: TObject);

var

 AudioSize: Cardinal;

 S: String;

begin

 if Status<>'waiting' then Exit;

 Status := 'editing';

 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;

 CopyAudio(AudioData, AudioClipBoard, Start, Finish);

 DeleteAudio(AudioData, Start, Finish);

 DeleteMarkers;

 AudioPosition := Start;

 SetAudioPosition;

 end;

 Str(AudioClipBoard.Data.Size div AudioClipBoard.nBlockAlign div AudioClipBoard.nSamplesPerSec, S);

 Memo1.Text := 'Â áóôôåðå ' + S + ' ñåê.';

 Status := 'waiting';

end;

procedure TMainForm.ClearButtonClick(Sender: TObject);

var

 AudioSize, i: Cardinal;

 Buf: Byte;

begin

 if Status<>'waiting' then Exit;

 Status := 'editing';

 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;

 Buf := 0;

 AudioData.Data.Position := Start*AudioData.nBlockAlign;

 for i := Start*AudioData.nBlockAlign to Finish*AudioData.nBlockAlign-1 do

 AudioData.Data.Write(Buf, 1);

 end;

 Status := 'waiting';

 PaintAudioGraph;

end;

procedure TMainForm.PasteButtonClick(Sender: TObject);

var

 MP3: TMP3File;

 PCM: TPCMFile;

 EM1: TEM1File;

 i: Byte;

 FileName, S, Ext: String;

 TempAudio: TAudioData;

begin

 if (Status<>'waiting')and(Status<>'starting') then Exit;

 if Sender = PasteFileButton then

 begin

 if OpenDialog.Execute then FileName := OpenDialog.FileName else Exit;

 Status := 'opening';

 Ext := ExtractFileExt(FileName);

 if GetFileAttributes(PChar(FileName)) and FILE_ATTRIBUTE_READONLY = FILE_ATTRIBUTE_READONLY then

 SetFileAttributes(PChar(FileName), GetFileAttributes(PChar(FileName)) xor FILE_ATTRIBUTE_READONLY);

 TempAudio := TAudioData.Create;

 for i := 1 to Length(Ext) do Ext[i] := UpCase(Ext[i]);

 if Ext = '.WAV' then

 begin

 PCM := TPCMFile.Open(FileName);

 PCM.ReadAudioData(TempAudio);

 PCM.Destroy;

 end;

 if Ext = '.MP3' then

 begin

 MP3 := TMP3File.Open(FileName);

 MP3.ReadAudioData(TempAudio);

 MP3.Destroy;

 end;

 if Ext = '.EM1' then

 begin

 EM1 := TEM1File.Open(FileName);

 EM1.ReadAudioData(TempAudio);

 EM1.Destroy;

 end;

 SetnSamplesPerSec(TempAudio, AudioData.nSamplesPerSec);

 SetnBitsPerSample(TempAudio, AudioData.nBitsPerSample);

 SetnChannels(TempAudio, AudioData.nChannels);

 end

 else

 begin

 SetnSamplesPerSec(AudioClipBoard, AudioData.nSamplesPerSec);

 SetnBitsPerSample(AudioClipBoard, AudioData.nBitsPerSample);

 SetnChannels(AudioClipBoard, AudioData.nChannels);

 end;

 Status := 'editing';

 SaveUndoInfo;

 if Sender <> PasteFileButton then

 Case PasteModeComboBox.ItemIndex of

 0: InsertAudio(AudioClipBoard, AudioData, AudioPosition);

 1: OverWriteAudio(AudioClipBoard, AudioData, AudioPosition);

 2: MixAudio(AudioClipBoard, AudioData, AudioPosition);

 end

 else

 Case PasteModeComboBox.ItemIndex of

 0: InsertAudio(TempAudio, AudioData, AudioPosition);

 1: OverWriteAudio(TempAudio, AudioData, AudioPosition);

 2: MixAudio(TempAudio, AudioData, AudioPosition);

 end;

 DeleteMarkers;

 SetAudioPosition;

 SetMarker;

 if Sender <> PasteFileButton then

 AudioPosition := AudioPosition + AudioClipBoard.Data.Size div AudioData.nBlockAlign - 1

 else

 begin

 AudioPosition := AudioPosition + TempAudio.Data.Size div AudioData.nBlockAlign - 1;

 TempAudio.Destroy;

 end;

 SetAudioPosition;

 SetMarker;

 Status := 'waiting';

end;

procedure TMainForm.PasteSilenceButtonClick(Sender: TObject);

var

 i: Cardinal;

 b: Byte;

 TempAudio: TAudioData;

begin

 if (Status<>'waiting')and(Status<>'starting') then Exit;

 Status := 'editing';

 SaveUndoInfo;

 TempAudio := TAudioData.Create;

 TempAudio.nChannels := AudioData.nChannels;

 TempAudio.nSamplesPerSec := AudioData.nSamplesPerSec;

 TempAudio.nBitsPerSample := AudioData.nBitsPerSample;

 TempAudio.Calculate_nBlockAlign;

 b := 0;

 for i := 1 to TempAudio.nSamplesPerSec*SilenceTime.Value*TempAudio.nBlockAlign do

 TempAudio.Data.Write(b, 1);

Ñòðàíèöû: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25



2012 © Âñå ïðàâà çàùèùåíû
Ïðè èñïîëüçîâàíèè ìàòåðèàëîâ àêòèâíàÿ ññûëêà íà èñòî÷íèê îáÿçàòåëüíà.