iterate through voices: skip locked voices get parent channel get parent track get voice update flags (uf) add channel uf and global uf if uf & volume: compute volume: fv = ext:vol(v * gv * cv) * mv voice.sig = fv update nax.vol if uf & panning: compute panning: fp = ext:pAN(p) update nax.pan if uf & pitch: compute pitch: fp = ext:pitch(voice.pitch) translate pitch update nax.pitch if uf & filter: compute cutoff,resonance: cutoff = ext:cutoff(voice.cutoff) reso = ext:reso(voice.reso) if( cutoff & 128) disable nax.filter else set nax.filter reset uf