void cbox_song_use_looped_pattern(struct cbox_song *song, struct cbox_midi_pattern *pattern) { assert(pattern->owner == song); song->patterns = g_list_remove(song->patterns, pattern); pattern->owner = NULL; cbox_song_clear(song); struct cbox_track *trk = cbox_track_new(CBOX_GET_DOCUMENT(song)); cbox_song_add_track(song, trk); cbox_song_add_pattern(song, pattern); song->loop_start_ppqn = 0; song->loop_end_ppqn = pattern->loop_end; cbox_track_add_item(trk, 0, pattern, 0, pattern->loop_end); cbox_engine_update_song_playback(app.engine); }
static void cbox_rt_on_midi_outputs_changed(void *user_data) { struct cbox_rt *rt = user_data; if (rt->engine) cbox_engine_update_song_playback(rt->engine); }