Got seek_ppqn/seek_samples the other way around :-)
[calfbox.git] / sampler_voice.c
blob87494ab7cd63e033b419f4e0e4447b9eca2cfc48
1 /*
2 Calf Box, an open source musical instrument.
3 Copyright (C) 2010-2013 Krzysztof Foltman
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #include "config-api.h"
20 #include "dspmath.h"
21 #include "errors.h"
22 #include "midi.h"
23 #include "module.h"
24 #include "rt.h"
25 #include "sampler.h"
26 #include "sampler_impl.h"
27 #include "sfzloader.h"
28 #include "stm.h"
29 #include <assert.h>
30 #include <errno.h>
31 #include <glib.h>
32 #include <math.h>
33 #include <memory.h>
34 #include <sndfile.h>
35 #include <stdio.h>
36 #include <stdlib.h>
39 static void lfo_init(struct sampler_lfo *lfo, struct sampler_lfo_params *lfop, int srate, double srate_inv)
41 lfo->phase = 0;
42 lfo->age = 0;
43 lfo->delta = (uint32_t)(lfop->freq * 65536.0 * 65536.0 * CBOX_BLOCK_SIZE * srate_inv);
44 lfo->delay = (uint32_t)(lfop->delay * srate);
45 lfo->fade = (uint32_t)(lfop->fade * srate);
48 static inline float lfo_run(struct sampler_lfo *lfo)
50 if (lfo->age < lfo->delay)
52 lfo->age += CBOX_BLOCK_SIZE;
53 return 0.f;
56 const int FRAC_BITS = 32 - 11;
57 lfo->phase += lfo->delta;
58 uint32_t iphase = lfo->phase >> FRAC_BITS;
59 float frac = (lfo->phase & ((1 << FRAC_BITS) - 1)) * (1.0 / (1 << FRAC_BITS));
61 float v = sampler_sine_wave[iphase] + (sampler_sine_wave[iphase + 1] - sampler_sine_wave[iphase]) * frac;
62 if (lfo->fade && lfo->age < lfo->delay + lfo->fade)
64 v *= (lfo->age - lfo->delay) * 1.0 / lfo->fade;
65 lfo->age += CBOX_BLOCK_SIZE;
68 return v;
71 static gboolean is_4pole(struct sampler_layer_data *v)
73 if (v->cutoff == -1)
74 return FALSE;
75 return v->fil_type == sft_lp24 || v->fil_type == sft_hp24 || v->fil_type == sft_bp12;
78 static gboolean is_tail_finished(struct sampler_voice *v)
80 if (v->layer->cutoff == -1)
81 return TRUE;
82 double eps = 1.0 / 65536.0;
83 if (cbox_biquadf_is_audible(&v->filter_left, eps))
84 return FALSE;
85 if (cbox_biquadf_is_audible(&v->filter_right, eps))
86 return FALSE;
87 if (is_4pole(v->layer))
89 if (cbox_biquadf_is_audible(&v->filter_left2, eps))
90 return FALSE;
91 if (cbox_biquadf_is_audible(&v->filter_right2, eps))
92 return FALSE;
95 return TRUE;
98 static inline void mix_block_into_with_gain(cbox_sample_t **outputs, int oofs, float *src_left, float *src_right, float gain)
100 cbox_sample_t *dst_left = outputs[oofs];
101 cbox_sample_t *dst_right = outputs[oofs + 1];
102 for (size_t i = 0; i < CBOX_BLOCK_SIZE; i++)
104 dst_left[i] += gain * src_left[i];
105 dst_right[i] += gain * src_right[i];
109 ////////////////////////////////////////////////////////////////////////////////
111 void sampler_voice_activate(struct sampler_voice *v, enum sampler_player_type mode)
113 assert(v->gen.mode == spt_inactive);
114 sampler_voice_unlink(&v->program->module->voices_free, v);
115 assert(mode != spt_inactive);
116 assert(v->channel);
117 v->gen.mode = mode;
118 sampler_voice_link(&v->channel->voices_running, v);
121 void sampler_voice_start(struct sampler_voice *v, struct sampler_channel *c, struct sampler_layer_data *l, int note, int vel, int *exgroups, int *pexgroupcount)
123 struct sampler_module *m = c->module;
124 sampler_gen_reset(&v->gen);
126 v->age = 0;
127 if (l->trigger == stm_release)
129 // time since last 'note on' for that note
130 v->age = m->current_time - c->prev_note_start_time[note];
131 double age = v->age * m->module.srate_inv;
132 // if attenuation is more than 84dB, ignore the release trigger
133 if (age * l->rt_decay > 84)
134 return;
136 uint32_t end = l->eff_waveform->info.frames;
137 if (l->end != 0)
138 end = (l->end == -1) ? 0 : l->end;
139 v->last_waveform = l->eff_waveform;
140 v->gen.cur_sample_end = end;
141 if (end > l->eff_waveform->info.frames)
142 end = l->eff_waveform->info.frames;
144 assert(!v->current_pipe);
145 if (end > l->eff_waveform->preloaded_frames)
147 if (l->loop_mode == slm_loop_continuous && l->loop_end < l->eff_waveform->preloaded_frames)
149 // Everything fits in prefetch, because loop ends in prefetch and post-loop part is not being played
151 else
153 uint32_t loop_start = -1, loop_end = end;
154 // If in loop mode, set the loop over the looped part... unless we're doing sustain-only loop on prefetch area only. Then
155 // streaming will only cover the release part, and it shouldn't be looped.
156 if (l->loop_mode == slm_loop_continuous || (l->loop_mode == slm_loop_sustain && l->loop_end >= l->eff_waveform->preloaded_frames))
158 loop_start = l->loop_start;
159 loop_end = l->loop_end;
161 // Those are initial values only, they will be adjusted in process function
162 v->current_pipe = cbox_prefetch_stack_pop(m->pipe_stack, l->eff_waveform, loop_start, loop_end, l->count);
163 if (!v->current_pipe)
164 g_warning("Prefetch pipe pool exhausted, no streaming playback will be possible");
168 v->output_pair_no = l->output % m->output_pairs;
169 v->serial_no = m->serial_no;
171 uint32_t pos = l->offset;
172 pos = l->offset;
173 if (l->offset_random)
174 pos += ((uint32_t)(rand() + (rand() << 16))) % l->offset_random;
175 if (pos >= end)
176 pos = end;
177 v->gen.bigpos = ((uint64_t)pos) << 32;
179 float delay = l->delay;
180 if (l->delay_random)
181 delay += rand() * (1.0 / RAND_MAX) * l->delay_random;
182 if (delay > 0)
183 v->delay = (int)(delay * m->module.srate);
184 else
185 v->delay = 0;
186 v->gen.loop_overlap = l->loop_overlap;
187 v->gen.loop_overlap_step = l->loop_overlap > 0 ? 1.0 / l->loop_overlap : 0;
188 v->gain_fromvel = 1.0 + (l->eff_velcurve[vel] - 1.0) * l->amp_veltrack * 0.01;
189 v->gain_shift = 0.0;
190 v->note = note;
191 v->vel = vel;
192 v->pitch_shift = 0;
193 v->released = 0;
194 v->released_with_sustain = 0;
195 v->released_with_sostenuto = 0;
196 v->captured_sostenuto = 0;
197 v->channel = c;
198 v->layer = l;
199 v->program = c->program;
200 v->amp_env.shape = &l->amp_env_shape;
201 v->filter_env.shape = &l->filter_env_shape;
202 v->pitch_env.shape = &l->pitch_env_shape;
204 v->cutoff_shift = vel * l->fil_veltrack / 127.0 + (note - l->fil_keycenter) * l->fil_keytrack;
205 v->loop_mode = l->loop_mode;
206 v->off_by = l->off_by;
207 int auxes = (m->module.outputs - m->module.aux_offset) / 2;
208 if (l->effect1bus >= 1 && l->effect1bus < 1 + auxes)
209 v->send1bus = l->effect1bus;
210 else
211 v->send1bus = 0;
212 if (l->effect2bus >= 1 && l->effect2bus < 1 + auxes)
213 v->send2bus = l->effect2bus;
214 else
215 v->send2bus = 0;
216 v->send1gain = l->effect1 * 0.01;
217 v->send2gain = l->effect2 * 0.01;
218 if (l->group >= 1 && *pexgroupcount < MAX_RELEASED_GROUPS)
220 gboolean found = FALSE;
221 for (int j = 0; j < *pexgroupcount; j++)
223 if (exgroups[j] == l->group)
225 found = TRUE;
226 break;
229 if (!found)
231 exgroups[(*pexgroupcount)++] = l->group;
234 lfo_init(&v->amp_lfo, &l->amp_lfo, m->module.srate, m->module.srate_inv);
235 lfo_init(&v->filter_lfo, &l->filter_lfo, m->module.srate, m->module.srate_inv);
236 lfo_init(&v->pitch_lfo, &l->pitch_lfo, m->module.srate, m->module.srate_inv);
238 cbox_biquadf_reset(&v->filter_left);
239 cbox_biquadf_reset(&v->filter_right);
240 cbox_biquadf_reset(&v->filter_left2);
241 cbox_biquadf_reset(&v->filter_right2);
243 GSList *nif = v->layer->nifs;
244 while(nif)
246 struct sampler_noteinitfunc *p = nif->data;
247 p->notefunc(p, v);
248 nif = nif->next;
251 cbox_envelope_reset(&v->amp_env);
252 cbox_envelope_reset(&v->filter_env);
253 cbox_envelope_reset(&v->pitch_env);
255 sampler_voice_activate(v, l->eff_waveform->info.channels == 2 ? spt_stereo16 : spt_mono16);
257 if (v->current_pipe && v->gen.bigpos)
258 cbox_prefetch_pipe_consumed(v->current_pipe, v->gen.bigpos >> 32);
261 void sampler_voice_link(struct sampler_voice **pv, struct sampler_voice *v)
263 v->prev = NULL;
264 v->next = *pv;
265 if (*pv)
266 (*pv)->prev = v;
267 *pv = v;
270 void sampler_voice_unlink(struct sampler_voice **pv, struct sampler_voice *v)
272 if (*pv == v)
273 *pv = v->next;
274 if (v->prev)
275 v->prev->next = v->next;
276 if (v->next)
277 v->next->prev = v->prev;
278 v->prev = NULL;
279 v->next = NULL;
282 void sampler_voice_inactivate(struct sampler_voice *v, gboolean expect_active)
284 assert((v->gen.mode != spt_inactive) == expect_active);
285 sampler_voice_unlink(&v->channel->voices_running, v);
286 v->gen.mode = spt_inactive;
287 if (v->current_pipe)
289 cbox_prefetch_stack_push(v->program->module->pipe_stack, v->current_pipe);
290 v->current_pipe = NULL;
292 v->channel = NULL;
293 sampler_voice_link(&v->program->module->voices_free, v);
296 void sampler_voice_release(struct sampler_voice *v, gboolean is_polyaft)
298 if ((v->loop_mode == slm_one_shot_chokeable) != is_polyaft)
299 return;
300 if (v->delay >= v->age + CBOX_BLOCK_SIZE)
302 v->released = 1;
303 sampler_voice_inactivate(v, TRUE);
305 else
307 if (v->loop_mode != slm_one_shot && !v->layer->count)
309 v->released = 1;
310 if (v->loop_mode == slm_loop_sustain && v->current_pipe)
312 // Break the loop
313 v->current_pipe->file_loop_end = v->gen.cur_sample_end;
314 v->current_pipe->file_loop_start = -1;
320 void sampler_voice_process(struct sampler_voice *v, struct sampler_module *m, cbox_sample_t **outputs)
322 struct sampler_layer_data *l = v->layer;
323 assert(v->gen.mode != spt_inactive);
325 // if it's a DAHD envelope without sustain, consider the note finished
326 if (v->amp_env.cur_stage == 4 && v->amp_env.shape->stages[3].end_value <= 0.f)
327 cbox_envelope_go_to(&v->amp_env, 15);
329 struct sampler_channel *c = v->channel;
330 v->age += CBOX_BLOCK_SIZE;
332 if (v->age < v->delay)
333 return;
335 if (v->last_waveform != v->layer->eff_waveform)
337 v->last_waveform = v->layer->eff_waveform;
338 if (v->layer->eff_waveform)
340 v->gen.mode = v->layer->eff_waveform->info.channels == 2 ? spt_stereo16 : spt_mono16;
341 v->gen.cur_sample_end = v->layer->eff_waveform->info.frames;
343 else
345 sampler_voice_inactivate(v, TRUE);
346 return;
349 // XXXKF I'm sacrificing sample accuracy for delays for now
350 v->delay = 0;
352 float pitch = (v->note - l->pitch_keycenter) * l->pitch_keytrack + l->tune + l->transpose * 100 + v->pitch_shift;
353 float modsrcs[smsrc_pernote_count];
354 modsrcs[smsrc_vel - smsrc_pernote_offset] = v->vel * (1.f / 127.f);
355 modsrcs[smsrc_pitch - smsrc_pernote_offset] = pitch * (1.f / 100.f);
356 modsrcs[smsrc_polyaft - smsrc_pernote_offset] = 0.f; // XXXKF not supported yet
357 modsrcs[smsrc_pitchenv - smsrc_pernote_offset] = cbox_envelope_get_next(&v->pitch_env, v->released) * 0.01f;
358 modsrcs[smsrc_filenv - smsrc_pernote_offset] = cbox_envelope_get_next(&v->filter_env, v->released) * 0.01f;
359 modsrcs[smsrc_ampenv - smsrc_pernote_offset] = cbox_envelope_get_next(&v->amp_env, v->released) * 0.01f;
361 modsrcs[smsrc_amplfo - smsrc_pernote_offset] = lfo_run(&v->amp_lfo);
362 modsrcs[smsrc_fillfo - smsrc_pernote_offset] = lfo_run(&v->filter_lfo);
363 modsrcs[smsrc_pitchlfo - smsrc_pernote_offset] = lfo_run(&v->pitch_lfo);
365 if (v->amp_env.cur_stage < 0)
367 if (is_tail_finished(v))
369 sampler_voice_inactivate(v, TRUE);
370 return;
374 float moddests[smdestcount];
375 moddests[smdest_gain] = 0;
376 moddests[smdest_pitch] = pitch;
377 moddests[smdest_cutoff] = v->cutoff_shift;
378 moddests[smdest_resonance] = 0;
379 GSList *mod = l->modulations;
380 if (l->trigger == stm_release)
381 moddests[smdest_gain] -= v->age * l->rt_decay * m->module.srate_inv;
383 if (c->pitchwheel)
384 moddests[smdest_pitch] += c->pitchwheel * (c->pitchwheel > 0 ? l->bend_up : l->bend_down) >> 13;
386 static const int modoffset[4] = {0, -1, -1, 1 };
387 static const int modscale[4] = {1, 1, 2, -2 };
388 while(mod)
390 struct sampler_modulation *sm = mod->data;
391 float value = 0.f, value2 = 1.f;
392 if (sm->src < smsrc_pernote_offset)
393 value = c->cc[sm->src] * (1.f / 127.f);
394 else
395 value = modsrcs[sm->src - smsrc_pernote_offset];
396 value = modoffset[sm->flags & 3] + value * modscale[sm->flags & 3];
398 if (sm->src2 != smsrc_none)
400 if (sm->src2 < smsrc_pernote_offset)
401 value2 = c->cc[sm->src2] * (1.f / 127.f);
402 else
403 value2 = modsrcs[sm->src2 - smsrc_pernote_offset];
405 value2 = modoffset[(sm->flags & 12) >> 2] + value2 * modscale[(sm->flags & 12) >> 2];
406 value *= value2;
408 moddests[sm->dest] += value * sm->amount;
410 mod = g_slist_next(mod);
413 double maxv = 127 << 7;
414 double freq = l->eff_freq * cent2factor(moddests[smdest_pitch]) ;
415 uint64_t freq64 = (uint64_t)(freq * 65536.0 * 65536.0 * m->module.srate_inv);
417 gboolean playing_sustain_loop = !v->released && v->loop_mode == slm_loop_sustain;
418 uint32_t loop_start, loop_end;
419 gboolean bandlimited = FALSE;
421 if (!v->current_pipe)
423 v->gen.sample_data = v->last_waveform->data;
424 if (v->last_waveform->levels)
426 // XXXKF: optimise later by caching last lookup value
427 // XXXKF: optimise later by using binary search
428 for (int i = 0; i < v->last_waveform->level_count; i++)
430 if (freq64 <= v->last_waveform->levels[i].max_rate)
432 v->gen.sample_data = v->last_waveform->levels[i].data;
433 bandlimited = TRUE;
435 break;
441 gboolean play_loop = v->layer->loop_end && (v->loop_mode == slm_loop_continuous || playing_sustain_loop) && v->layer->on_cc_number == -1;
442 loop_start = play_loop ? v->layer->loop_start : (v->layer->count ? 0 : (uint32_t)-1);
443 loop_end = play_loop ? v->layer->loop_end : v->gen.cur_sample_end;
445 if (v->current_pipe)
447 v->gen.sample_data = v->gen.loop_count ? v->current_pipe->data : v->last_waveform->data;
448 v->gen.streaming_buffer = v->current_pipe->data;
450 v->gen.prefetch_only_loop = (loop_end < v->last_waveform->preloaded_frames);
451 v->gen.loop_overlap = 0;
452 if (v->gen.prefetch_only_loop)
454 assert(!v->gen.in_streaming_buffer); // XXXKF this won't hold true when loops are edited while sound is being played (but that's not supported yet anyway)
455 v->gen.loop_start = loop_start;
456 v->gen.loop_end = loop_end;
457 v->gen.streaming_buffer_frames = 0;
459 else
461 v->gen.loop_start = 0;
462 v->gen.loop_end = v->last_waveform->preloaded_frames;
463 v->gen.streaming_buffer_frames = v->current_pipe->buffer_loop_end;
466 else
468 v->gen.loop_count = v->layer->count;
469 v->gen.loop_start = loop_start;
470 v->gen.loop_end = loop_end;
472 if (!bandlimited)
474 // Use pre-calculated join
475 v->gen.scratch = loop_start == (uint32_t)-1 ? v->layer->scratch_end : v->layer->scratch_loop;
477 else
479 // The standard waveforms have extra MAX_INTERPOLATION_ORDER of samples from the loop start added past loop_end,
480 // to avoid wasting time generating the joins in all the practical cases. The slow path covers custom loops
481 // (i.e. partial loop or no loop) over bandlimited versions of the standard waveforms, and those are probably
482 // not very useful anyway, as changing the loop removes the guarantee of the waveform being bandlimited and
483 // may cause looping artifacts or introduce DC offset (e.g. if only a positive part of a sine wave is looped).
484 if (loop_start == 0 && loop_end == l->eff_waveform->info.frames)
485 v->gen.scratch = v->gen.sample_data + l->eff_waveform->info.frames - MAX_INTERPOLATION_ORDER;
486 else
488 // Generate the join for the current wave level
489 // XXXKF this could be optimised further, by checking if waveform and loops are the same as the last
490 // time. However, this code is
491 int shift = l->eff_waveform->info.channels == 2 ? 1 : 0;
492 uint32_t halfscratch = MAX_INTERPOLATION_ORDER << shift;
494 v->gen.scratch = v->gen.scratch_bandlimited;
495 memcpy(&v->gen.scratch_bandlimited[0], &v->gen.sample_data[(loop_end - MAX_INTERPOLATION_ORDER) << shift], halfscratch * sizeof(int16_t) );
496 if (loop_start != (uint32_t)-1)
497 memcpy(v->gen.scratch_bandlimited + halfscratch, &v->gen.sample_data[loop_start << shift], halfscratch * sizeof(int16_t));
498 else
499 memset(v->gen.scratch_bandlimited + halfscratch, 0, halfscratch * sizeof(int16_t));
505 v->gen.bigdelta = freq64;
506 float gain = modsrcs[smsrc_ampenv - smsrc_pernote_offset] * l->volume_linearized * v->gain_fromvel * sampler_channel_addcc(c, 7) * sampler_channel_addcc(c, 11) / (maxv * maxv);
507 if (moddests[smdest_gain] != 0.f)
508 gain *= dB2gain(moddests[smdest_gain]);
509 // http://drealm.info/sfz/plj-sfz.xhtml#amp "The overall gain must remain in the range -144 to 6 decibels."
510 if (gain > 2.f)
511 gain = 2.f;
512 float pan = (l->pan + 100.f) * (1.f / 200.f) + (sampler_channel_addcc(c, 10) * 1.f / maxv - 0.5f) * 2.f;
513 if (pan < 0.f)
514 pan = 0.f;
515 if (pan > 1.f)
516 pan = 1.f;
517 v->gen.lgain = gain * (1.f - pan) / 32768.f;
518 v->gen.rgain = gain * pan / 32768.f;
519 if (l->cutoff != -1.f)
521 float cutoff = l->cutoff * cent2factor(moddests[smdest_cutoff]);
522 if (cutoff < 20.f)
523 cutoff = 20.f;
524 if (cutoff > m->module.srate * 0.45f)
525 cutoff = m->module.srate * 0.45f;
526 //float resonance = v->resonance*pow(32.0,c->cc[71]/maxv);
527 float resonance = l->resonance_linearized * dB2gain(moddests[smdest_resonance]);
528 if (resonance < 0.7f)
529 resonance = 0.7f;
530 if (resonance > 32.f)
531 resonance = 32.f;
532 // XXXKF this is found experimentally and probably far off from correct formula
533 if (is_4pole(v->layer))
534 resonance = sqrtf(resonance / 0.707f) * 0.5f;
535 switch(l->fil_type)
537 case sft_lp12:
538 case sft_lp24:
539 cbox_biquadf_set_lp_rbj(&v->filter_coeffs, cutoff, resonance, m->module.srate);
540 break;
541 case sft_hp12:
542 case sft_hp24:
543 cbox_biquadf_set_hp_rbj(&v->filter_coeffs, cutoff, resonance, m->module.srate);
544 break;
545 case sft_bp6:
546 case sft_bp12:
547 cbox_biquadf_set_bp_rbj(&v->filter_coeffs, cutoff, resonance, m->module.srate);
548 break;
549 case sft_lp6:
550 cbox_biquadf_set_1plp(&v->filter_coeffs, cutoff, m->module.srate);
551 break;
552 case sft_hp6:
553 cbox_biquadf_set_1php(&v->filter_coeffs, cutoff, m->module.srate);
554 break;
555 default:
556 assert(0);
560 float left[CBOX_BLOCK_SIZE], right[CBOX_BLOCK_SIZE];
562 uint32_t samples = 0;
565 if (v->current_pipe)
567 uint32_t limit = cbox_prefetch_pipe_get_remaining(v->current_pipe) - 4;
568 if (!limit)
569 v->gen.mode = spt_inactive;
570 else
572 samples = sampler_gen_sample_playback(&v->gen, left, right, limit);
573 cbox_prefetch_pipe_consumed(v->current_pipe, v->gen.consumed);
574 v->gen.consumed = 0;
577 else
579 samples = sampler_gen_sample_playback(&v->gen, left, right, (uint32_t)-1);
582 for (int i = samples; i < CBOX_BLOCK_SIZE; i++)
583 left[i] = right[i] = 0.f;
584 if (l->cutoff != -1)
586 cbox_biquadf_process(&v->filter_left, &v->filter_coeffs, left);
587 if (is_4pole(v->layer))
588 cbox_biquadf_process(&v->filter_left2, &v->filter_coeffs, left);
589 cbox_biquadf_process(&v->filter_right, &v->filter_coeffs, right);
590 if (is_4pole(v->layer))
591 cbox_biquadf_process(&v->filter_right2, &v->filter_coeffs, right);
593 mix_block_into_with_gain(outputs, v->output_pair_no * 2, left, right, 1.f);
594 if ((v->send1bus > 0 && v->send1gain != 0) || (v->send2bus > 0 && v->send2gain != 0))
596 if (v->send1bus > 0 && v->send1gain != 0)
598 int oofs = m->module.aux_offset + (v->send1bus - 1) * 2;
599 mix_block_into_with_gain(outputs, oofs, left, right, v->send1gain);
601 if (v->send2bus > 0 && v->send2gain != 0)
603 int oofs = m->module.aux_offset + (v->send2bus - 1) * 2;
604 mix_block_into_with_gain(outputs, oofs, left, right, v->send2gain);
607 if (v->gen.mode == spt_inactive)
608 sampler_voice_inactivate(v, FALSE);