From f3bb0001cdf4b9928bfe252732e49e5b1414b03b Mon Sep 17 00:00:00 2001 From: "5684185+vsariola@users.noreply.github.com" <5684185+vsariola@users.noreply.github.com> Date: Sat, 28 Feb 2026 19:17:03 +0200 Subject: [PATCH] fix(tracker): show FPU over/underflow error instead of generic nan error --- tracker/player.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tracker/player.go b/tracker/player.go index c5b07ab..e96c1b5 100644 --- a/tracker/player.go +++ b/tracker/player.go @@ -131,11 +131,12 @@ func (p *Player) Process(buffer sointu.AudioBuffer, context PlayerProcessContext if err != nil { p.destroySynth() p.send(Alert{Message: fmt.Sprintf("synth.Render: %s", err.Error()), Priority: Error, Name: "PlayerCrash", Duration: defaultAlertDuration}) - } - // for performance, we don't check for NaN of every sample, because typically NaNs propagate - if rendered > 0 && (isNaN(buffer[0][0]) || isNaN(buffer[0][1]) || isInf(buffer[0][0]) || isInf(buffer[0][1])) { - p.destroySynth() - p.send(Alert{Message: "Inf or NaN detected in synth output", Priority: Error, Name: "PlayerCrash", Duration: defaultAlertDuration}) + } else { + // for performance, we don't check for NaN of every sample, because typically NaNs propagate + if rendered > 0 && (isNaN(buffer[0][0]) || isNaN(buffer[0][1]) || isInf(buffer[0][0]) || isInf(buffer[0][1])) { + p.destroySynth() + p.send(Alert{Message: "Inf or NaN detected in synth output", Priority: Error, Name: "PlayerCrash", Duration: defaultAlertDuration}) + } } } else { rendered = min(framesUntilEvent, timeUntilRowAdvance)