feat: humanize MIDI timing and dynamics with reproducible seeded edits
This commit is contained in:
parent
fc76bf6803
commit
d034417c8c
9 changed files with 51 additions and 7 deletions
|
|
@ -1385,6 +1385,9 @@ int main(int argc, char **argv)
|
|||
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);
|
||||
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);
|
||||
window.do_callback();
|
||||
}
|
||||
if (failures != 0) return 1;
|
||||
|
|
|
|||
|
|
@ -111,4 +111,19 @@ static void merge_midi(void)
|
|||
assert(xtc_project_get_note(p,1,¬e)==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;}
|
||||
static void humanize(void)
|
||||
{
|
||||
xtc_project *p=NULL,*q=NULL;uint64_t t,c,n;xtc_note_info a,b;xtc_midi_transform edit={0};
|
||||
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,0,&n)==XTC_OK);
|
||||
assert(xtc_project_clone(p,&q)==XTC_OK);
|
||||
edit.type=XTC_MIDI_TRANSFORM_HUMANIZE;edit.seed=42;edit.timing_variation=30;edit.velocity_variation=12;
|
||||
assert(xtc_project_transform_midi(p,&c,1,&edit)==XTC_OK && xtc_project_transform_midi(q,&c,1,&edit)==XTC_OK);
|
||||
assert(xtc_project_get_note(p,0,&a)==XTC_OK && xtc_project_get_note(q,0,&b)==XTC_OK && !memcmp(&a,&b,sizeof(a)));
|
||||
assert(a.start_tick>=450 && a.start_tick<=510 && a.velocity>=88 && a.velocity<=112 && a.id==n);
|
||||
assert(xtc_project_edit_note(p,n,0,1920,60,100,0)==XTC_OK);edit.timing_variation=960;
|
||||
assert(xtc_project_transform_midi(p,&c,1,&edit)==XTC_ERR_INVALID_ARGUMENT);
|
||||
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;}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue