feat: generate bounded ascending and descending MIDI arpeggio patterns

This commit is contained in:
Johannes Findeisen 2026-11-06 00:42:33 +01:00
commit ea0b4ca3da
9 changed files with 89 additions and 5 deletions

View file

@ -142,4 +142,25 @@ static void chords(void)
assert(xtc_project_note_count(p,&count)==XTC_OK && count==XTC_PROJECT_MAX_NOTES);
xtc_project_destroy(p);
}
int main(void){markers();sections();ripple();duplicate_track();split_midi();merge_midi();humanize();chords();puts("Next DAW workflow tests passed.");return 0;}
static void arpeggio(void)
{
xtc_project *p=NULL,*q=NULL;uint64_t t,c,n;size_t count;xtc_note_info note;int intervals[2]={4,7};
assert(xtc_project_create(&p)==XTC_OK && xtc_project_add_track(p,"Track",&t)==XTC_OK);
assert(xtc_project_add_midi_clip(p,t,0,960,&c)==XTC_OK && xtc_project_add_note(p,c,0,960,60,100,0,&n)==XTC_OK);
assert(xtc_project_chordify(p,&c,1,intervals,2)==XTC_OK);
assert(xtc_project_clone(p,&q)==XTC_OK && xtc_project_arpeggiate(q,&c,1,240,50,1)==XTC_OK);
assert(xtc_project_get_note(q,0,&note)==XTC_OK && note.pitch==67);xtc_project_destroy(q);
assert(xtc_project_arpeggiate(p,&c,1,240,50,0)==XTC_OK);
assert(xtc_project_note_count(p,&count)==XTC_OK && count==4);
assert(xtc_project_get_note(p,1,&note)==XTC_OK && note.start_tick==240 && note.pitch==64 && note.length_tick==120);
assert(xtc_project_get_note(p,3,&note)==XTC_OK && note.start_tick==720 && note.pitch==60);
assert(xtc_project_arpeggiate(p,&c,1,1,100,0)==XTC_OK);
assert(xtc_project_note_count(p,&count)==XTC_OK && count==480);
assert(xtc_project_arpeggiate(p,&c,1,0,100,0)==XTC_ERR_INVALID_ARGUMENT);
xtc_project_destroy(p);p=NULL;
assert(xtc_project_create(&p)==XTC_OK && xtc_project_add_track(p,"Track",&t)==XTC_OK);
assert(xtc_project_add_midi_clip(p,t,0,XTC_PROJECT_MAX_TICK,&c)==XTC_OK && xtc_project_add_note(p,c,0,XTC_PROJECT_MAX_TICK,60,100,0,&n)==XTC_OK);
assert(xtc_project_arpeggiate(p,&c,1,1,100,0)==XTC_ERR_CAPACITY);
assert(xtc_project_note_count(p,&count)==XTC_OK && count==1);xtc_project_destroy(p);
}
int main(void){markers();sections();ripple();duplicate_track();split_midi();merge_midi();humanize();chords();arpeggio();puts("Next DAW workflow tests passed.");return 0;}