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));
WaveInStart(WaveIn);
WaitForSingleObject(hEvent, INFINITE);
WaveInAddBuffer(WaveIn, @WaveHdr[i], SizeOf(TWaveHdr));
i := BufNumber-1;
while not Terminated do
if i = BufNumber-1 then i := 0 else Inc(i);
if (WaveHdr[i].dwFlags and WHDR_DONE) <> WHDR_DONE then
AudioData.Data.Position := AudioPosition*AudioData.nBlockAlign;
AudioData.Data.Write(Buf[i], WaveHdr[i].dwBytesRecorded);
AudioPosition := AudioPosition + (WaveHdr[i].dwBytesRecorded div AudioData.nBlockAlign);
MainForm.SetAudioPosition;
WaveInReset(WaveIn);
WaveInUnprepareHeader(WaveIn, @WaveHdr[i], SizeOf(WaveHdr));
WaveInClose(WaveIn);
CloseHandle(hEvent);
if not Terminated then Terminate;
with MainForm.PositionSpinEdit do
Value := AudioPosition;
MinValue := 0;
MaxValue := AudioData.Data.Size div AudioData.nBlockAlign;;
MainForm.RecordButton.Flat := False;
Status := 'waiting';
procedure TMainForm.PauseButtonClick(Sender: TObject);
if Status = 'playing' then PlayThread.Terminate;
if Status = 'recording' then RecordThread.Terminate;
procedure TMainForm.TrackBarChange(Sender: TObject);
var
AudioSize: Cardinal;
if Status<>'waiting' then Exit;
with AudioData do
AudioSize := Data.Size div nBlockAlign;
if TrackBar.Position <> Round(AudioPosition*TrackBar.Max/AudioSize) then
AudioPosition := Round(TrackBar.Position/TrackBar.Max*AudioSize);
SetAudioPosition;
procedure TMainForm.PositionSpinEditChange(Sender: TObject);
AudioPosition := PositionSpinEdit.Value;
procedure TMainForm.SaveButtonClick(Sender: TObject);
FileName, Ext, EncMode, StereoMode, BitRate: String;
i: Byte;
Code: Integer;
PCM: TPCMFile;
MP3: TMP3File;
EM1: TEM1File;
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
PCM := TPCMFile.Create(FileName, AudioData);
PCM.Destroy;
if Ext = '.MP3' then
if RadioButton1.Checked then
BitRate := MP3OptionsForm.ConstantBitRateComboBox.Text;
EncMode := '-b';
if RadioButton2.Checked then
BitRate := MP3OptionsForm.AverageBitRateComboBox.Text;
EncMode := '--abr';
if RadioButton3.Checked then
Str(MP3OptionsForm.VariableBitrateComboBox.ItemIndex, BitRate);
EncMode := '-V';
case MP3OptionsForm.StereoModeComboBox.ItemIndex of
0: StereoMode := 's';
1: StereoMode := 'j';
2: StereoMode := 'f';
3: StereoMode := 'd';
4: StereoMode := 'm';
MP3 := TMP3File.Create(FileName, AudioData, BitRate, EncMode, StereoMode);
MP3.Destroy;
if Ext = '.EM1' then
EM1 := TEM1File.Create(FileName, AudioData);
EM1.Destroy;
procedure TMainForm.SetMarkerButtonClick(Sender: TObject);
SetMarker;
procedure TMainForm.DeleteMarkersButtonClick(Sender: TObject);
DeleteMarkers;
procedure TMainForm.CopyButtonClick(Sender: TObject);
S: String;
Status := 'editing';
with Selection do
if not StartExists or not FinishExists then
Start := 0;
Finish := AudioSize-1;
CopyAudio(AudioData, AudioClipBoard, Start, Finish);
Str(AudioClipBoard.Data.Size div AudioClipBoard.nBlockAlign div AudioClipBoard.nSamplesPerSec, S);
Memo1.Text := 'Â áóôôåðå ' + S + ' ñåê.';
procedure TMainForm.DeleteButtonClick(Sender: TObject);
SaveUndoInfo;
DeleteAudio(AudioData, Start, Finish);
AudioPosition := Start;
procedure TMainForm.CutButtonClick(Sender: TObject);
procedure TMainForm.ClearButtonClick(Sender: TObject);
AudioSize, i: Cardinal;
Buf: Byte;
Buf := 0;
AudioData.Data.Position := Start*AudioData.nBlockAlign;
for i := Start*AudioData.nBlockAlign to Finish*AudioData.nBlockAlign-1 do
AudioData.Data.Write(Buf, 1);
PaintAudioGraph;
procedure TMainForm.PasteButtonClick(Sender: TObject);
FileName, S, Ext: String;
TempAudio: TAudioData;
if (Status<>'waiting')and(Status<>'starting') then Exit;
if Sender = PasteFileButton then
if OpenDialog.Execute then FileName := OpenDialog.FileName else Exit;
Status := 'opening';
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;
PCM := TPCMFile.Open(FileName);
PCM.ReadAudioData(TempAudio);
MP3 := TMP3File.Open(FileName);
MP3.ReadAudioData(TempAudio);
EM1 := TEM1File.Open(FileName);
EM1.ReadAudioData(TempAudio);
SetnSamplesPerSec(TempAudio, AudioData.nSamplesPerSec);
SetnBitsPerSample(TempAudio, AudioData.nBitsPerSample);
SetnChannels(TempAudio, AudioData.nChannels);
end
else
SetnSamplesPerSec(AudioClipBoard, AudioData.nSamplesPerSec);
SetnBitsPerSample(AudioClipBoard, AudioData.nBitsPerSample);
SetnChannels(AudioClipBoard, AudioData.nChannels);
if Sender <> PasteFileButton then
Case PasteModeComboBox.ItemIndex of
0: InsertAudio(AudioClipBoard, AudioData, AudioPosition);
1: OverWriteAudio(AudioClipBoard, AudioData, AudioPosition);
2: MixAudio(AudioClipBoard, AudioData, AudioPosition);
0: InsertAudio(TempAudio, AudioData, AudioPosition);
1: OverWriteAudio(TempAudio, AudioData, AudioPosition);
2: MixAudio(TempAudio, AudioData, AudioPosition);
AudioPosition := AudioPosition + AudioClipBoard.Data.Size div AudioData.nBlockAlign - 1
AudioPosition := AudioPosition + TempAudio.Data.Size div AudioData.nBlockAlign - 1;
TempAudio.Destroy;
procedure TMainForm.PasteSilenceButtonClick(Sender: TObject);
i: Cardinal;
b: Byte;
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