From b691afdd85236ef1660b0932b3c27895fe774110 Mon Sep 17 00:00:00 2001 From: Leo Coogan Date: Tue, 20 May 2025 14:03:15 -0400 Subject: [PATCH] convolution crossfade --- convolution.scd | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/convolution.scd b/convolution.scd index bc11979..2539807 100644 --- a/convolution.scd +++ b/convolution.scd @@ -1,34 +1,39 @@ -~ir = Buffer.read(s, "/Users/lcoogan/snd/samples/convolution/ir_chunks/ir_chunk_055.wav"); +~irA = Buffer.read(s, "/home/lcoogan/snd/samples/convolution/ir_chunks/ir_chunk_000.wav"); +~irB = Buffer.read(s, "/home/lcoogan/snd/samples/freesound/vocals/ymaaela/fvocal.wav"); ~ir.play; b = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/harm/01 Ritual for Harmonica.wav", bufnum:0); -b = Buffer.read(s, "/Users/lcoogan/Misc/grave.wav"); +b = Buffer.read(s, "/home/lcoogan/Misc/grave.wav"); b = Buffer.read +b = Buffer.read(s, "/home/lcoogan/snd/live/2025-04-26.Basic_City_Brewery/trax/01-Cantor_Samual_Malavsky_Shomea_Kol_Bichios.wav"); -( -SynthDef(\convolv, { - var sig, env; - - // sig = SinOsc.ar(\freq.ar(440)); - sig = PlayBuf.ar(1, b, 1, loop: 0, doneAction: 2); // Mono playback (1 channel) - // env = EnvGen.kr(Env.asr(0.1, 0.3), doneAction:1); - // sig = LPF.ar(sig, 600); +( +SynthDef(\convolvCrossfade, { + var sig, convA, convB, mix; + sig = PlayBuf.ar(1, b, 1, loop: 0, doneAction: 2); - sig = Convolution2.ar(sig, ~ir, 512); // Apply convolution reverb with buffer size 512''' + // Run both convolutions + convA = Convolution2.ar(sig, ~irA.bufnum, 512); + convB = Convolution2.ar(sig, ~irB.bufnum, 512); + // Crossfade using mix control (-1 to 1) + mix = \mix.kr(0.0); // -1 = only A, 0 = 50/50, 1 = only B + convA = convA * ((1 - mix) * 0.5); // scales from 1 to 0 as mix goes from -1 to 1 + convB = convB * ((1 + mix) * 0.5); // scales from 0 to 1 as mix goes from -1 to 1 - Out.ar(0, sig.dup * 0.1); + Out.ar(0, (convA + convB).dup * 0.1); }).add; - ) -Synth(\convolv, [\freq, [50].midicps]); +x = Synth(\convolvCrossfade, [\mix, 0.0]); // 50/50 blend -MIDIIn.connectAll; +x.set(\mix, -1.0); // Only IR A +x.set(\mix, 1.0); // Only IR B +x.set(\mix, 0.5); // Mostly IR B