void start (AudioIODeviceCallback* newCallback) override { if (session != nullptr && callback != newCallback) { AudioIODeviceCallback* oldCallback = callback; if (newCallback != nullptr) newCallback->audioDeviceAboutToStart (this); if (oldCallback != nullptr) { // already running if (newCallback == nullptr) stop(); else session->setCallback (newCallback); oldCallback->audioDeviceStopped(); } else { jassert (newCallback != nullptr); // session hasn't started yet session->setCallback (newCallback); session->start(); } callback = newCallback; } }
void stop() override { if (isRunning) { AudioIODeviceCallback* lastCallback; { const ScopedLock sl (callbackLock); lastCallback = callback; callback = nullptr; } if (lastCallback != nullptr) lastCallback->audioDeviceStopped(); } }