feat(midi): strum chords with preserved note ends and undo (phase 99)

This commit is contained in:
Johannes Findeisen 2026-11-06 02:16:46 +01:00
commit bd0a63c06d
17 changed files with 172 additions and 5 deletions

View file

@ -294,6 +294,22 @@ static void sample_failures(void)
}
xtc_sample_destroy(source);xtc_project_destroy(p);assert(rmdir(root)==0);
}
static void strum_failures(void)
{
xtc_project *p=NULL;uint64_t t,c,n;int succeeded=0;
assert(xtc_project_create(&p)==XTC_OK && xtc_project_add_track(p,"Chord",&t)==XTC_OK);
assert(xtc_project_add_midi_clip(p,t,0,1920,&c)==XTC_OK);
assert(xtc_project_add_note(p,c,0,200,60,100,0,&n)==XTC_OK && xtc_project_add_note(p,c,0,200,67,100,0,&n)==XTC_OK);
for(int failure=0;failure<128;++failure){
xtc_project *copy=NULL;xtc_note_info note;xtc_result r;
assert(xtc_project_clone(p,&copy)==XTC_OK);fail_after=failure;
r=xtc_project_strum(copy,&c,1,30,0);fail_after=-1;
if(r==XTC_OK)succeeded=1;
else {assert(r==XTC_ERR_OUT_OF_MEMORY);assert(xtc_project_get_note(copy,1,&note)==XTC_OK && note.id==n && note.start_tick==0 && note.length_tick==200);}
xtc_project_destroy(copy);if(succeeded)break;
}
assert(succeeded);xtc_project_destroy(p);
}
static void track_insert_failures(void)
{
xtc_project *p=NULL;xtc_track_chain c={0};uint64_t t,clip;int mode,failure;
@ -324,6 +340,7 @@ static void track_insert_failures(void)
}
int main(void)
{
strum_failures();
track_insert_failures();
sample_failures();
composition_failures();