Модератор: Модераторы
// обработчик "данные готовы"
procedure TformMain.MMProcData(var Message: TMessage);
var
temp: pWaveHdr;
recorded: integer;
begin
temp:=address;
if address=@wh1 then address:=@wh2 else address:=@wh1;
// если не остановлено, ставим в очередь
if not stop then
waveInAddBuffer(hwi,address,sizeof(TWaveHdr));
recorded:=address.dwBytesRecorded;
// записываем блок
BlockWrite(fOut,(temp.lpData)^,recorded);
if (address.dwBufferLength=1) and (formMain.Channels=2) then //обработка стерео сигнала 8 бит
Begin
if address=@wh1 then
Begin
label2.Caption:=inttostr(ord(temp^.lpData^));
TrackBar1.Position:=ord(temp^.lpData^);
end
else
Begin
label3.Caption:=inttostr(ord(temp^.lpData^));
TrackBar2.Position:=ord(temp^.lpData^);
end;
end;
n:=n+recorded;
formMain.Label1.Caption:=IntToStr(n);
end;
leftchanal:=true; //для случая 16 битного стерео сделать так как было для 8-и битного нельзя,
// там было так:
// в lpData^ всегда (для 8 и 16 бит) лежит 8 бит, и по этому в случае 8-и бит
// @wh1 всегда лежат данные левого канала, а в @wh2 данные правого канала
// Здесь же имеем следующее:
// Еще раз, в lpData^ всегда (для 8 и 16 бит) лежит 8 бит, но данные теперь 16-бит, а значит
// @wh1 всегда лежит младшая половинка (8-бит), а в @wh1 всегда лежит старшая половинка, но для
// нечетных пар @wh1 - @wh2 это данные левого канала, а для четных - данные правого.
// Флаг-переменная leftchanal - это флаг, установка которого в true значит, что сейчас очередь
// левого канала, и в начале мы его как раз и ставим в true, т.к. первая пара-нечетная, но
// в конце обработки пары мы должны опрокидывать этот флаг в противоположное состояние
if (address.dwBufferLength=2) and (formMain.Channels=2) then //обработка стерео сигнала 16 бит
Begin
if address=@wh1 then
Begin
loData:=ord(temp^.lpData^);
end
else
Begin
hiData:=ord(temp^.lpData^);
leftchanal:=not(leftchanal); // опрокидываем флаг
label3.Caption:=inttostr((hiData*256 + loData) div 256)
TrackBar2.Position:=hiData * 256 + loData) div 256;
end;
end;
Сейчас этот форум просматривают: Yandex [Bot] и гости: 20