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);