lancaster-university / codal-microbit-v2

CODAL target for the micro:bit v2.x series of devices
MIT License
41 stars 50 forks source link

A StreamRecording with low splitter sampling rate fails to stop recording #427

Open microbit-carlos opened 2 months ago

microbit-carlos commented 2 months ago

With this example code, setting the recording rate to 320 samples per second works, but setting it to 319 hangs when recording and never "stops".

#include "MicroBit.h"
#include "StreamRecording.h"

MicroBit uBit;

const int SAMPLE_RATE = 319;
const int BUFFER_LEN = SAMPLE_RATE * 5;

int main() {
    uBit.init();

    SplitterChannel *splitterChannel = uBit.audio.splitter->createChannel();
    splitterChannel->requestSampleRate( SAMPLE_RATE );
    StreamRecording *recording = new StreamRecording(*splitterChannel, BUFFER_LEN);
    // Setting the mixer channel to a different sampling rate doesn't make a difference
    MixerChannel *recordingChannel = uBit.audio.mixer.addChannel(*recording, SAMPLE_RATE);
    recordingChannel->setVolume(75.0);
    MicroBitAudio::requestActivation();

    while (true) {
        if (uBit.buttonA.isPressed()) {
            recording->erase();
            recording->recordAsync();
            while (recording->isRecording()) {
                uBit.display.print("R");
                uBit.sleep(5);
            }
            uBit.display.clear();
        } else if (uBit.buttonB.isPressed()) {
            recording->playAsync();
            while (recording->isPlaying()) {
                uBit.display.print("P");
                uBit.sleep(20);
            }
            uBit.display.clear();
        }
        uBit.sleep(200);
    }
}

To replicate: