var
Form1: TForm1;
WavIn : PHWaveIn;
Header : PWaveHdr;
Data : Pointer;
Size : integer;
.
.
.
procedure TForm1.Button1Click(Sender: TObject);
var
WavFm : PWaveFormatEx;
begin
with WavFm^ do
begin
wFormatTag:=WAVE_FORMAT_PCM;
nChannels:=1;
nSamplesPerSec:=11025;
nAvgBytesPerSec:=88200;
nBlockAlign:=1;
wBitsPerSample:=8;
cbSize:=0;
end;
SendWaveDataToMem(WavFm);
end;
function TForm1.SendWaveDataToMem(WavFmtEx : PWaveFormatEx) : Boolean;
var
i : integer;
SizeBuf : integer;
MemBlock : Pointer;
begin
Result:=False; // FAILURE;
WavIn:=New(PHWaveIn);
SizeBuf:=256;
i:=WaveInOpen(WavIn,0,WavFmtEx,Self.Handle,0,CALLBACK_WINDOW or WAVE_MAPPED);
if i<>0 then EXIT;
GetMem(MemBlock,SizeBuf);
Header:= New(PwaveHdr);
Header.lpData := MemBlock;
Header.dwBufferLength := SizeBuf;
Header.dwBytesRecorded := 0;
Header.dwUser := 0;
Header.dwFlags := 0;
Header.dwLoops := 0;
waveInPrepareHeader(WavIn^,Header,SizeOf(TWavehdr));
waveInAddBuffer(WavIn^,Header,SizeOf(TWaveHdr));
WaveInStart(WavIn^);
end;
버튼 1에있는 구조체 값을 입력해서 넘겨줬는데요...
계속 컴파일러는 경고(Warning)메시지로 버튼1의 구조체가 초기화가 되지않았다고 나오네요...
컴파일은 되는데 실행시키면 계속 에러가 납니다...
도아주세요...
해당 구조체 크기만큼 메모리를 할당하여 해당 포인터가 그 메모리를 가리키도록 해 주어야 합니다.
GetMem과 FreeMem 메소드를 이용해서 말이죠 ^^
아래 소스 중간에 넣었으까, 참고하세요.
//요기에 요렇게 추가해 보세요...
GetMem(WavFm, Sizeof(TWaveFormatEx));
// 생성한 메모리를 해제합니다.
FreeMem(WavFm, Sizeof(TWaveFormatEx));