Synthcore 2.1 library upgrade next week

Ernest's icon

Yofiel is pleased to provide the Synthcore 2.1 library, which provides quite a number of enhancements over the 2.0 version, next week. Existing customers will receive the upgrade for free, and with the new release, the price will be increasing, so this is mentioned now as fair notice. The library now lives at:

https://www.yofiel.com/downloads/max-msp-downloads/synthcore2-bundle

Synthcore2 Library (Max7)
$5.00
With over 1500 downloads in the first six months, this is the most popular item on this site. The library bundle includes: the Synthcore2 library, with over a hundred functions written in Cycling74 gen~ codebox for audio; two complete synths built with the library that implement the audio path entirely in gen~; a demo patch illustrating usage of the main library functions; data files; and a suite of demo patches with graphical designs of the same gen~ and MAX patches.
For free downloadable demos, please see the compiled versions forWin32,Win64, andMacOS X.

Synthcore 2.1

Released on the first-year anniversary of Synthcore 2.0, The 2.1 upgrade includes the BEAP 5D Filter available for free on this site. Version 2.1 also adds shelving filters, parametric EQ filters, and more biquad filters. There are several FIR/IIR versions that are not biquad based. The Synthcore 2.1 library versions are redesigned so that coefficients can be stored statically within the filter calls, and are only recalculated if the filter controls change. As a side benefit of static coefficient calculation at Parameter value changes, the benefit of passing in constants is minimal, so the signatures are greatly simplified. However, if for example there are two channels with the same filter settings, this means the coefficients would be calculated twice necessarily, once for each channel. Multichannel versions are therefore included for more performance optimization.

//*************** SYNTHCORE 2.1 FOR GEN 7.3.4 ********************* //
// UTILITY FUNCTION SIGNATURES *********************************** //
out = qsin(in);    // quick transcendental calcs
out = qcos(in);
out = qtan(in);
gain= db2a(db);    // quick level conversion
db  = a2dB(gain);    
out = smoothermsecs(in);// predelay smoother, 0~0.24
out = smoother1(val){     // smoothing over ~46 clock cycles
out = smoother2(val);     // smoothing over ~400 clock cycles
out = smoother3(val);    // slowest smoothing for long delay line times
out = pan3db(x);        // pan with -3dB center
out = powerfade(in1L, i2L, in1R, in2R, x); // ganged fader with exp crossfade
out = stereomix(in1L, in2L, in1R, in2R, x);// stereo ganged mix
out = ramp(inc);        // quickest ramp generator, 0 to 1 over inc cycles
out = ramptrig(msecs, trg);// triggered 1-shot ramp, time in msecs
// OSCILLATOR FUNCTION SIGNATURES******************************** //
out = parasine(inc);    // a sine osc approximation. with much lower cpu
out = triwave(ramp, width);    // variable tri/saw with simple AA
out = karplus(impulse, P, dampen);     // Karplus oscillator
out = karplusd(impulse, P, diffuse);     // diffused Karplus
out = karplusm(impulse, fc, mod);     // mod Karplus
out = noiseosc(type, p, fc, q);        //lp/bp/hp/notch white/pink noise
out = waveset(sel, width, ramp, wavesets); // waveset oscillator, crosswave interp.
out = eptr3x(ramp, inc, width, eptr); // 3x-oversampled AA Pulse, table-based calcs
out = eptrx(ramp, inc, width, eptr);    //antialiasing slope for pulse osc
out = lfo(sel, Fc, wid, snc_en, trg);     // basic LFO
out = lfopoly(sel, Fc, sprd, sprdlvl, sprdtype, wid, sncen, trg); // LFO, voice spread
// ENVELOPES FUNCTION SIGNATURES ********************************** //
out = adsr(gate,predelay,att,dec,sus,susn,rel); basic ADSR
out = adsrloop(trg,gate,predelay,att,dec,sus,susn,rel,mode);// ADSR with loop mode
out = padsrloop(trg,gate,pre1, pre2,att,dec,sus,rel,mode); // PADSR, loop & predelay
out = adbdsrloop(trg,gate,predelay,att,dec1,brk,dec2,sus,rel,mode); // ADBDSR, loop
out = padbdsrloop)trg,gate,pre1,pre2,att,dec1,brk,dec2,sus,rel,mode); // PADBDSR. predelay & loop
// FILTER FUNCTIONS  ----------------------------------------------------
out = lo1pole1 (in, P);                // 6db lowpass filter 
out = hi1pole1(in, P);                    // 6db highpass filter 
out1, out2 = lo1pole2 (in1, in2, P);        // stereo 6db lowpass filter 
out1, out2 = hi1pole2(in1, in2, P);        // stereo 6db highpass filter 
out =  loshelf(in, P, dB);                // 12dB/oct lo shelf, +/-12dB range
out =  hishelf(in, P, dB);                // 12dB/oct hi shelf, +/-12dB range
out =  loshelf2(in, P, dB);                // 24dB/oct lo shelf, +/-12dB range
out =  hishelf2(in, P, dB);            // 24dB/oct hi shelf, +/-12dB range
out1, out2 =  hishelfStereo(in1, in2, P, dB); // stereo hishelf
out1, out2 =  loshelfStereo(in1, in2, P dB); //stereo lowshelf
out = biquad0    (in, a0, a1, a2, b1, b2);     // biquad direct form 1
out = biquad     (in, a0, a1, a2, b1, b2);    // biquad optimized form 2
out = biquadresonant(in, P, Q);            //resonant
out = biquadgainresonant(in, P, Q, gain);    //gain resonant
out = biquadlo   (in, Fc, Q);              // biquad lowpass, simple
out = biquadlp1  (in, Fc, Q);             // tuned  lowpass 
out = biquadlo2  (in, P,  Q);            // biquad lowpass, MIDI pitch Fc,
out = biquadlo3  (in, P,  Q);            // biquad lowpass, qain-limiting
out = biquadband (in, Fc, Q);            // biquad bandpass, simple
out = biquadbp1  (in, Fc, Q);             // tuned  bandpass 
out = biquadband2(in, P,  Q);            // biquad bandpass, MIDI pitch Fc,
out = biquadband3(in, P, Q);            // biquad bandpass, gain limiting
out = biquadband4(in, P,  Q);            // biquad bandpass, unity gain
out = biquadbandgain(in, Fc, Q, gain);    // biquad bandpass gain
out = biquadhi   (in, Fc, Q);            // biquad highpass, simple
out = biquadhp1  (in, Fc, Q);             // tuned  highpass 
out = biquadhi2  (in, P,  Q);            // biquad highpass, MIDI pitch Fc,
out = biquadhi3  (in, P,  Q);            // biquad highpass, gain limiting
out = biquadhigain(P, Q, gain);            // biquad gain hipass
out = biquadnotch(in, Fc, Q);            // biquad notch, somple 
out = biquadgainbandstop(in, P, Q, gain);    //gain gandstop
out = biquadbandstop(in, P, Q);            // biquad bandstop
out = biquadpeaknotch(in, Fc, Q, gain);    // biquad peak/notch 
out = biquadallpass(in, P, Q);            // biquad allpass
out = biquadgainallpass(in, P, Q, gain);    // gain allpass
val = biquadamp  (w,  a0, a1, a2, b1, b2);    // biquad gain @ specfic fc
out = filt5d(in, P, Q, type, poles, drive);    // 3x-oversampled 5d filter
out1, out2, out3 =  upsample(in);        // 3x upsampling with sinc coefficients
out = downsample(out1, out2, out3);        // 3x downsampling with sinc coefficients
out = comb(input, delay, feedback, lvl); // feedforward comb filter
// EFFECTS FUNCTION SIGNATURES ************************************* //
out1, out2 = ping0(L, R, delayL, delayR, cross, feedback); // simple stereo delay
out1, out2 = ping1(L, R, delayL, delayR, cross, feedback, 
        locut, hicut); // stereo delay, 1pole filter
out1, out2 = ping3(L, R, delayL, delayR, cross, feedback,
          loP, loG, midP, midG, midQ, hiP, hiG); //  stereo delay with 3band EQ
out1, out2 = chorus(in1, in2, del, deep, sprd, mix); // dual quad-band chorus
out = diffdelay(in, delay, diff);            //  basic diffusion delay
out = diffdelSmall(in, depth, time);     // small diffusion delay
out = diffdelBig(in, depth, time);      // large diffusion delay
out = earlydelF(in, Dffs, size, ha1, hb0, hb1, la1, lb0, lb1); // biquad diff delay
out = tankLeft(in, damp, decay);          // left late reflections
out = tankRight(in, damp, decay);      // right late reflections
out1, out2 = reverb(in1, in2, pre, cut, damp, decay, lvl);//acoustic reverb
out1, out2 = rev66(in1, in2, pre, cut, latemix, size, time, inc, 
          spin, rndm, hishelf, loshelf); // production-quality reverb
out1, out2 = limit(in1, in2, lvl, window, attlo, atthi, rello, relhi); // stereo limiter
// ***************************************************************** //


Synthcore 2 Patch and Source Code

Synthcore 2 is one of the most powerful analog emulation synthesizers ever made, based on features from the OSCAR and Waldorf Q (both of which, as you may know, were discontinued because they were too expensive to build in hardware). The monophonic version is now available for free download in Windows 32/64, Mac OS X, and open-source Cycling'74 Max 7 code.

* 3 oscillators, with feedback, FM, four kinds of sync, phase control, ring modulation, and dual output mixing; 61 morphing waveforms, including: pulse, saw, and triangle oscillators with newest EPTR anti-aliasing technology; Karplus physical modeling; multiple filtered noise options; 48 cross-sampled waveset oscillators; and sub oscillator.
* 2 comb filters, both with pitch tracking.
* 2 5-d serial/parallel, 2/4-pole, 3x-oversampled SVF filters, with continuous control of: filter type; number of filter poles; drive + saturation: cutoff; resonance; serial/parallel output; and output pan.
* 3 envelopes. Predelay and 7-stage breakpoint included. Multi, single, loop, and clock triggers.
* 3 LFOs, all with morphing waveforms, gate sync, and freq. control.
Modulation matrix with 15 nodes, each scalable from any of 60 sources to 135 destinations. Sample and hold, gated, and MIDI sources available. Many compound sources and destinations for rapid patching. Fixed- and variable-source modulations may shape and scale each other within the matrix.
* Multi-mode glide and glissando, with unique glissando pattern generator.
Stereo effects chain with 2 tempo delays, 8-band chorus, realistic reverb, and advanced limiting.
* Toggle-mode monophonic keyboard. Notes may optionally be stored in programs.
Flexible multi-channel architecture functions like a modular synth without needing rewiring. Monitor outputs at all mix points. LFOs, envelopes, and other modulation sources may modulate effects parameters.
Rob Ramirez's icon

an awesome library, thanks much for your hard work and contributions to the community!

Ernest's icon

Glad you like it. The 2.1 version is now available.

Synthcore 2.1 also includes a gen~ implementation of Reverb66, originally in the instrument 'steampipe', designed for Reaktor by Martijn Zwartjesmatz in 2001. Native Instruments was very proud of this design, and duplicated it, only replacing the filters with parametric EQ, in its pro version. Their duplication included an error which caused the frequency modulation not to work. This version fixes the problem, although it doesn't do much to improve the reverb. But as Native Instruments considers this a premiere reverb, its gen~ implementation is available in the 2.1 library.

Gennaro Schiano's icon

Hey Ernest! I’m really interested in checking out your synthcore bundle to get my head around Gen codebox programming a little more but can’t find it online. Do you have a version that I can check out? Thanks!

Ernest's icon

He Gennaro, sorry for not responding sooner. There is a scoping bug in the current gen~ implementation such that variables in called methods change the values of variables with the same name in the caller code. This means that people using a function library can get unexpected and apparently unpredictable behaviors if they use variables of the same name as in the library. Cycling74 is aware of the bug and my website is offline until they fix it. Apologies.