feat(mixer): control insert wet mix and chain output gain (phase 88)

This commit is contained in:
Johannes Findeisen 2026-11-06 01:41:23 +01:00
commit a3858b1c82
6 changed files with 49 additions and 11 deletions

View file

@ -30,13 +30,19 @@ static void rendering(void)
c.slots[0].enabled=0;assert(xtc_project_set_chain(p,track,&c)==XTC_OK && xtc_audio_plan_create(p,8000,&audio)==XTC_OK);
assert(xtc_audio_plan_set_fade_frames(audio,0)==XTC_OK && xtc_audio_plan_render(audio,0,out,32)==XTC_OK && out[0]==1 && out[8]==0);
xtc_audio_plan_destroy(audio);audio=NULL;
c.slots[0].enabled=1;c.slots[0].wet=.25f;
assert(xtc_project_set_chain(p,track,&c)==XTC_OK && xtc_audio_plan_create(p,8000,&audio)==XTC_OK);
assert(xtc_audio_plan_set_fade_frames(audio,0)==XTC_OK && xtc_audio_plan_render(audio,0,out,32)==XTC_OK);
assert(fabsf(out[0]-.75f)<.00001f && fabsf(out[8]-.25f)<.00001f);xtc_audio_plan_destroy(audio);audio=NULL;
c.slots[0].wet=0;assert(xtc_project_set_chain(p,track,&c)==XTC_OK && xtc_audio_plan_create(p,8000,&audio)==XTC_OK);
assert(xtc_audio_plan_set_fade_frames(audio,0)==XTC_OK && xtc_audio_plan_render(audio,0,out,32)==XTC_OK && out[0]==1 && out[8]==0);xtc_audio_plan_destroy(audio);audio=NULL;
/* Reject split ownership of a nonlinear chain on a hybrid track. */
assert(xtc_project_add_midi_clip(p,track,0,960,&clip)==XTC_OK);
assert(xtc_audio_plan_create(p,8000,&audio)==XTC_ERR_UNSUPPORTED && audio==NULL);
xtc_project_destroy(p);p=NULL;
assert(xtc_project_create(&p)==XTC_OK && xtc_project_add_track(p,"MIDI",&track)==XTC_OK && xtc_project_add_midi_clip(p,track,0,960,&clip)==XTC_OK);
assert(xtc_project_add_note(p,clip,0,960,69,127,0,&note)==XTC_OK);
c.slots[0].enabled=1;assert(xtc_project_set_chain(p,track,&c)==XTC_OK && xtc_midi_plan_create(p,8000,&midi)==XTC_OK);
c.slots[0].enabled=1;c.slots[0].wet=1;assert(xtc_project_set_chain(p,track,&c)==XTC_OK && xtc_midi_plan_create(p,8000,&midi)==XTC_OK);
assert(xtc_midi_plan_set_fade_frames(midi,0)==XTC_OK && xtc_midi_plan_render(midi,0,NULL,0,out,32)==XTC_OK);
for(size_t j=0;j<32;++j)assert(fabsf(out[j]-(j<8 ? 0.f : .05f*sinf(6.28318530718f*440.f*(float)(j-8)/8000.f)))<.00001f);
xtc_midi_plan_destroy(midi);xtc_project_destroy(p);unlink(wave);