@@ -122,6 +122,7 @@ namespace lsp
122122 pInstSel = NULL ;
123123 pDOGain = NULL ;
124124 pDOPan = NULL ;
125+ pDOListen = NULL ;
125126 }
126127
127128 sampler::~sampler ()
@@ -243,6 +244,7 @@ namespace lsp
243244 {
244245 BIND_PORT (pDOGain);
245246 BIND_PORT (pDOPan);
247+ BIND_PORT (pDOListen);
246248 }
247249
248250 // If number of samplers <= 2 - skip area selector
@@ -421,6 +423,8 @@ namespace lsp
421423 nDOMode |= DM_APPLY_GAIN;
422424 if ((pDOPan != NULL ) && (pDOPan->value () >= 0 .5f ))
423425 nDOMode |= DM_APPLY_PAN;
426+ if ((pDOListen != NULL ) && (pDOListen->value () >= 0 .5f ))
427+ nDOMode |= DM_APPLY_LISTEN;
424428
425429 lsp_trace (" muting=%s" , (bMuting) ? " true" : " false" );
426430 lsp_trace (" note_off=%s" , (note_off) ? " true" : " false" );
@@ -697,27 +701,33 @@ namespace lsp
697701 // Now post-process all channels for sampler
698702 for (size_t j=0 ; j<nChannels; ++j)
699703 {
700- sampler_channel_t *c = &s->vChannels [j];
704+ sampler_channel_t * const c1 = &s->vChannels [j];
705+ sampler_channel_t * const c2 = &s->vChannels [j ^ 1 ];
701706
702707 // Copy data to direct output buffer if present
703708 float gain = (nDOMode & DM_APPLY_GAIN) ? s->fGain : 1 .0f ;
704- float pan = (nDOMode & DM_APPLY_PAN) ? c->fPan : 1 .0f ;
705- if (s->vChannels [j].vDry != NULL )
706- dsp::fmadd_k3 (s->vChannels [j].vDry , tmp_outs[j], pan * gain, count);
707- if (s->vChannels [j^1 ].vDry != NULL )
708- dsp::fmadd_k3 (s->vChannels [j^1 ].vDry , tmp_outs[j], (1 .0f - pan) * gain, count);
709+ float pan = (nDOMode & DM_APPLY_PAN) ? c1->fPan : 1 .0f ;
710+
711+ if (c1->vDry != NULL )
712+ {
713+ dsp::fmadd_k3 (c1->vDry , tmp_outs[j], pan * gain, count);
714+ if (nDOMode & DM_APPLY_LISTEN)
715+ dsp::add2 (c1->vDry , tmp_listen[j], count);
716+ }
717+ if (c2->vDry != NULL )
718+ dsp::fmadd_k3 (c2->vDry , tmp_outs[j], (1 .0f - pan) * gain, count);
709719
710720 // Process output
711- c ->sBypass .process (tmp_outs[j], NULL , tmp_outs[j], count);
721+ c1 ->sBypass .process (tmp_outs[j], NULL , tmp_outs[j], count);
712722 dsp::add2 (tmp_outs[j], tmp_listen[j], count);
713723
714724 // Mix output to common sampler's bus
715725 if (vChannels[j].vOut != NULL )
716- dsp::fmadd_k3 (vChannels[j].vOut , tmp_outs[j], c ->fPan * s->fGain , count);
726+ dsp::fmadd_k3 (vChannels[j].vOut , tmp_outs[j], c1 ->fPan * s->fGain , count);
717727
718728 // Apply pan to the other stereo channel (if present)
719729 if (vChannels[j^1 ].vOut != NULL )
720- dsp::fmadd_k3 (vChannels[j^1 ].vOut , tmp_outs[j], (1 .0f - c ->fPan ) * s->fGain , count);
730+ dsp::fmadd_k3 (vChannels[j^1 ].vOut , tmp_outs[j], (1 .0f - c1 ->fPan ) * s->fGain , count);
721731 }
722732
723733 // Post-process dry channels
0 commit comments