diff --git a/internal/recorder/demod.go b/internal/recorder/demod.go index 23741af..7230caf 100644 --- a/internal/recorder/demod.go +++ b/internal/recorder/demod.go @@ -69,7 +69,11 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f } } if audio == nil { - log.Printf("gpudemod: CPU demod fallback used for event %d (%s)", ev.ID, name) + if name == "WFM_STEREO" { + log.Printf("gpudemod: WFM_STEREO using CPU stereo/RDS post-process for event %d", ev.ID) + } else { + log.Printf("gpudemod: CPU demod fallback used for event %d (%s)", ev.ID, name) + } shifted := dsp.FreqShift(iq, m.sampleRate, offset) cutoff := bw / 2 if cutoff < 200 { diff --git a/internal/recorder/demod_helpers.go b/internal/recorder/demod_helpers.go new file mode 100644 index 0000000..3f7421f --- /dev/null +++ b/internal/recorder/demod_helpers.go @@ -0,0 +1,22 @@ +package recorder + +import "sdr-visual-suite/internal/demod/gpudemod" + +func gpuModeFor(name string) (gpudemod.DemodType, bool) { + switch name { + case "NFM": + return gpudemod.DemodNFM, true + case "WFM", "WFM_STEREO": + return gpudemod.DemodWFM, true + case "AM": + return gpudemod.DemodAM, true + case "USB": + return gpudemod.DemodUSB, true + case "LSB": + return gpudemod.DemodLSB, true + case "CW": + return gpudemod.DemodCW, true + default: + return 0, false + } +} diff --git a/internal/recorder/demod_live.go b/internal/recorder/demod_live.go index d27ef3c..e0f6cdd 100644 --- a/internal/recorder/demod_live.go +++ b/internal/recorder/demod_live.go @@ -82,7 +82,11 @@ func (m *Manager) DemodLive(centerHz float64, bw float64, mode string, seconds i } } if audio == nil { - log.Printf("gpudemod: CPU live demod fallback used (%s)", name) + if name == "WFM_STEREO" { + log.Printf("gpudemod: WFM_STEREO live path using CPU stereo/RDS post-process") + } else { + log.Printf("gpudemod: CPU live demod fallback used (%s)", name) + } shifted := dsp.FreqShift(segment, m.sampleRate, offset) cutoff := bw / 2 if cutoff < 200 {