From 8345d464d68c03772ae28e48aeb98f7916f51d85 Mon Sep 17 00:00:00 2001 From: Joe Finney Date: Tue, 26 Nov 2024 13:21:05 +0000 Subject: [PATCH] Chnages ito support audio-refactor. Not yet tested. --- inc/MicroBitAudio.h | 4 +++- source/MicroBitAudio.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/inc/MicroBitAudio.h b/inc/MicroBitAudio.h index f3623767..baed2d1b 100644 --- a/inc/MicroBitAudio.h +++ b/inc/MicroBitAudio.h @@ -55,7 +55,7 @@ namespace codal public: static MicroBitAudio *instance; // Primary instance of MicroBitAudio, on demand activated. Mixer2 mixer; // Multi channel audio mixer - NRF52ADCChannel *mic; // Microphone ADC Channel from uBit.IO + NRF52ADCChannel *mic; // Microphone ADC Channel from uBit.IO StreamNormalizer *processor; // Stream Normaliser instance StreamSplitter *splitter; // Stream Splitter instance (8bit normalized output) StreamSplitter *rawSplitter; // Stream Splitter instance (raw input) @@ -184,6 +184,8 @@ namespace codal * Puts the component in (or out of) sleep (low power) mode. */ virtual int setSleep(bool doSleep) override; + + virtual void periodicCallback(); }; } diff --git a/source/MicroBitAudio.cpp b/source/MicroBitAudio.cpp index 4e30a31f..23aaa2ea 100644 --- a/source/MicroBitAudio.cpp +++ b/source/MicroBitAudio.cpp @@ -55,6 +55,9 @@ MicroBitAudio::MicroBitAudio(NRF52Pin &pin, NRF52Pin &speaker, NRF52ADC &adc, NR if (MicroBitAudio::instance == NULL) MicroBitAudio::instance = this; + // Request a periodic callback + status |= DEVICE_COMPONENT_STATUS_SYSTEM_TICK; + synth.allowEmptyBuffers(true); mic = adc.getChannel(microphone, false); @@ -85,6 +88,15 @@ MicroBitAudio::MicroBitAudio(NRF52Pin &pin, NRF52Pin &speaker, NRF52ADC &adc, NR splitter = new StreamSplitter(processor->output, DEVICE_ID_SPLITTER); } +void MicroBitAudio::periodicCallback() +{ + if (mic->isEnabled() && !micEnabled) + activateMic(); + + if (!mic->isEnabled() && micEnabled) + deactivateMic(); +} + void MicroBitAudio::activateMic(){ runmic.setDigitalValue(1); runmic.setHighDrive(true);