~structBus = Bus.audio(s, 5);  // Bus with 5 channels

(
SynthDef(\layer0_struct0, { |in, out, fftSize=2048|
	var sig = PlayBuf.ar(1, in, loop: 1);
	var chain = FFT(LocalBuf(fftSize), sig);
	chain = PV_RandComb(chain, 0.5, Impulse.kr(2));
	chain = PV_BrickWall(chain);
	Out.ar(out, IFFT(chain));
}).add;
)

(
~structSynths = Array.fill(5, { |i|
	var synthName = ("layer0_struct" ++ i).asSymbol;
	Synth(synthName, [
		\in, b.bufnum,  // your sample buffer
		\out, ~structBus.index + i
	]);
});
)


(
SynthDef(\structMixer, { |out=0, mixIndex=2.0, amp=0.3|
	var ins, mix;

	// Read 5 mono inputs
	ins = Array.fill(5, { |i| In.ar(~structBus.index + i, 1) });

	// Use SelectX to interpolate between adjacent channels
	mix = SelectX.ar(mixIndex.clip(0, 4), ins);

	Out.ar(out, mix * amp ! 2);  // stereo
}).add;
)

// Start the mixer
~mixer = Synth(\structMixer);

(
// MIDI CC Volume
MIDIdef.cc(\structVol, { |val, num, chan|
	~mixer.set(\amp, val.linlin(0, 127, 0.0, 1.0));
}, ccNum: 0, chan: 2);

// MIDI CC Blend
MIDIdef.cc(\structMix, { |val, num, chan|
	~mixer.set(\mixIndex, val.linlin(0, 127, 0.0, 4.0));
}, ccNum: 1, chan: 2);
)

MIDIClient.init;
MIDIIn.connectAll;