diff --git a/MainForm.pas b/MainForm.pas index 28029f6..a452104 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -445,7 +445,6 @@ type procedure WebOnRun(On_: Boolean); procedure WebOnDrive(V: Integer); procedure WebOnFreqA(Hz: Double); - procedure WebOnMic(Samples: PSingle; Count: Integer); procedure WebOnXvtrBand(Idx: Integer); // Discovery / connect / saved-CRUD из web (маршалятся в UI) procedure WebOnConnect(const IP: string); @@ -982,7 +981,7 @@ begin FWebServer.OnRun := WebOnRun; FWebServer.OnDrive := WebOnDrive; FWebServer.OnFreqA := WebOnFreqA; - FWebServer.OnWebMic := WebOnMic; + FWebServer.OnWebMic := FWebAdapter.OnMic; FWebServer.OnXvtrBand := WebOnXvtrBand; FWebServer.OnConnect := WebOnConnect; FWebServer.OnDiscoverDev := WebOnDiscover; @@ -5252,24 +5251,6 @@ begin ApplyVfoA(Round(FWebSyncFreq)); end; -procedure TMainForm.WebOnMic(Samples: PSingle; Count: Integer); -var - Buf: array[0..5759] of Double; - SP: PSingle; - i, n: Integer; -begin - if not FController.FWDSPReady then Exit; - n := Count; - if n > Length(Buf) then n := Length(Buf); - SP := Samples; - for i := 0 to n - 1 do - begin - Buf[i] := SP^; - Inc(SP); - end; - FController.FDSPEngine.PushTXMicSamplesD(Buf, n); -end; - procedure TMainForm.TrkDriveChange(Sender: TObject); begin FController.FDrivePercent := TrkDrive.Position; // слайдер — ввод; контроллер — истина diff --git a/WebAdapter.pas b/WebAdapter.pas index acb13f1..500ba32 100644 --- a/WebAdapter.pas +++ b/WebAdapter.pas @@ -86,6 +86,9 @@ type procedure OnTun(On_: Boolean); procedure OnFMStep(Idx: Integer); procedure OnClientActiveChanged(Active: Boolean); + // TX-mic от web-клиента → WDSP. Вызывается из WS-потока; без маршалинга — + // подача в движок thread-safe (как OnMicPacket/OnDDCIQ контроллера). + procedure OnMic(Samples: PSingle; Count: Integer); end; implementation @@ -261,4 +264,22 @@ begin FController.FWebClientActive := Active; end; +procedure TWebAdapter.OnMic(Samples: PSingle; Count: Integer); +var + Buf: array[0..5759] of Double; + SP: PSingle; + i, n: Integer; +begin + if not FController.FWDSPReady then Exit; + n := Count; + if n > Length(Buf) then n := Length(Buf); + SP := Samples; + for i := 0 to n - 1 do + begin + Buf[i] := SP^; + Inc(SP); + end; + FController.FDSPEngine.PushTXMicSamplesD(Buf, n); +end; + end.