Browse Source

Cleanup

master
cancel 5 years ago
parent
commit
33ec005030
  1. 51
      tui_main.c

51
tui_main.c

@ -1821,6 +1821,32 @@ typedef enum {
Ged_input_cmd_escape, Ged_input_cmd_escape,
} Ged_input_cmd; } Ged_input_cmd;
staticni void ged_set_playing(Ged *a, bool playing) {
if (playing == a->is_playing)
return;
if (playing) {
undo_history_push(&a->undo_hist, &a->field, a->tick_num);
a->is_playing = true;
a->clock = stm_now();
a->midi_bclock_sixths = 0;
// dumb'n'dirty, get us close to the next step time, but not quite
a->accum_secs = 60.0 / (double)a->bpm / 4.0;
if (a->midi_bclock) {
send_midi_byte(a->oosc_dev, &a->midi_mode, 0xFA); // "start"
a->accum_secs /= 6.0;
}
a->accum_secs -= 0.0001;
send_control_message(a->oosc_dev, "/orca/started");
} else {
ged_stop_all_sustained_notes(a);
a->is_playing = false;
send_control_message(a->oosc_dev, "/orca/stopped");
if (a->midi_bclock)
send_midi_byte(a->oosc_dev, &a->midi_mode, 0xFC); // "stop"
}
a->is_draw_dirty = true;
}
staticni void ged_input_cmd(Ged *a, Ged_input_cmd ev) { staticni void ged_input_cmd(Ged *a, Ged_input_cmd ev) {
switch (ev) { switch (ev) {
case Ged_input_cmd_undo: case Ged_input_cmd_undo:
@ -1870,27 +1896,7 @@ staticni void ged_input_cmd(Ged *a, Ged_input_cmd ev) {
a->is_draw_dirty = true; a->is_draw_dirty = true;
break; break;
case Ged_input_cmd_toggle_play_pause: case Ged_input_cmd_toggle_play_pause:
if (a->is_playing) { ged_set_playing(a, !a->is_playing);
ged_stop_all_sustained_notes(a);
a->is_playing = false;
send_control_message(a->oosc_dev, "/orca/stopped");
if (a->midi_bclock)
send_midi_byte(a->oosc_dev, &a->midi_mode, 0xFC); // "stop"
} else {
undo_history_push(&a->undo_hist, &a->field, a->tick_num);
a->is_playing = true;
a->clock = stm_now();
a->midi_bclock_sixths = 0;
// dumb'n'dirty, get us close to the next step time, but not quite
a->accum_secs = 60.0 / (double)a->bpm / 4.0;
if (a->midi_bclock) {
send_midi_byte(a->oosc_dev, &a->midi_mode, 0xFA); // "start"
a->accum_secs /= 6.0;
}
a->accum_secs -= 0.0001;
send_control_message(a->oosc_dev, "/orca/started");
}
a->is_draw_dirty = true;
break; break;
case Ged_input_cmd_toggle_show_event_list: case Ged_input_cmd_toggle_show_event_list:
a->draw_event_list = !a->draw_event_list; a->draw_event_list = !a->draw_event_list;
@ -3553,8 +3559,7 @@ int main(int argc, char **argv) {
ged_make_cursor_visible(&t.ged); ged_make_cursor_visible(&t.ged);
// Send initial BPM // Send initial BPM
send_num_message(t.ged.oosc_dev, "/orca/bpm", (I32)t.ged.bpm); send_num_message(t.ged.oosc_dev, "/orca/bpm", (I32)t.ged.bpm);
// Auto-play ged_set_playing(&t.ged, true); // Auto-play
ged_input_cmd(&t.ged, Ged_input_cmd_toggle_play_pause);
// Enter main loop. Process events as they arrive. // Enter main loop. Process events as they arrive.
event_loop:; event_loop:;
int key = wgetch(stdscr); int key = wgetch(stdscr);

Loading…
Cancel
Save