From 5a338ef2b35284f4b3b41fa9fd69b25dd749608b Mon Sep 17 00:00:00 2001 From: Matt Hillsdon Date: Wed, 28 Sep 2022 16:05:58 +0100 Subject: [PATCH 1/3] Stop the oscillator on board stop. Otherwise music.pitch plays forever until you stop it with code. --- src/board/audio/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/board/audio/index.ts b/src/board/audio/index.ts index 92fac218..7070ea18 100644 --- a/src/board/audio/index.ts +++ b/src/board/audio/index.ts @@ -138,7 +138,9 @@ export class Audio { } } - boardStopped() {} + boardStopped() { + this.oscillator?.stop(); + } } class BufferedAudio { From 09d8c8423f562f6228c59925ebec506fc68541d6 Mon Sep 17 00:00:00 2001 From: Matt Hillsdon Date: Wed, 28 Sep 2022 16:10:24 +0100 Subject: [PATCH 2/3] Share code with setAmplitudeU10. Stop and clear the field in both cases. --- src/board/audio/index.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/board/audio/index.ts b/src/board/audio/index.ts index 7070ea18..eb26f470 100644 --- a/src/board/audio/index.ts +++ b/src/board/audio/index.ts @@ -125,10 +125,7 @@ export class Audio { } setAmplitudeU10(amplitudeU10: number) { - if (this.oscillator) { - this.oscillator.stop(); - this.oscillator = undefined; - } + this.stopOscillator(); if (amplitudeU10) { this.oscillator = this.context!.createOscillator(); this.oscillator.type = "sine"; @@ -139,7 +136,14 @@ export class Audio { } boardStopped() { - this.oscillator?.stop(); + this.stopOscillator(); + } + + private stopOscillator() { + if (this.oscillator) { + this.oscillator.stop(); + this.oscillator = undefined; + } } } From 18da8faecf476faf41e19e60a0380a329570804b Mon Sep 17 00:00:00 2001 From: Matt Hillsdon Date: Wed, 28 Sep 2022 16:40:26 +0100 Subject: [PATCH 3/3] Avoid divide by zero in the same way as CODAL. --- src/board/audio/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/board/audio/index.ts b/src/board/audio/index.ts index eb26f470..1c46fd99 100644 --- a/src/board/audio/index.ts +++ b/src/board/audio/index.ts @@ -118,7 +118,8 @@ export class Audio { } setPeriodUs(periodUs: number) { - this.frequency = 1000000 / periodUs; + // CODAL defaults in this way: + this.frequency = periodUs === 0 ? 6068 : 1000000 / periodUs; if (this.oscillator) { this.oscillator.frequency.value = this.frequency; }