diff --git a/README.md b/README.md index 2af902b..fb71a74 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,14 @@ Csound is a user-programmable and user-extensible sound processing language and software synthesizer. (www.csound.com) Csound is copyright (c) 1991 Barry Vercoe, John ffitch, and other contributors. -VCVRack v0.6.1, Csound v6.11 and VCV Rack modules are compiled and tested **ONLY ON LINUX MINT 18.3**. +**IMPORTANT NOTE:**\ +VCVRack v0.6.1, Csound v6.11 and VCV Rack modules are compiled and tested **ONLY ON LINUX MINT 18.3**.\ All modules are **Work in Progress**. +**For a Windows build and support, please go to the repository:\ +https://github.com/dizzisound/VCV_Csound** + + Thanks to: - Tutorial plugin - Fundamentals plugins by Andrew Belt http://www.vcvrack.com @@ -53,7 +58,7 @@ These csound scripts are often made by others and modified by me to suit my desi ![](images/Reverb.png) -Csound script: Reverb.csd (Iain McCurdy) +Csound script: Reverb.csd (Iain McCurdy)\ The reverbsc opcode is a 8 delay line Feedback Delay Network reverb, with feedback matrix based upon physical modeling scattering junction of 8 lossless waveguides of equal characteristic impedance. (Sean Costello, October 1999) @@ -61,7 +66,7 @@ The reverbsc opcode is a 8 delay line Feedback Delay Network reverb, with feedba ![](images/Vocoder.png) -Csound script: Vocoder.csd (Iain McCurdy) +Csound script: Vocoder.csd (Iain McCurdy)\ This is an implementation of a traditional analogue style vocoder. Two audio signals, referred to as a modulator and a carrier, are passed into the vocoder effect. The modulator is typically a voice and the carrier is typically a synthesizer. The modulator is analysed by being passed into a multiband filter (a bank of bandpass filters), the amplitude envelope of each band is tracked and a control function for each band generated. @@ -70,7 +75,8 @@ The carrier signal is also passed through a matching multiband filter, the set o **Carrier Source:** External signal used as carrier signal. (sawtooth, square, pulse, noise...). -Steepness: Steepness of the filters used for both analysis and carrier processing. +**Steepness:** + Steepness of the filters used for both analysis and carrier processing. **Base:** Frequency of the lowest filter (both analysis and processing) expressed as a MIDI note number. @@ -88,7 +94,7 @@ Steepness: Steepness of the filters used for both analysis and carrier processin Gain of the single highpass filter. **Gate Input:** - Activating this switch will apply a noise gate to the modulator signal. + Activating this switch will apply a noise gate to the modulator signal.\ This option might be useful if the microphone used in rather noisy, such as would be the case if using the built-in microphone on a laptop, or if working in a noisy environment. @@ -97,25 +103,25 @@ Steepness: Steepness of the filters used for both analysis and carrier processin ![](images/VCO-10.png) -Csound script: VCO10.csd (Iain McCurdy) +Csound script: VCO10.csd (Iain McCurdy)\ The vco2 opcode models a variety of waveforms based on the integration of band-limited impulses. * **MidiVCO-10 module:** ![](images/MidiVCO-10.png) -Csound script: MidiVCO10.csd (Iain McCurdy) -Same module as VCO-10, but is activated by midi notes, polyphony is only limited by hardware. +Csound script: MidiVCO10.csd (Iain McCurdy)\ +Same module as VCO-10, but is activated by midi notes,\ +Polyphony is only limited by hardware.\ Gate output is 1 if at least one note is activated, otherwise is 0. * **Flooper module:** ![](images/Flooper.png) -Csound script: Flooper.csd (Joachim Heintz) -Display code is copied from PLAYER module by Clement Foulc -Read wav, aiff, ogg and flac sound files. -**Work in progress.** +Csound script: Flooper.csd (Joachim Heintz)\ +Display code is copied from PLAYER module by Clement Foulc.\ +Module read wav, aiff, ogg and flac sound files. * **Y = F(x) module:** diff --git a/csd/CsoundQt/MidiVCO10.csd b/csd/CsoundQt/MidiVCO10.csd index 557f2f1..2a861c0 100644 --- a/csd/CsoundQt/MidiVCO10.csd +++ b/csd/CsoundQt/MidiVCO10.csd @@ -30,6 +30,16 @@ ksmps = 32 nchnls = 1 0dbfs = 1 + ;channel init + chn_k "Waveform", 1 + chn_k "Octave", 1 + chn_k "Semitone", 1 + chn_k "Harmonics", 1 + chn_k "PulseWidth", 1 + chn_k "PhaseDepth", 1 + chn_k "PhaseRate", 1 + chn_k "NoiseBW", 1 + gisine ftgen 0, 0, 4096, 10, 1 ;Sine wave @@ -37,18 +47,24 @@ itmp ftgen 1, 0, 16384, 7, 0, 2048, 1, 4096, 1, 4096, -1, 4096, -1, 2048, 0 ; u ift vco2init -1, 10000, 0, 0, 0, 1 massign 0, 2 + turnon 1 ;GUI update instr 1 ;GUI - gkWave invalue "Waveform" - kOctave invalue "Octave" + gkWave chnget "Waveform" + kOctave chnget "Octave" gkOctave = int(kOctave) - kSemitone invalue "Semitone" + kSemitone chnget "Semitone" gkSemitone = int(kSemitone) - gknyx invalue "Harmonics" - gkpw invalue "PulseWidth" - gkphsDep invalue "PhaseDepth" - gkphsRte invalue "PhaseRate" - gkbw invalue "NoiseBW" + gknyx chnget "Harmonics" + gkpw chnget "PulseWidth" + gkphsDep chnget "PhaseDepth" + gkphsRte chnget "PhaseRate" + gkbw chnget "NoiseBW" + + gkmode = gkWave * 2 + if gkphsDep > 0.01 then + gkmode = gkmode + 16 + endif endin instr 2 ;POLY MIDI INPUT INSTRUMENT @@ -60,32 +76,27 @@ instr 2 ;POLY MIDI INPUT INSTRUMENT imin = 0 imax = iSemitoneBendRange / 12 kbend pchbend imin, imax - ioct = octcps(icps) + ioct = octcps(icps) kcps = cpsoct(ioct + kbend + gkOctave + gkSemitone/12) ;======================================================================== iporttime = 0.05 kporttime linseg 0, 0.001, iporttime - kpw portk gkpw, kporttime + kpw portk gkpw, kporttime kenv linsegr 0, 0.01, 1, 0.01, 0 if gkWave==8 then ;buzz asig buzz kenv*iamp, kcps, gknyx * sr /4 / kcps, gisine elseif gkWave==9 then ;noise - asig pinkish 4*iamp + asig pinkish 4*iamp asig butbp asig, kcps, kcps * gkbw else ;vco2 - kmode = gkWave * 2 - if gkphsDep > 0.01 then - kmode = kmode + 16 - endif - kphs poscil gkphsDep*0.5, gkphsRte, gisine ;Phase mod kphs = kphs + 0.5 ;Phase depth ;*** All this to reduce click during reinit !!! kinit init 0 - kChanged changed gknyx, kmode + kChanged changed gknyx, gkmode if kChanged==1 then kinit = 1 endif @@ -107,25 +118,13 @@ instr 2 ;POLY MIDI INPUT INSTRUMENT ;*** Reinit_vco: - asig vco2 kenv*kfade*iamp, kcps, i(kmode), kpw, kphs, i(gknyx)/2 + asig vco2 kenv*kfade*iamp, kcps, i(gkmode), kpw, kphs, i(gknyx)/2 rireturn endif out asig endin - -instr 11 ;INIT - outvalue "Octave" , 0.0 - outvalue "Semitone" , 0.0 - outvalue "Harmonics" , 0.5 - outvalue "PW" , 0.5 - outvalue "PhaseDepth" , 0.2 - outvalue "PhaseRate" , 4.0 - outvalue "NoiseBW" , 1.0 -endin -i 11 0 0 ;init -i 1 0 3600 diff --git a/csd/MidiVCO10.csd b/csd/MidiVCO10.csd index c7c6851..4c0ec77 100644 --- a/csd/MidiVCO10.csd +++ b/csd/MidiVCO10.csd @@ -11,6 +11,16 @@ nchnls = 1 0dbfs = 1 + ;channel init + chn_k "Waveform", 1 + chn_k "Octave", 1 + chn_k "Semitone", 1 + chn_k "Harmonics", 1 + chn_k "PulseWidth", 1 + chn_k "PhaseDepth", 1 + chn_k "PhaseRate", 1 + chn_k "NoiseBW", 1 + gisine ftgen 0, 0, 4096, 10, 1 ;Sine wave itmp ftgen 1, 0, 16384, 7, 0, 2048, 1, 4096, 1, 4096, -1, 4096, -1, 2048, 0 ;user defined waveform: trapezoid wave @@ -32,6 +42,11 @@ instr 1 ;GUI gkphsRte chnget "PhaseRate" gkbw chnget "NoiseBW" + gkmode = gkWave * 2 + if gkphsDep > 0.01 then + gkmode = gkmode + 16 + endif + kgate active 2 chnset kgate, "Gate" endin @@ -60,17 +75,12 @@ instr 2 ;Poly Midi Instrument asig pinkish 4*iamp asig butbp asig, kcps, kcps * gkbw else ;vco2 - kmode = gkWave * 2 - if gkphsDep > 0.01 then - kmode = kmode + 16 - endif - kphs poscil gkphsDep*0.5, gkphsRte, gisine ;Phase mod kphs = kphs + 0.5 ;*** All this to reduce click during reinit !!! kinit init 0 - kChanged changed gknyx, kmode + kChanged changed gknyx, gkmode if kChanged==1 then kinit = 1 endif @@ -92,7 +102,7 @@ instr 2 ;Poly Midi Instrument ;*** Reinit_vco: - asig vco2 kenv*kfade*iamp, kcps, i(kmode), kpw, kphs, i(gknyx)/2 + asig vco2 kenv*kfade*iamp, kcps, i(gkmode), kpw, kphs, i(gknyx)/2 rireturn endif out asig diff --git a/src/Flooper.cpp b/src/Flooper.cpp index 2deeb0c..1727343 100644 --- a/src/Flooper.cpp +++ b/src/Flooper.cpp @@ -183,8 +183,7 @@ void Flooper::step() { } else { transpose = params[TRANSPOSE_PARAM].value; }; - transpose = round(transpose); - + gate = clamp(inputs[GATE_INPUT].value*0.125f, 0.0f, 1.0f); loop = params[LOOP_PARAM].value;