mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
WIP: TX implementation — per-device settings, separate analyzer, sound-card mic
- Settings: TTXSettings record + LoadTX/SaveTX, JSON section "tx" per MAC - WDSPEngine: separate TX_DISP_ID analyzer with own FFT/Window/Det/Avg parameters, ApplyTXAnalyzerSettings + setters - WDSPEngine: full TX chain setters (Filter/Compressor/Leveler/ALC/ PhaseRot/EQ/AMCarrier/FM/CTCSS) + ApplyTXChainSettings - WDSPEngine: ProcessTXBlock now feeds TX analyzer in DISPLAY_BLOCK_SIZE chunks (was passing whole FTXOut → analyzer ignored most of it) - WDSPEngine: ActiveDisplayID switches RX/TX in UpdateSpectrum - WDSPEngine: RX audio muted while TX active to avoid local feedback - WDSPEngine: default EQ frequencies in Create (zero freqs broke TX chain) - WDSPEngine: PushTXMicSampleD + OnPullMicSamples for sound-card path - AudioInput: Available counter for non-blocking pull - MainForm: PullSoundCardMic, BuildMicLineSelectByte, SendDUCSpecific with mic bias/boost/line/PTT bits, OnTXSettingsChange - MainForm: auto-switch MicSource on TX device select, TX diagnostic in StatusBar panel [5] - SettingsForm: new Transmit nav page with Microphone, Filter, Dynamic processing, EQ, AM/FM/CTCSS, TX Display sections NOT YET WORKING: sound-card mic produces ring activity but signal still not visible on TX spectrum/waterfall — needs further investigation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -132,6 +132,9 @@ type
|
||||
// Читает следующий моно-сэмпл из кольцевого буфера.
|
||||
// Возвращает 0.0 если буфер пуст.
|
||||
function ReadSample: Double;
|
||||
// Сколько сэмплов реально лежит в ring буфере (0..MY_MIC_RING_SIZE-1).
|
||||
// Использовать для чтения только доступных данных без пуш-тишины.
|
||||
function Available: Integer;
|
||||
|
||||
property IsOpen: Boolean read FOpen;
|
||||
property LastError: string read GetLastError;
|
||||
@@ -534,4 +537,13 @@ begin
|
||||
FOutPt := newpt;
|
||||
end;
|
||||
|
||||
function TAudioInput.Available: Integer;
|
||||
var d: Integer;
|
||||
begin
|
||||
// Считаем сколько непрочитанных сэмплов между OutPt (читатель) и InPt (писатель).
|
||||
d := FInPt - FOutPt;
|
||||
if d < 0 then d := d + MY_MIC_RING_SIZE;
|
||||
Result := d;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user