feat: build custom MIDI chord voicings with atomic pitch and capacity checks
This commit is contained in:
parent
d034417c8c
commit
6be4f9803a
9 changed files with 76 additions and 5 deletions
|
|
@ -1388,6 +1388,8 @@ int main(int argc, char **argv)
|
|||
CHECK(s->select(0,0));CHECK(window.open_piano_roll()==XTC_OK);CHECK(window.piano_roll()->add_note(480,240,60)==XTC_OK);
|
||||
xtc_midi_transform human{};human.type=XTC_MIDI_TRANSFORM_HUMANIZE;human.seed=42;human.timing_variation=12;human.velocity_variation=8;
|
||||
CHECK(s->transform_midi(human)==XTC_OK);CHECK(window.undo()==XTC_OK);
|
||||
CHECK(s->select(0,0));CHECK(s->make_chord({4,7})==XTC_OK);
|
||||
size_t notes=0;xtc_project_note_count(s->project(),¬es);CHECK(notes==3);
|
||||
window.do_callback();
|
||||
}
|
||||
if (failures != 0) return 1;
|
||||
|
|
|
|||
|
|
@ -126,4 +126,20 @@ static void humanize(void)
|
|||
assert(xtc_project_get_note(p,0,&a)==XTC_OK && a.start_tick==0 && a.velocity==100);
|
||||
xtc_project_destroy(p);xtc_project_destroy(q);
|
||||
}
|
||||
int main(void){markers();sections();ripple();duplicate_track();split_midi();merge_midi();humanize();puts("Next DAW workflow tests passed.");return 0;}
|
||||
static void chords(void)
|
||||
{
|
||||
xtc_project *p=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,1920,&c)==XTC_OK && xtc_project_add_note(p,c,480,120,60,100,2,&n)==XTC_OK);
|
||||
assert(xtc_project_chordify(p,&c,1,intervals,2)==XTC_OK && xtc_project_note_count(p,&count)==XTC_OK && count==3);
|
||||
assert(xtc_project_get_note(p,2,¬e)==XTC_OK && note.pitch==67 && note.start_tick==480 && note.channel==2 && note.id!=n);
|
||||
assert(xtc_project_add_note(p,c,0,120,125,100,0,&n)==XTC_OK);
|
||||
assert(xtc_project_chordify(p,&c,1,intervals,2)==XTC_ERR_INVALID_ARGUMENT);
|
||||
assert(xtc_project_note_count(p,&count)==XTC_OK && count==4);
|
||||
intervals[1]=4;assert(xtc_project_chordify(p,&c,1,intervals,2)==XTC_ERR_INVALID_ARGUMENT);
|
||||
while(count<XTC_PROJECT_MAX_NOTES){assert(xtc_project_add_note(p,c,0,1,60,100,0,&n)==XTC_OK);++count;}
|
||||
intervals[0]=1;assert(xtc_project_chordify(p,&c,1,intervals,1)==XTC_ERR_CAPACITY);
|
||||
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;}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue