var
WaveIn: HWAVEIN;
WaveHeader: PWAVEHDR;
Stream: TMemoryStream;
WaveFormat: TWaveFormatEx;
WaveIn :=
0
;
WaveHeader :=
nil
;
Stream := TMemoryStream
.
Create;
WaveFormat
.
wFormatTag := WAVE_FORMAT_PCM;
WaveFormat
.
nChannels :=
1
;
WaveFormat
.
nSamplesPerSec :=
44100
;
WaveFormat
.
wBitsPerSample :=
16
;
WaveFormat
.
nBlockAlign := WaveFormat
.
nChannels * (WaveFormat
.
wBitsPerSample
div
8
);
WaveFormat
.
nAvgBytesPerSec := WaveFormat
.
nSamplesPerSec * WaveFormat
.
nBlockAlign;
WaveFormat
.
cbSize :=
0
;
waveInOpen(@WaveIn, WAVE_MAPPER, @WaveFormat,
0
,
0
, WAVE_FORMAT_DIRECT);
GetMem(WaveHeader, SizeOf(WAVEHDR));
WaveHeader^.lpData := AllocMem(
8192
);
WaveHeader^.dwBufferLength :=
8192
;
WaveHeader^.dwBytesRecorded :=
0
;
WaveHeader^.dwUser :=
0
;
WaveHeader^.dwFlags :=
0
;
WaveHeader^.dwLoops :=
0
;
WaveHeader^.lpNext :=
nil
;
WaveHeader^.reserved :=
0
;
waveInPrepareHeader(WaveIn, WaveHeader, SizeOf(WAVEHDR));
waveInAddBuffer(WaveIn, WaveHeader, SizeOf(WAVEHDR));
waveInStart(WaveIn);
waveInStop(WaveIn);
waveInUnprepareHeader(WaveIn, WaveHeader, SizeOf(WAVEHDR));
Stream
.
Write
(WaveHeader^.lpData^, WaveHeader^.dwBytesRecorded);
Stream
.
SaveToFile(
'sound.wav'
);
FreeMem(WaveHeader^.lpData);
FreeMem(WaveHeader);
waveInClose(WaveIn);
Stream
.
Free;