# Play is naturally mapped to the play button.
play: { note_number: 35 }
-play_enabled: { note_number: 35 }
+play_ready: { note_number: 35 velocity: 2 }
+playing: { note_number: 35 }
# Queue is marked to Cue; close enough.
queue: { note_number: 34 }
optional MIDIButtonProto play = 24;
optional int32 play_bank = 25;
- optional MIDILightProto play_enabled = 26;
+ optional MIDILightProto playing = 26;
+ optional MIDILightProto play_ready = 40;
optional MIDIButtonProto toggle_lock = 36;
optional int32 toggle_lock_bank = 37;
live_player->play(clips);
playlist_clips->set_progress({ { start_row, 0.0f } });
ui->playlist->selectionModel()->clear();
- playlist_selection_changed();
-
ui->stop_btn->setEnabled(true);
+ playlist_selection_changed();
}
void MainWindow::stop_clicked()
playlist_clips->set_progress({});
live_player->play(fake_clip);
ui->stop_btn->setEnabled(false);
+ playlist_selection_changed();
}
void MainWindow::speed_slider_changed(int percent)
void MainWindow::live_player_done()
{
- playlist_selection_changed();
playlist_clips->set_progress({});
ui->stop_btn->setEnabled(false);
+ playlist_selection_changed();
}
void MainWindow::live_player_clip_progress(const map<uint64_t, double> &progress, double time_remaining)
any_selected && selected->selectedRows().back().row() < int(playlist_clips->size()) - 1);
ui->play_btn->setEnabled(any_selected);
- midi_mapper.set_play_enabled(any_selected);
+ if (ui->stop_btn->isEnabled()) { // Playing.
+ midi_mapper.set_play_enabled(MIDIMapper::On);
+ } else if (any_selected) {
+ midi_mapper.set_play_enabled(MIDIMapper::Blinking);
+ } else {
+ midi_mapper.set_play_enabled(MIDIMapper::Off);
+ }
if (!any_selected) {
set_output_status("paused");
if (queue_enabled_light) {
activate_mapped_light(*mapping_proto, MIDIMappingProto::kQueueEnabledFieldNumber, &active_lights);
}
- if (play_enabled_light) {
- activate_mapped_light(*mapping_proto, MIDIMappingProto::kPlayEnabledFieldNumber, &active_lights);
+ if (play_enabled_light == On) { // Playing.
+ activate_mapped_light(*mapping_proto, MIDIMappingProto::kPlayingFieldNumber, &active_lights);
+ } else if (play_enabled_light == Blinking) { // Play ready.
+ activate_mapped_light(*mapping_proto, MIDIMappingProto::kPlayReadyFieldNumber, &active_lights);
}
if (locked_light == On) {
activate_mapped_light(*mapping_proto, MIDIMappingProto::kLockedFieldNumber, &active_lights);
queue_enabled_light = enabled;
refresh_lights();
}
- void set_play_enabled(bool enabled) {
+ void set_play_enabled(LightState enabled) {
play_enabled_light = enabled;
refresh_lights();
}
std::atomic<bool> preview_enabled_light{false};
std::atomic<bool> queue_enabled_light{false};
- std::atomic<bool> play_enabled_light{false};
+ std::atomic<LightState> play_enabled_light{Off};
std::atomic<LightState> locked_light{On};
std::atomic<int> current_highlighted_camera{-1};