Go Back   Cockos Incorporated Forums > REAPER Forums > ReaScript, JSFX, REAPER Plug-in Extensions, Developer Forum

Reply
 
Thread Tools Display Modes
Old 09-02-2018, 08:07 PM   #81
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

In the Stash, the ReaRack3 Envelope Multi-Tool has now been modified to conform with the 'audio first' order of control input/output selections.
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 09-02-2018, 09:40 PM   #82
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,634
Default

Quote:
Originally Posted by Time Waster View Post
For pitch modulation of audio oscillators, the control signal is linear with respect to note value, not frequency.
That seems to mean that it is exponential in a physical sense, anyway, as well when it's Midi, as when it's an audio signal (CV).

That is very natural regarding pitch, even though for doing Chowning-type FM sound generation, it needs to be linear, meaning, that the oscillator is able to run backwards, if the resulting frequency (sum of all modulators ) gets negative.

Regarding filter modulation, again either of linear and exponential (=Midi note or Volt/Octave), might be desired.

Regarding amplitude modulation exponential (e.g. with respect to a Knob or foot controller) seems natural, while technically AM is multiplication (e.g. a Ring modulator) and hence needs linear behavior.

So in fact the receiver should decide which kind of modulation it wants to use.

Remember that with a linear interpretation adding means adding, while with an exponential interpretation adding means multiplying.

-Michael
mschnell is offline   Reply With Quote
Old 09-02-2018, 10:32 PM   #83
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

Quote:
Originally Posted by mschnell View Post
So in fact the receiver should decide which kind of modulation it wants to use.
-Michael
This is correct and is what happens in ReaRack. In fact the control signal is interpreted to suit each parameter as necessary.
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth

Last edited by Time Waster; 09-02-2018 at 10:48 PM.
Time Waster is offline   Reply With Quote
Old 09-03-2018, 11:12 PM   #84
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

In the Stash, the ReaRack3 Moog Filter has now been modified to conform with the 'audio first' order of control input/output selections.

For the Signal processor module, I have added "Add Input 2 to Input 1" as an operator option. There is also a new slider "Input 2 Zero Reference", which can used to set a zero point for the addition operator. The value of this slider is subtracted from the the Input 2 value, so that you can add negative values to Input 1. In this way a unipolar control signal can be made to behave as a bipolar signal, for the purpose of addition.
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 09-06-2018, 01:13 PM   #85
jcjr
Human being with feelings
 
Join Date: Dec 2015
Location: SE TN USA
Posts: 77
Default

Quote:
Originally Posted by Time Waster View Post
Hi jcjr, I think what you are describing is a new protocol for transmitting the control signal, whereas the current efforts have been to use existing protocols, firstly MIDI and now audio channels. The constraints are the number ranges provided by the particular protocol, combinations of 0 to 127 in the case of MIDI and -1 to +1 in the case of audio (of which we have agreed to use only the positive values for control signals). Of course these ranges can be re-interpreted any way you like. Inside ReaRack I convert everything to 0 to 1 regardless and I refer to all control signal values in this manner, regardless of source, except for MIDI notes, which are referred to by MIDI note number (0 to 127).

Rather than having a fixed value per octave, in ReaRack you can generally specify the modulation range over which the full range of the control signal will act, so 0 to 1 can act over, say, 12 semitones, 4 octaves or whatever you specify. I guess this is a different approach from having a fixed range.

For pitch modulation of audio oscillators, the control signal is linear with respect to note value, not frequency. You can set a fixed base note and you could then vary the pitch using the pitch modulation control. However, the Signal Processor module only provides multiplication of (two) control signals (as well as maximum and minimum functions). Interestingly, I had addition and subtraction operations in earlier versions of the signal processor, but I dropped them because I didn't think they were particularly useful. Addition can take the control signal out of range, so it is necessary to hard limit it at a value of 1, which is not really very elegant. I can add these functions back in easily enough though, if you think it would be useful.
Thanks Time Waster.

Long ago I was so interested in analog synth, 1 V/oct and such that it was hard not to think about it but this comment is just intellectual "what if" as I'm not into patch cables any more, hard or soft cables.

As mschnell mentioned, sometimes linear mod is more desirable but the nonlinear x volt / oct systems were ultimately lots simpler and less likely to drive you crazy. It was more common to see someone selling off a linear system to get a 1 V/oct system than the opposite.

Not trying to hard-sell, but you could easily squash the simple system I described to fit in a 0..1 float audio range, and vice-versa.

I mean, there's nothing "really special" about "1 unit per octave" or 1 volt per octave. A modular system could be made to work the same calibrated to pi^-1 volts / octave or any other weird constant. Just that the 1 volt per octave resonates good with the wetware running on the typical carbon-based entity operating a synthesizer.

OK, a "digital CV" range of -4 to +16 would have a natural frequency spread from 0.0625 Hz up to 65536 Hz, which is wide enough for most purposes. Such bipolar modulator signals such as LFO or Audio frequency oscillators would probably peak about +/- 1.0 in a digital system, so those would nicely fit in the -4 to +16 range as well, and properly squash down to the scaled unipolar values to pump it thru an audio pipe used as a modulator.

To make "Squashed Digital CV" when you need to pump it thru a float audio pipe: SDCV = (DCV + 4) * 0.05


If you receive Squashed Digital CV from an audio pipe and you want Digital CV: DCV = (SDCV * 20) - 4
jcjr is offline   Reply With Quote
Old 09-06-2018, 03:05 PM   #86
jcjr
Human being with feelings
 
Join Date: Dec 2015
Location: SE TN USA
Posts: 77
Default

For MIDINote to DCV and vice-versa:

Code:
//Calc some constants
MIDI_NOTE_ZERO_PITCH = 440 * (2 ^ (-69 / 12)); //about 8.1758 Hz
MIDI_NOTE_ZERO_DCV = log2(MIDI_NOTE_ZERO_PITCH); //about 3.0314
ONE_SEMITONE_DCV = 1 / 12;
ONE_CENT_DCV = 1 / 1200;

//Conversion functions
 function MIDI_Note_To_DCV(l_MIDINote)
  (
    MIDI_NOTE_ZERO_DCV + l_MIDINote * ONE_SEMITONE_DCV; 
  );
 
function DCV_To_MIDI_Note(l_DCV)
  (
    (l_DCV - MIDI_NOTE_ZERO_DCV) * 12;
  ); 
//use floor(DCV_To_MIDI_Note()) to guarantee an integer
//or add a couple of lines if you also want to pick off any cents detune that might be in there
//or maybe use round to nearest if that makes better sense in context
jcjr is offline   Reply With Quote
Old 09-06-2018, 03:22 PM   #87
jcjr
Human being with feelings
 
Join Date: Dec 2015
Location: SE TN USA
Posts: 77
Default

I earlier gave an oscillator CV example, but most of the nicer analog filters were also 1 volt / octave, even in non-modular performance synths such as Arp Odyssey or MiniMoog.

Most such modules handled offsets and mod amounts VERY SIMPLE with very simple "built-in" CV mixer circuits right in front of the 1 volt per octave control input. Though modulars would often have several spare mixer modules racked up to be used as needed.

For instance maybe a modular performance synth has filter knobs for Filter Frequency, Keyboard Tracking Amount, ADSR mod amount and LFO mod amount.

The Filter Frequency knob is an attenuator (multiply operation) connected to a steady DC offset, maybe 10 volts or whatever. So if the knob is full-left, the 10 volts is multiplied by 0 for 0 volts out. Knob full-right multiplies by 1.0 for 10 volts out.

Similarly the keyboard CV goes thru an attenuator (multiply operation), and the ADSR CV and the LFO CV goes thru attenuators.

Then the four attenuators are simple arithmetically added together (added together, not averaged together) resulting in a single CV output that is always tracked by the filter at 1 volt / octave.

Opinions can legitimately vary, but IMO that is about as SIMPLE as it can be done. Just almost-simple-stupid mixer code followed by an oscillator or filter that is always tuned to the same 1 volt per octave scale. And you can get any scaling of all the modulators you want just by messing with the mixer knobs.

There are LOTS more brain-bending complicated ways to try to get the same functionality.
jcjr is offline   Reply With Quote
Old 09-06-2018, 07:53 PM   #88
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

I think a lot of this comes down to how modular do you want a modular system to be? When I started on the ReaRack project, I was intending to model a system loosely based on analog modular hardware. This was the default staring point because I had no clue what I was doing.

The first decision I had to make was how to transmit the control signals between modules, and I chose to use MIDI. One of the reasons for choosing MIDI is that it is a widely used well understood digital system and that would enable ReaRack to be easily integrated into the workflow. The decision to use MIDI instantly moved the system away from the analog hardware paradigm, because MIDI is not just a single signal type, like a voltage, but has message types dedicated to specific tasks. I chose to use two of those, MIDI note messages and MIDI CC messages.

The result of that decision is that the oscillators, for instance, can receive MIDI note messages directly, so you don't need to have another module to convert MIDI notes to a 'voltage' signal. All that processing happens within the oscillator module. Perhaps this is not a very purist approach, but it is a lot more convenient.

The question to ask is why do we need a modular system anyway? For myself, I like to have the creative freedom to build a synth or sound design system which is not constrained by someone else's idea of how it should be set up. I want the ability to experiment and to discover new sounds by accident. I also liked the idea that the synth could be distributed over the DAW, make the DAW itself the instrument, rather than the DAW simply recording the results.

Currently as I look into using audio as another control signal carrier and after discussions in this thread, I'm thinking more about reducing the number of modules e.g. by integrating the amplifier into the oscillator and combining the functions of several modules into one. It's a balance between flexibility and ease of operation.

On the 'voltage' per octave issue, the oscillators and filters in ReaRack already respond linearly to control signals where appropriate. I can see that, programmatically, it might be interesting to have a fixed value per octave in some situations, but I'm not convinced that it is a necessity and I think the current system can already be tuned to behave in this manner if required.
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 09-06-2018, 09:42 PM   #89
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,634
Default

Additional comment:

With analogue hardware, it is necessary to use both exponential (e.g. V/octave) and linear (e.g. V/KHz) signals, due to the imposed voltage range limit and noise floor.

With software, we use floating point numbers that don't have such a limitation due to their internal representation that provides enough bits as well for their exponential "Exponent", as for their linear ("Mantissa") parts.

With Midi the resolution is limited to 128 or 16384 values, and hence note-events and CCs need to be dedicatedly defined to be coded exponentially (such as Note or frequency or attenuation), or linear (some other CCs).

-Michael
mschnell is offline   Reply With Quote
Old 09-11-2018, 08:30 PM   #90
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

In the stash:-

Envelope Multi-Tool module: Fixed a bug which caused the envelope to fail to reach the envelope's last sample value.

Signal Processor module: Fixed a number of bugs and changed the graphics to display the signal shape and type.

Next task is to add input/output curves to the signal processor.
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 09-25-2018, 08:09 PM   #91
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

In the stash, the ReaRack3 Signal Processor module has been updated. Output curves have been added, the graphics updated and many bugs fixed. I decided that output curves were enough. Input curves would be a bit redundant and would add lots of clutter.

__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth

Last edited by Time Waster; 09-25-2018 at 11:07 PM.
Time Waster is offline   Reply With Quote
Old 09-25-2018, 09:35 PM   #92
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,634
Default

Looks awesome !
-Michael
mschnell is offline   Reply With Quote
Old 09-26-2018, 04:39 AM   #93
Ivannn Bennnettt
Human being with feelings
 
Join Date: Feb 2017
Posts: 305
Default

Thank you much as always
btw why you don't add that to reapack at once (with mark beta for instance)?
Ivannn Bennnettt is offline   Reply With Quote
Old 10-29-2018, 07:30 PM   #94
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

It's been a while since I added any new modules to the audio control version of ReaRack, and I still haven't added anything new because I got sidetracked by an idea I had to enhance the Trapezoidal oscillator. The idea was to allow the sides of the waveform to be morphed into a sine wave. This does two things, firstly the oscillator can now morph between all four of the classic analog synth waveforms (square-pulse, saw, triangle and sine). Secondly, the sine (actually cosine) edges can be used to reduce aliasing, because increasing the degree of 'sineness' acts like a lowpass filter. I've configured it so that as the frequency increases the degree of sineness increases, reducing the level of the harmonics above the Nyquist frequency. Note increasing the 'sineness' decreases the amount of waveform modulation possible.

Also, a minor update to the Moog Filter module: set the default limiter setting to "off". I found that the limiter behaves erratically in some circumstances, so preferably it should only be used if really necessary.

In the stash here: https://stash.reaper.fm/v/34071/ReaR...dularSynth.zip
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 10-30-2018, 05:42 AM   #95
Ivannn Bennnettt
Human being with feelings
 
Join Date: Feb 2017
Posts: 305
Default

Thank you,
I like to shape and morph waves and modulate everything of course
Ivannn Bennnettt is offline   Reply With Quote
Old 11-11-2018, 10:03 PM   #96
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

In the stash, ReaRack3 beta,

Added a new module: Oscillator - Noise. This differs from the ReaRack2 version in that it includes a volume modulation option.

Minor bug fix for the Trapezoidal Oscillator. May not have any noticeable effect, but the code wasn't correct.

Updated the Envelope Multi-tool: Added two new trigger modes, Single Stage - sequential and Single Stage - chromatic. These allow you to step through the envelope on receipt of a MIDI note, either sequentially or, the stage triggered can be based on the chromatic note value, with the root note being set by the root note control. Also, a few more bug fixes for this module.
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 11-19-2018, 06:43 PM   #97
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

In the stash, ReaRack3 beta:

Updated the Signal Processor module, many bug fixes including note value output wasn't working and a graphics bug.
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 02-04-2019, 06:49 PM   #98
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

In the stash, updated the Trapezoidal Oscillator: fixed a bug that was causing noise on slider movement when Volume was selected as the modulation target (which it is by default).
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 03-13-2019, 08:26 AM   #99
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,634
Default

In the documentation of ReaRack I found that you can use it in a polyphonic way using the PolySplitter module.

It might be worth mentioning that using Midi MPE is another option for this. I don't see a reason why ReasRack would not perfectly work with an MPE aware keyboard such as rhe Rise 49.

-Michael
mschnell is offline   Reply With Quote
Old 09-01-2020, 04:26 AM   #100
xav
Human being with feelings
 
Join Date: Sep 2012
Posts: 40
Default

Hello Time Waster,
Thank you for your fantastic tools!
May I suggest an improvement for your sample and hold module? That would be fantastic to add note input and output. I mean that module would also be a sample midi note repeater (trigged by notes). It could also be another module. The purpose would be to trig last played note. That makes sense if it is done in a duplicate track with another sound, and if the trigger doesn't play the first sound (for example if it is out of firs sound keyboard range, or if it is played by another midi channel, maybe from a pad).
Here is an example of that repeater built with Nord G2:
https://youtu.be/bhlRsoecDpc
Maybe it's already possible with your tools or with other, but I didn't find any solution to do that.
xav is offline   Reply With Quote
Old 09-01-2020, 10:21 PM   #101
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

Hi xav, there is this MIDI note echo - https://stash.reaper.fm/v/36034/MIDI...Transpose.jsfx Does that help?
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 09-02-2020, 03:01 AM   #102
xav
Human being with feelings
 
Join Date: Sep 2012
Posts: 40
Default

Quote:
Originally Posted by Time Waster View Post
Hi xav, there is this MIDI note echo - https://stash.reaper.fm/v/36034/MIDI...Transpose.jsfx Does that help?
Thank you for the reply. That's almost that, but not exactly if I understand exactly the plugin. The idea is to trig the note echoed with a midi signal (preferably a note on), not to let it repeat in a specified delay time.
xav is offline   Reply With Quote
Old 09-02-2020, 06:37 AM   #103
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

Quote:
Originally Posted by xav View Post
That's almost that, but not exactly if I understand exactly the plugin. The idea is to trig the note echoed with a midi signal (preferably a note on), not to let it repeat in a specified delay time.
If I understand this correctly, you want to store the last received MIDI note value, and the resend it when another note is played? Would that be a designated trigger note? In other words, the FX would have a slider to select a trigger note (presumably one that you wouldn't use in the passage you were playing). It would store the last received note value and resend it whenever the trigger note was received. Is that correct?
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 09-02-2020, 08:07 AM   #104
xav
Human being with feelings
 
Join Date: Sep 2012
Posts: 40
Default

Quote:
Originally Posted by Time Waster View Post
If I understand this correctly, you want to store the last received MIDI note value, and the resend it when another note is played? Would that be a designated trigger note? In other words, the FX would have a slider to select a trigger note (presumably one that you wouldn't use in the passage you were playing). It would store the last received note value and resend it whenever the trigger note was received. Is that correct?
Yes that is exactly that! The trigger could be another midi channel or every event out of playing range.
xav is offline   Reply With Quote
Old 09-02-2020, 01:20 PM   #105
xav
Human being with feelings
 
Join Date: Sep 2012
Posts: 40
Default

Quote:
Originally Posted by Time Waster View Post
If I understand this correctly, you want to store the last received MIDI note value, and the resend it when another note is played? Would that be a designated trigger note? In other words, the FX would have a slider to select a trigger note (presumably one that you wouldn't use in the passage you were playing). It would store the last received note value and resend it whenever the trigger note was received. Is that correct?
But I think, the best way to make that function would keep all midi data from the trigger note, except note number (sampled and held from another channel)

That's the way I built my patch in Nord Modular example in my first message. Velocity is kept from trigger note. All other CC (Pedal, mod wheel, bender, after touch) are shared, because I use the same channel (it's a split), but they are assigned to other parameters in target sound.
xav is offline   Reply With Quote
Old 09-02-2020, 11:18 PM   #106
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

Quote:
Originally Posted by xav View Post
But I think, the best way to make that function would keep all midi data from the trigger note, except note number (sampled and held from another channel)

That's the way I built my patch in Nord Modular example in my first message. Velocity is kept from trigger note. All other CC (Pedal, mod wheel, bender, after touch) are shared, because I use the same channel (it's a split), but they are assigned to other parameters in target sound.
OK, I think I get this. So the input sliders would choose the sample note channel and the trigger note channel. When you play a note on the trigger note channel, it will use the note value of the last note played on the sample channel, but using all other parameters of the trigger note (velocity, note-off). Is that correct?
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 09-02-2020, 11:57 PM   #107
xav
Human being with feelings
 
Join Date: Sep 2012
Posts: 40
Default

Quote:
Originally Posted by Time Waster View Post
OK, I think I get this. So the input sliders would choose the sample note channel and the trigger note channel. When you play a note on the trigger note channel, it will use the note value of the last note played on the sample channel, but using all other parameters of the trigger note (velocity, note-off). Is that correct?
That's it! Exactly.
xav is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 09:23 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.