diff --git a/internal/recorder/demod.go b/internal/recorder/demod.go index 0709fd1..57253ff 100644 --- a/internal/recorder/demod.go +++ b/internal/recorder/demod.go @@ -25,7 +25,6 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f if d == nil { return errors.New("demodulator not found") } - // band-extract around signal bw := ev.Bandwidth offset := ev.CenterHz - m.centerHz var audio []float32 @@ -54,16 +53,22 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f if m.gpuDemod.LastDemodUsedGPU() { log.Printf("gpudemod: fused GPU demod used for event %d (%s)", ev.ID, name) } - } else if gpuAudio, gpuRate, err := m.gpuDemod.Demod(iq, offset, bw, gpuMode); err == nil { - audio = gpuAudio - inputRate = gpuRate - if m.gpuDemod.LastDemodUsedGPU() { - log.Printf("gpudemod: GPU demod stage used for event %d (%s)", ev.ID, name) + } else { + log.Printf("gpudemod: fused GPU demod failed for event %d (%s): %v", ev.ID, name, err) + if gpuAudio, gpuRate, err := m.gpuDemod.Demod(iq, offset, bw, gpuMode); err == nil { + audio = gpuAudio + inputRate = gpuRate + if m.gpuDemod.LastDemodUsedGPU() { + log.Printf("gpudemod: legacy GPU demod used for event %d (%s)", ev.ID, name) + } + } else { + log.Printf("gpudemod: legacy GPU demod failed for event %d (%s): %v", ev.ID, name, err) } } } } if audio == nil { + 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 { @@ -93,7 +98,6 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f _ = writeWAV(rdsPath, rds, 2400, 1) files["rds_baseband"] = "rds.wav" files["rds_sample_rate"] = 2400 - // naive decode dec := rdsdecoder{} res := dec.Decode(rds, 2400) if res.PI != 0 { diff --git a/internal/recorder/demod_live.go b/internal/recorder/demod_live.go index 1ee794f..0c473c0 100644 --- a/internal/recorder/demod_live.go +++ b/internal/recorder/demod_live.go @@ -3,6 +3,7 @@ package recorder import ( "bytes" "errors" + "log" "math" "time" @@ -66,13 +67,21 @@ func (m *Manager) DemodLive(centerHz float64, bw float64, mode string, seconds i if gpuAudio, gpuRate, err := m.gpuDemod.DemodFused(segment, offset, bw, gpuMode); err == nil { audio = gpuAudio inputRate = gpuRate - } else if gpuAudio, gpuRate, err := m.gpuDemod.Demod(segment, offset, bw, gpuMode); err == nil { - audio = gpuAudio - inputRate = gpuRate + log.Printf("gpudemod: fused GPU live demod used (%s)", name) + } else { + log.Printf("gpudemod: fused GPU live demod failed (%s): %v", name, err) + if gpuAudio, gpuRate, err := m.gpuDemod.Demod(segment, offset, bw, gpuMode); err == nil { + audio = gpuAudio + inputRate = gpuRate + log.Printf("gpudemod: legacy GPU live demod used (%s)", name) + } else { + log.Printf("gpudemod: legacy GPU live demod failed (%s): %v", name, err) + } } } } if audio == nil { + log.Printf("gpudemod: CPU live demod fallback used (%s)", name) shifted := dsp.FreqShift(segment, m.sampleRate, offset) cutoff := bw / 2 if cutoff < 200 {