Skip to content

Commit 9673833

Browse files
Refactor: add StatusChanged action
1 parent f550e5e commit 9673833

File tree

5 files changed

+28
-27
lines changed

5 files changed

+28
-27
lines changed

src/framework/audio/engine/iclock.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ class IClock
4949
virtual bool isRunning() const = 0;
5050

5151
virtual PlaybackStatus status() const = 0;
52-
virtual async::Channel<PlaybackStatus> statusChanged() const = 0;
5352

5453
virtual msecs_t timeDuration() const = 0;
5554
virtual void setTimeDuration(const msecs_t duration) = 0;
@@ -61,6 +60,7 @@ class IClock
6160
virtual async::Channel<secs_t> timeChanged() const = 0;
6261

6362
enum ActionType {
63+
StatusChanged,
6464
Seek,
6565
LoopEndReached,
6666
CountDownEnded,

src/framework/audio/engine/internal/clock.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ Clock::Clock()
3232
.name("audio::clock::timeChangedInSecs")
3333
.disableWaitPendingsOnSend())
3434
{
35-
m_status.set(PlaybackStatus::Stopped);
3635
}
3736

3837
msecs_t Clock::currentTime() const
@@ -82,7 +81,8 @@ void Clock::setCurrentTime(msecs_t time)
8281

8382
void Clock::start()
8483
{
85-
m_status.set(PlaybackStatus::Running);
84+
m_status = PlaybackStatus::Running;
85+
onAction(ActionType::StatusChanged, m_currentTime);
8686
}
8787

8888
void Clock::reset()
@@ -94,19 +94,22 @@ void Clock::reset()
9494

9595
void Clock::stop()
9696
{
97-
m_status.set(PlaybackStatus::Stopped);
97+
m_status = PlaybackStatus::Stopped;
98+
onAction(ActionType::StatusChanged, m_currentTime);
9899
seek(0);
99100
m_countDown = 0;
100101
}
101102

102103
void Clock::pause()
103104
{
104-
m_status.set(PlaybackStatus::Paused);
105+
m_status = PlaybackStatus::Paused;
106+
onAction(ActionType::StatusChanged, m_currentTime);
105107
}
106108

107109
void Clock::resume()
108110
{
109-
m_status.set(PlaybackStatus::Running);
111+
m_status = PlaybackStatus::Running;
112+
onAction(ActionType::StatusChanged, m_currentTime);
110113
seek(m_currentTime);
111114
}
112115

@@ -155,7 +158,7 @@ void Clock::setCountDown(const msecs_t duration)
155158

156159
bool Clock::isRunning() const
157160
{
158-
return m_status.val == PlaybackStatus::Running;
161+
return m_status == PlaybackStatus::Running;
159162
}
160163

161164
async::Channel<secs_t> Clock::timeChanged() const
@@ -165,12 +168,7 @@ async::Channel<secs_t> Clock::timeChanged() const
165168

166169
PlaybackStatus Clock::status() const
167170
{
168-
return m_status.val;
169-
}
170-
171-
async::Channel<PlaybackStatus> Clock::statusChanged() const
172-
{
173-
return m_status.ch;
171+
return m_status;
174172
}
175173

176174
void Clock::setOnAction(OnActionFunc func)

src/framework/audio/engine/internal/clock.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ class Clock : public IClock, public async::Asyncable
4444
bool isRunning() const override;
4545

4646
PlaybackStatus status() const override;
47-
async::Channel<PlaybackStatus> statusChanged() const override;
4847

4948
msecs_t timeDuration() const override;
5049
void setTimeDuration(const msecs_t duration) override;
@@ -62,7 +61,7 @@ class Clock : public IClock, public async::Asyncable
6261
void setCurrentTime(msecs_t time);
6362
void onAction(ActionType type, msecs_t time);
6463

65-
ValCh<PlaybackStatus> m_status;
64+
PlaybackStatus m_status = PlaybackStatus::Stopped;
6665
msecs_t m_currentTime = 0;
6766
msecs_t m_timeDuration = 0;
6867
msecs_t m_timeLoopStart = 0;

src/framework/audio/engine/internal/sequenceplayer.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,21 @@ SequencePlayer::SequencePlayer(IGetTracks* getTracks, const modularity::ContextP
3737
: Contextable(iocCtx), m_getTracks(getTracks), m_clock(std::make_shared<Clock>())
3838
{
3939
m_clock->setOnAction([this](const IClock::ActionType type, const msecs_t time) {
40-
ONLY_AUDIO_PROC_THREAD;
40+
ONLY_AUDIO_RPC_OR_PROC_THREAD;
4141

4242
switch (type) {
43+
case IClock::ActionType::StatusChanged: {
44+
const bool active = m_clock->status() == PlaybackStatus::Running;
45+
46+
if (!m_countDownIsSet) {
47+
audioEngine()->mixer()->setIsActive(active);
48+
} else if (!active) {
49+
flushAllTracks();
50+
}
51+
52+
m_playbackStatusChanged.send(m_clock->status());
53+
break;
54+
}
4355
case IClock::ActionType::Seek: {
4456
if (m_tracksFollowClockSeek) {
4557
seekAllTracks(time);
@@ -56,16 +68,6 @@ SequencePlayer::SequencePlayer(IGetTracks* getTracks, const modularity::ContextP
5668
}
5769
});
5870

59-
m_clock->statusChanged().onReceive(this, [this](const PlaybackStatus status) {
60-
const bool active = status == PlaybackStatus::Running;
61-
62-
if (!m_countDownIsSet) {
63-
audioEngine()->mixer()->setIsActive(active);
64-
} else if (!active) {
65-
flushAllTracks();
66-
}
67-
});
68-
6971
audioEngine()->mixer()->addClock(m_clock);
7072
}
7173

@@ -197,7 +199,7 @@ Channel<PlaybackStatus> SequencePlayer::playbackStatusChanged() const
197199
{
198200
ONLY_AUDIO_ENGINE_THREAD;
199201

200-
return m_clock->statusChanged();
202+
return m_playbackStatusChanged;
201203
}
202204

203205
void SequencePlayer::seekAllTracks(const msecs_t newPositionMsecs, bool flushSound)

src/framework/audio/engine/internal/sequenceplayer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ class SequencePlayer : public ISequencePlayer, public Contextable, public async:
7070
IGetTracks* m_getTracks = nullptr;
7171
IClockPtr m_clock = nullptr;
7272

73+
async::Channel<PlaybackStatus> m_playbackStatusChanged;
74+
7375
bool m_countDownIsSet = false;
7476
std::set<TrackId> m_notYetReadyToPlayTrackIdSet;
7577

0 commit comments

Comments
 (0)