Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions sources/Application/Player/Player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ void Player::Start(PlayMode mode, bool forceSongMode, MixerServiceMode msmMode,
break;
}

ProcessCommands();
Trace::Error("USELESS?");

startTime_ = mixer_.GetAudioOut()->GetStreamTime();

Expand Down Expand Up @@ -538,17 +538,21 @@ void Player::Update(Observable &o, I_ObservableData *d) {
};
}

// Track which channels just had their delay expire
bool delayExpired[SONG_CHANNEL_COUNT];
for (int i = 0; i < SONG_CHANNEL_COUNT; i++) {
delayExpired[i] = false;
if (timeToStart_[i] > 0) {
if (--timeToStart_[i] == 0) {
playCursorPosition(i);
delayExpired[i] = true;
}
}
}

// Process commands in current phrase
if (viewData_->playMode_ != PM_AUDITION)
ProcessCommands();
ProcessCommands(delayExpired);

// Initialise retrigger table
int instrRetrigger[SONG_CHANNEL_COUNT];
Expand Down Expand Up @@ -613,7 +617,7 @@ void Player::Update(Observable &o, I_ObservableData *d) {
position for all channels
************************************************************/

void Player::ProcessCommands() {
void Player::ProcessCommands(bool delayExpired[SONG_CHANNEL_COUNT]) {

// loop on all channels

Expand All @@ -627,7 +631,14 @@ void Player::ProcessCommands() {

uchar phrase = viewData_->currentPlayPhrase_[i];
if (phrase != 0xFF) {
if (gs->TriggerChannel(i)) { // If groove says it is time to play

// Skip if waiting for delayed trigger
if (timeToStart_[i]) {
Comment thread
n1LS marked this conversation as resolved.
continue;
}

// If groove says it is time to play OR or the delay just expired
if (gs->TriggerChannel(i) || (delayExpired && delayExpired[i])) {
int pos = viewData_->phrasePlayPos_[i];
FourCC cc = viewData_->song_->phrase_.cmd1_[phrase * 16 + pos];
ushort param = viewData_->song_->phrase_.param1_[phrase * 16 + pos];
Expand Down
2 changes: 1 addition & 1 deletion sources/Application/Player/Player.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class Player : public I_Observer,
bool IsRunning();
bool GetStopAtEnd() { return stopAtEnd_; }

void ProcessCommands();
void ProcessCommands(bool delayExpired[SONG_CHANNEL_COUNT] = nullptr);
bool ProcessChannelCommand(int channel, FourCC cmd, ushort param);

void StartStreaming(const char *name, int startSample = 0);
Expand Down