Phase 35: add persistent preferences and sequencer loop playback

This commit is contained in:
Johannes Findeisen 2026-10-28 10:37:01 +01:00
commit 47b7d38a66
21 changed files with 852 additions and 108 deletions

View file

@ -361,6 +361,46 @@ int main(void)
CHECK(xtc_backend_get_status(backend, &status) == XTC_OK && !status.running);
CHECK(xtc_backend_close(backend) == XTC_OK);
}
{
config.channel_count = 1;config.max_frames = 128;
CHECK(xtc_backend_open(&config, &backend) == XTC_OK);
CHECK(xtc_backend_submit(backend, graph) == XTC_OK);
CHECK(xtc_backend_set_loop(backend, 100, 163, 1) == XTC_ERR_INVALID_ARGUMENT);
CHECK(xtc_backend_set_loop(backend, 100, 164, 1) == XTC_OK);
CHECK(xtc_backend_start(backend) == XTC_OK);
CHECK(xtc_backend_set_loop(backend, 0, 64, 0) == XTC_ERR_INVALID_STATE);
CHECK(process_cb(32, context) == 0);
CHECK(xtc_backend_get_status(backend, &status) == XTC_OK && status.sample_position == 132);
CHECK(process_cb(32, context) == 0);
CHECK(xtc_backend_get_status(backend, &status) == XTC_OK && status.sample_position == 100);
CHECK(process_cb(17, context) == 0 && process_cb(32, context) == 0 && process_cb(32, context) == 0);
CHECK(xtc_backend_get_status(backend, &status) == XTC_OK && status.sample_position == 117);
for(i=0;i<128;++i)input[i]=(float)i;
CHECK(process_cb(128,context)==0);
for(i=0;i<128;++i)CHECK(output[i]==input[i]*0.5f);
CHECK(xtc_backend_get_status(backend,&status)==XTC_OK && status.sample_position==117);
CHECK(xtc_backend_stop(backend) == XTC_OK);
CHECK(xtc_backend_set_loop(backend, 100, 164, 0) == XTC_OK);
CHECK(xtc_backend_start(backend) == XTC_OK && process_cb(32, context) == 0);
CHECK(xtc_backend_get_status(backend, &status) == XTC_OK && status.sample_position == 149);
CHECK(xtc_backend_stop(backend) == XTC_OK && xtc_backend_close(backend) == XTC_OK);
}
{
xtc_project *p = NULL;uint64_t track,clip,note;
config.max_frames=128;config.channel_count=1;
CHECK(xtc_backend_open(&config,&backend)==XTC_OK);
CHECK(xtc_project_create(&p)==XTC_OK);
CHECK(xtc_project_add_track(p,"Loop instrument",&track)==XTC_OK);
CHECK(xtc_project_add_midi_clip(p,track,0,3840,&clip)==XTC_OK);
CHECK(xtc_project_add_note(p,clip,0,960,69,100,0,&note)==XTC_OK);
CHECK(xtc_backend_prepare_project(backend,p)==XTC_OK);
CHECK(xtc_backend_set_loop(backend,0,64,1)==XTC_OK);
CHECK(xtc_backend_start(backend)==XTC_OK && process_cb(128,context)==0);
CHECK(output[1]!=0);
for(i=0;i<64;++i)CHECK(output[i]==output[i+64]);
CHECK(xtc_backend_stop(backend)==XTC_OK && xtc_backend_close(backend)==XTC_OK);
xtc_project_destroy(p);
}
CHECK(closed >= 104);
CHECK(xtc_backend_close(NULL) == XTC_OK);
xtc_graph_destroy(invalid_graph);