]> git.sesse.net Git - nageru/commitdiff
Make the MIDI play button blinking when something is ready to play, and solid when...
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Thu, 17 Jan 2019 00:05:43 +0000 (01:05 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Thu, 17 Jan 2019 00:05:43 +0000 (01:05 +0100)
futatabi/behringer_cmd_pl1.midimapping
futatabi/futatabi_midi_mapping.proto
futatabi/mainwindow.cpp
futatabi/midi_mapper.cpp
futatabi/midi_mapper.h

index 23da40bfb9117bc57aec5c4164ff361146a28b15..a3a2c64fb48b18d2e67f056ccfc848ae02b8efb1 100644 (file)
@@ -20,7 +20,8 @@ camera: { button: { note_number: 23 } is_current: { note_number: 23 } }
 
 # 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 }
index 31b731e5cba61becae3978424a6e7ae27976fb2f..38430fcb183ba2df8c8742d5a1f8931594e23ccd 100644 (file)
@@ -43,7 +43,8 @@ message MIDIMappingProto {
 
        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;
index 3ecab3f1ab819e93fa5b92a05aac10c71643fc65..11419c75b7c6dcc7c27b5110326cae09895ca6ac 100644 (file)
@@ -616,9 +616,8 @@ void MainWindow::play_clicked()
        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()
@@ -629,6 +628,7 @@ 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)
@@ -649,9 +649,9 @@ void MainWindow::speed_lock_clicked()
 
 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)
@@ -891,7 +891,13 @@ void MainWindow::playlist_selection_changed()
                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");
index 061dd2d8c7c3371875b623438a5ce66a26d8ab27..63b21e44fa7c6fb53c089caa89d4a42686a51cd4 100644 (file)
@@ -228,8 +228,10 @@ void MIDIMapper::update_lights_lock_held()
        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);
index abaadaf44842032610d7d982e7408a229b9019fa..2240e70ce7e55854028b40d885201388935f9bb2 100644 (file)
@@ -71,7 +71,7 @@ public:
                queue_enabled_light = enabled;
                refresh_lights();
        }
-       void set_play_enabled(bool enabled) {
+       void set_play_enabled(LightState enabled) {
                play_enabled_light = enabled;
                refresh_lights();
        }
@@ -108,7 +108,7 @@ private:
 
        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};