Vamos a ver, tu tienes este procedure:
Código Delphi
[-]
procedure TfrmMain.BufferFinished(var Msg: TMessage);
var
hdr: PWaveHdr;
i: integer;
P: PByte;
begin
hdr:= PWaveHdr(Msg.LParam);
with hdr^ do
begin
P:= PByte(lpData);
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(width,128);
Canvas.LineTo(0,128);
for i:= 1 to dwBytesRecorded do
begin
Canvas.LineTo(i,P^);
inc(P);
end;
end;
if waveInPrepareHeader(Device,hdr,sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
begin
CloseWaveDevice;
exit;
end;
if waveInAddBuffer(Device,hdr,sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
begin
CloseWaveDevice;
exit;
end;
end;
Pues deberías hacer algo como esto:
Código Delphi
[-]
procedure TfrmMain.BufferFinished(var Msg: TMessage);
var
hdr: PWaveHdr;
i: integer;
P: PByte;
B: Byte;
begin
hdr:= PWaveHdr(Msg.LParam);
with hdr^ do
begin
P:= PByte(lpData);
B:= 0;
for i:= 1 to dwBytesRecorded do
begin
if P^ > B then
B:= P^;
inc(P);
end;
ProgressBar1.Position:= B;
dec(B,128);
ProgressBar1.Position:= B;
end;
if waveInPrepareHeader(Device,hdr,sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
begin
CloseWaveDevice;
exit;
end;
if waveInAddBuffer(Device,hdr,sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
begin
CloseWaveDevice;
exit;
end;
end;