Re: PV_BinPeakEQ/miSC_getFFTbufSizes error
[email protected] Fri, 28 May 2021 15:25:45 +0200
| Newsgroups | gmane.comp.audio.supercollider.user |
|---|---|
| Message-ID | <[email protected]> |
> Am 28.05.2021 um 08:41 schrieb [email protected]: > > I recently updated SuperCollider and I'm finding that the code I was > using for PV_BinPeakEQ uGen no longer works correctly. PV_BinPeakEQ is no part of miSCellaneous_lib (in contrast to PV_BinRange and PV_BinGap which are similarily based on PV_BrickWall). I suggested this class in a post at some point. Maybe I’ve updated it meanwhile, my code is from August 11th 2020 and it works //////// PV_BinPeakEQ : PV_ChainUGen { *new { |buffer, loBin, hiBin, db| ^this.multiNew(\control, buffer, loBin, hiBin, db) } *new1 { |rate, buffer, loBin, hiBin, db| var bufSize, wipe_1, wipe_2, chain_band, chain_lo, chain_hi, chain_mul, mul, size; bufSize = buffer.fftSize; size = buffer.asArray.size; chain_band = size.collect { LocalBuf(bufSize) }; chain_lo = size.collect { LocalBuf(bufSize) }; chain_hi = size.collect { LocalBuf(bufSize) }; mul = Impulse.ar(SampleRate.ir * 2 / bufSize) * db.dbamp; chain_mul = FFT(LocalBuf(bufSize), mul); chain_band = PV_Copy(buffer, chain_band); chain_lo = PV_Copy(buffer, chain_lo); chain_hi = PV_Copy(buffer, chain_hi); wipe_1 = loBin * 2 / bufSize; chain_band = PV_BrickWall(chain_band, wipe_1); chain_lo = PV_BrickWall(chain_lo, wipe_1 - 1); wipe_2 = hiBin * 2 / bufSize; chain_band = PV_BrickWall(chain_band, wipe_2 - 1); chain_hi = PV_BrickWall(chain_hi, wipe_2); chain_band = PV_MagMul(chain_band, chain_mul); ^PV_Add(chain_band, PV_Add(chain_lo, chain_hi))[0] } } //////// ( SynthDef(\threeBandFFTEQ, { |out = 0, in, amp = 1, mix = 1, band1 = #[200, 500], band2 = #[1200, 1700], band3 = #[3200, 5000], dbs = #[0, 0, 0]| var inSig = In.ar(in, 1), sig; var loBin1, hiBin1, loBin2, hiBin2, loBin3, hiBin3, binRange; var bufSize = 1024; var chain = FFT(LocalBuf(bufSize), inSig); binRange = s.sampleRate / bufSize; loBin1 = (band1[0] / binRange); hiBin1 = (band1[1] / binRange); loBin2 = (band2[0] / binRange); hiBin2 = (band2[1] / binRange); loBin3 = (band3[0] / binRange); hiBin3 = (band3[1] / binRange); chain = PV_BinPeakEQ(chain, loBin1, hiBin1, dbs[0]); chain = PV_BinPeakEQ(chain, loBin2, hiBin2, dbs[1]); chain = PV_BinPeakEQ(chain, loBin3, hiBin3, dbs[2]); XOut.ar(out, mix, IFFT(chain) ! 2); }).add; ) a = Bus.audio(s, 1); s.freqscope; y = Synth(\threeBandFFTEQ, [in: a]); x = { Out.ar(a, Saw.ar(100, 0.1)) }.play y.set(\dbs, [0, -60, -20]) y.set(\band2, [300, 2000]) x.free; y.free; Cheers Daniel ----------------------------- http://daniel-mayer.at -----------------------------