//进行录音
procedure TDlgRecord.BtnStartClick(Sender: TObject);
var
TempInt, TempCode: integer;
TempFileName: string;
MMR: MMResult;
MyWaveFormat: TWaveFormatEx;
begin
PrgsBarSpace.Position := 0;
Recording := false;
OldDiskFree := DiskFree (RecordDrive);
with RecordWaveFormat do
begin
if RdoBtnMono.Checked = true then
Channels := 1
else
Channels := 2;
if RdoBtn8Bit.Checked = true then
BitsPerSample := 8
else
BitsPerSample := 16;
Val (EditFrequency.Text, TempInt, TempCode);
if TempCode <> 0 then
begin
Application.MessageBox ('无效数值', '错误', MB_Ok);
exit;
end
else if TempInt > 48000 then
begin
Application.MessageBox('不能大于48000赫兹', '错误', MB_Ok);
exit;
end
else
begin
SamplesPerSecond := TempInt;
end;
BytesPerSecond := SamplesPerSecond * Channels * BitsPerSample div
8;
BlockAlign := BitsPerSample * Channels div 8 ;
end;
waveInHeader1.lpData := Buffer1;
waveInHeader1.dwBufferLength := RecordBufferSize;
waveInHeader1.dwBytesRecorded := 0;
waveInHeader1.dwUser := 0; // 32 bits of user data
waveInHeader1.dwFlags := 0;
waveInHeader1.dwLoops := 0;
waveInHeader1.lpNext := nil; // reserved; must be zero
waveInHeader1.reserved := 0; // reserved; must be zero
MMR := waveInPrepareHeader (waveInHandle, Addr (waveInHeader1),
sizeof (waveInHeader1));
if MMR <> MMSYSERR_NOERROR then
begin
FreeMem (Buffer1); FreeMem (Buffer2);
RecordBufferSize := 0;
CloseFile (RecordFile);
Application.MessageBox ('第一录音缓冲区准备出错。', '错误', MB_OK)
;
exit;
end;
waveInHeader2.lpData := Buffer2;
waveInHeader2.dwBufferLength := RecordBufferSize;
waveInHeader2.dwBytesRecorded := 0;
waveInHeader2.dwUser := 0; // 32 bits of user data
waveInHeader2.dwFlags := 0;
waveInHeader2.dwLoops := 0;
waveInHeader2.lpNext := nil; // reserved; must be zero
waveInHeader2.reserved := 0; // reserved; must be zero