feat: consolidate trimmed MIDI clips with explicit note boundary cropping

This commit is contained in:
Johannes Findeisen 2026-11-06 00:38:13 +01:00
commit fc76bf6803
9 changed files with 68 additions and 5 deletions

View file

@ -1382,6 +1382,9 @@ int main(int argc, char **argv)
CHECK(s->select(0,0));s->position(1920);CHECK(s->split_selection()==XTC_OK);
xtc_project_get_counts(s->project(),&tracks,&clips);CHECK(clips==2);
CHECK(window.undo()==XTC_OK);xtc_project_get_counts(s->project(),&tracks,&clips);CHECK(clips==1);
CHECK(s->select(0,0));CHECK(s->duplicate_selection()==XTC_OK);s->select_all_clips();CHECK(s->merge_midi()==XTC_OK);
xtc_project_get_counts(s->project(),&tracks,&clips);CHECK(clips==1);
CHECK(window.undo()==XTC_OK);xtc_project_get_counts(s->project(),&tracks,&clips);CHECK(clips==2);
window.do_callback();
}
if (failures != 0) return 1;

View file

@ -95,4 +95,20 @@ static void split_midi(void)
assert(xtc_midi_plan_render(before,11800,NULL,0,a,512)==XTC_OK && xtc_midi_plan_render(after,11800,NULL,0,b,512)==XTC_OK);
assert(!memcmp(a,b,sizeof(a)));xtc_midi_plan_destroy(before);xtc_midi_plan_destroy(after);xtc_project_destroy(p);
}
int main(void){markers();sections();ripple();duplicate_track();split_midi();puts("Next DAW workflow tests passed.");return 0;}
static void merge_midi(void)
{
xtc_project *p=NULL;uint64_t t,ids[2],n,out=999;xtc_note_info note;size_t count;
assert(xtc_project_create(&p)==XTC_OK && xtc_project_add_track(p,"Track",&t)==XTC_OK);
assert(xtc_project_add_midi_clip(p,t,960,960,&ids[0])==XTC_OK && xtc_project_add_midi_clip(p,t,1920,960,&ids[1])==XTC_OK);
assert(xtc_project_add_note(p,ids[0],0,240,60,90,0,&n)==XTC_OK);
assert(xtc_project_add_note(p,ids[0],600,240,64,100,1,&n)==XTC_OK);
assert(xtc_project_add_note(p,ids[1],0,480,67,110,2,&n)==XTC_OK);
assert(xtc_project_edit_clip(p,ids[0],t,960,480,240)==XTC_OK && xtc_project_edit_clip(p,ids[1],t,1920,480,240)==XTC_OK);
assert(xtc_project_merge_midi(p,ids,1,&out)==XTC_ERR_INVALID_ARGUMENT && out==999);
assert(xtc_project_merge_midi(p,ids,2,&out)==XTC_OK);
assert(xtc_project_note_count(p,&count)==XTC_OK && count==2);
assert(xtc_project_get_note(p,0,&note)==XTC_OK && note.start_tick==360 && note.length_tick==120 && note.pitch==64 && note.channel==1);
assert(xtc_project_get_note(p,1,&note)==XTC_OK && note.start_tick==960 && note.length_tick==240 && note.pitch==67);
xtc_project_destroy(p);
}
int main(void){markers();sections();ripple();duplicate_track();split_midi();merge_midi();puts("Next DAW workflow tests passed.");return 0;}