From 5dc12a7c1a8707474b6fda3515dee35f2acbdf9b Mon Sep 17 00:00:00 2001 From: doctea Date: Wed, 26 Mar 2025 00:12:12 +0000 Subject: [PATCH 1/2] enable to pause clock and then continue playing from where we left off --- src/uClock.cpp | 15 +++++++++++++-- src/uClock.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/uClock.cpp b/src/uClock.cpp index 9f27935..0fc802d 100755 --- a/src/uClock.cpp +++ b/src/uClock.cpp @@ -183,13 +183,24 @@ void uClockClass::stop() } } +void uClockClass::continue_playing() { + if (state == PAUSED) { + start_timer = millis(); + if (mode == INTERNAL_CLOCK) { + state = STARTED; + } else { + state = STARTING; + } + } +} + void uClockClass::pause() { if (mode == INTERNAL_CLOCK) { if (state == PAUSED) { - start(); + continue_playing(); } else { - stop(); + state = PAUSED; } } } diff --git a/src/uClock.h b/src/uClock.h index df1a08d..e7bfd49 100755 --- a/src/uClock.h +++ b/src/uClock.h @@ -127,6 +127,7 @@ class uClockClass { void start(); void stop(); void pause(); + void continue_playing(); void setTempo(float bpm); float getTempo(); From 88e108657a724f4caee85341be2e901e88e13884 Mon Sep 17 00:00:00 2001 From: Tristan Rowley Date: Fri, 11 Apr 2025 23:47:02 +0100 Subject: [PATCH 2/2] (untested) add user callbacks for 'pause' and 'continue' --- src/uClock.cpp | 6 ++++++ src/uClock.h | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/uClock.cpp b/src/uClock.cpp index 0fc802d..ee8f114 100755 --- a/src/uClock.cpp +++ b/src/uClock.cpp @@ -191,6 +191,9 @@ void uClockClass::continue_playing() { } else { state = STARTING; } + if (onClockContinueCallback) { + onClockContinueCallback(); + } } } @@ -201,6 +204,9 @@ void uClockClass::pause() continue_playing(); } else { state = PAUSED; + if (onClockPauseCallback) { + onClockPauseCallback(); + } } } } diff --git a/src/uClock.h b/src/uClock.h index e7bfd49..5323035 100755 --- a/src/uClock.h +++ b/src/uClock.h @@ -116,6 +116,14 @@ class uClockClass { onClockStopCallback = callback; } + void setOnClockContinue(void (*callback)()) { + onClockStartCallback = callback; + } + + void setOnClockPause(void (*callback)()) { + onClockPauseCallback = callback; + } + void init(); void setPPQN(PPQNResolution resolution); @@ -172,6 +180,8 @@ class uClockClass { void (*onSync24Callback)(uint32_t tick); void (*onClockStartCallback)(); void (*onClockStopCallback)(); + void (*onClockContinueCallback)(); + void (*onClockPauseCallback)(); // internal clock control // uint16_t ppqn;