struct cbox_engine *cbox_engine_new(struct cbox_document *doc, struct cbox_rt *rt) { struct cbox_engine *engine = malloc(sizeof(struct cbox_engine)); CBOX_OBJECT_HEADER_INIT(engine, cbox_engine, doc); engine->rt = rt; engine->scenes = NULL; engine->scene_count = 0; engine->effect = NULL; engine->master = cbox_master_new(engine); engine->master->song = cbox_song_new(doc); engine->spb = NULL; if (rt) cbox_io_env_copy(&engine->io_env, &rt->io_env); else { engine->io_env.srate = 0; // must be overridden engine->io_env.buffer_size = 256; engine->io_env.input_count = 0; engine->io_env.output_count = 2; } cbox_midi_buffer_init(&engine->midibuf_aux); cbox_midi_buffer_init(&engine->midibuf_jack); cbox_midi_buffer_init(&engine->midibuf_song); cbox_midi_appsink_init(&engine->appsink, rt); cbox_command_target_init(&engine->cmd_target, cbox_engine_process_cmd, engine); CBOX_OBJECT_REGISTER(engine); return engine; }
struct cbox_adhoc_pattern *cbox_adhoc_pattern_new(struct cbox_engine *engine, int id, struct cbox_midi_pattern *pattern) { struct cbox_adhoc_pattern *ap = calloc(1, sizeof(struct cbox_adhoc_pattern)); ap->next = NULL; ap->pattern = pattern; ap->pattern_playback = cbox_midi_pattern_playback_new(pattern); ap->master = cbox_master_new(engine); cbox_midi_playback_active_notes_init(&ap->active_notes); cbox_midi_clip_playback_init(&ap->playback, &ap->active_notes, ap->master); cbox_midi_buffer_init(&ap->output_buffer); ap->id = id; ap->completed = FALSE; return ap; }