Old 03-26-2019, 02:34 AM   #241
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Yes, the latest version of ReaRack2 is 2.3.5. I checked the code on ReaPack for the trapezoidal oscillator and it's the same as the latest version I have locally, which I have tested and found to be working. Have you tried the example FM project, which is in the ReaRack2 zip file in the stash?
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 03-26-2019, 04:06 AM   #242
GonZ
Human being with feelings
 
Join Date: Oct 2018
Posts: 101
Default

No, I don't. Let me test a little better sometime around this weekend, and I'll say to you if I get it works. If not, I'll try to record a little video clip to show it.
GonZ is offline   Reply With Quote
Old 04-05-2019, 07:05 AM   #243
GonZ
Human being with feelings
 
Join Date: Oct 2018
Posts: 101
Default

Yes, it seems working now. I don't know why on my laptop did not work. Another question, in the last update have you change something on envelopes or in the amplifier? I'm having bad luck cause now , after press any key, the envelope does nor close at all and a low volume sound remind on the backgroud (with default envelope and amp settings). Some weeks ago this was not happening. Any idea of what's going on? Thanks again!
GonZ is offline   Reply With Quote
Old 04-05-2019, 05:01 PM   #244
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Hmm... I seem to have broken something in the Envelope Multi-tool. Leave it with me and I'll try to figure it out.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 04-06-2019, 09:42 AM   #245
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

@ GonZ, it turns out it was the amplifier module that was the problem. Now fixed, I hope. Updated in the stash and submitted to ReaPack.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 04-07-2019, 04:17 AM   #246
todd_r
Human being with feelings
 
todd_r's Avatar
 
Join Date: Nov 2006
Posts: 741
Default

Hullo, been aware of this for a while but never quite got into it yet. Are there any more presets other than those in the examples in the main download?
todd_r is offline   Reply With Quote
Old 04-07-2019, 06:09 PM   #247
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

@todd_r, unless someone else has done some, there are no other presets. ReaRack is not really a preset kind of thing There are some example projects in the ReaRack2 stash zip file.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 08-22-2019, 01:43 PM   #248
Neuro... No Neuro
Human being with feelings
 
Join Date: Jul 2019
Posts: 3
Default A nice change in ways to work with synthesis

A really nice and easy way to sculpt sound, very much like a modular studio of the 1950s. Exceptionally great sound out of Reaper as well. And insanely low draw on CPU. Amazing!

http://neurononeuro.bandcamp.com/album/outside-of

Last edited by Neuro... No Neuro; 08-22-2019 at 03:28 PM. Reason: Wanted to add audio.
Neuro... No Neuro is offline   Reply With Quote
Old 12-23-2019, 07:33 AM   #249
snowball
Human being with feelings
 
Join Date: Dec 2019
Location: Dnipro, Ukraine
Posts: 10
Default Great Stuff

Thank you Malcom for your work. I have a lot of fun with ReaRack. I use them a lot on my evening sessions. Just a Keystep and my Android Tablet in front of me. Incredible what kind of great sounds we can create with nearly no CPU usage. For sure I will spend a lot of time with my new setup. Thank you and warmest wishes for you and your loves.
snowball is offline   Reply With Quote
Old 01-13-2020, 02:36 PM   #250
grandfougue
Human being with feelings
 
grandfougue's Avatar
 
Join Date: Sep 2016
Posts: 413
Default hello question

sorry i don't know where to ask this question is there a way with rearack to play multiple notes at the same time? polyphony ?
grandfougue is offline   Reply With Quote
Old 01-13-2020, 03:54 PM   #251
grandfougue
Human being with feelings
 
grandfougue's Avatar
 
Join Date: Sep 2016
Posts: 413
Default

Quote:
Originally Posted by Time Waster View Post
ReaRack version 2 is now available, in the stash and in ReaPack.

This version is a major update of the original code, for all modules. The main change is that ReaRack now uses per sample, high resolution MIDI control change messaging for the control signals.

Other changes include:

a) Two modules have been dropped from the range of previous version, namely the Naive Oscillator and Envelope Generator Max. Two modules have been added, an Audio to MIDI converter and a 'Note Scope'.

b) There is a change to the way that CCs are selected for control signals. The aim is to reduce the number of sliders used in the UI. For modulation, there is now a maximum of three sliders (Modulation Target, Input CC and Modulation Range) regardless of the number of parameters that can be modulated.

c) The LFO now has the option of curved waveforms - the edges of the triangular waveform can be morphed into circular arcs and the square/pulse can be morphed into a sine wave. The range of the CC signal can now be adjusted and the waveform can also be inverted.

d) The Amplifier now has an improved click reduction method, which uses an averaging filter. The window size for the averaging sample length is adjustable. There is an option for manual control input so that the amplifier can be used as a volume control. Also included in the amplifier module is a simple distortion algorithm and an overdrive control. In conjunction with the manual volume control, the amplifier can be used as a basic distortion effect.

e) The Envelope Generator has modulation of envelope stages added back in (hence EG Max has been dropped from the range of modules). There is a new envelope stage added, which I have called the Plateau. It provides a short hold at the peak of the envelope. This was added to compensate for the Amplifier's click filter. It allows the amplifier to reach full volume before starting the decay. Normally you can leave this at the default setting, but the option is there to adjust the length of the hold, which if increased can provide a more 'compressed' sound (flattened peaks).

f) The poly splitter module has been improved. It now includes a 'release delay' setting to allow a note to play out after it is released (beyond the 'note off'), before freeing up the channel for a new note. The release delay can be linked to an envelope generator so that adjusting the release time on the envelope generator adjusts the release delay in the poly splitter.

g) The CC Mixer is now (hopefully) more intuitive. The available operations are now multiply, maximum and minimum. The ranges of both the inputs and the output can be independently scaled and inverted.

h) ReaRack now uses a single global memory space for all modules, so that information can be shared across module types as well as across instances of the same module.


The manual has been updated and now includes bookmarks and hyperlinks to improve navigation.

The example projects (available with the stash copy of ReaRack) have also been updated for ReaRack2.
hello i have on jsfx absent ?

grandfougue is offline   Reply With Quote
Old 01-13-2020, 04:53 PM   #252
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Thanks to Neuro... No Neuro and Snowball for your support, I had missed seeing these posts.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 01-13-2020, 05:04 PM   #253
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Hi grandfougue, it is possible to set up a synth to play polyphonically, but the concept is that you have to do this by setting up a number of monophonic synths, each on a separate track. You have to use the Poly Splitter module to send sequential notes to different MIDI channels, then use MIDI filtering on each track so that each track only receives from a single channel. There are examples of this in the example projects.

Regarding your second question, yes it looks like the CC Mixer module is missing. Either that or I've renamed it at some point and I have not updated the example project. If you can't track it down, let me know and I'll look into it.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 01-14-2020, 01:52 AM   #254
grandfougue
Human being with feelings
 
grandfougue's Avatar
 
Join Date: Sep 2016
Posts: 413
Default

Regarding your second question, yes it looks like the CC Mixer module is missing. Either that or I've renamed it at some point and I have not updated the example project. If you can't track it down, let me know and I'll look into it.[/QUOTE]

Thank you for your reply. I can't find this plug in can you help me?

Thank for this cool works
grandfougue is offline   Reply With Quote
Old 01-14-2020, 03:45 PM   #255
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Quote:
Originally Posted by grandfougue View Post
Thank you for your reply. I can't find this plug in can you help me?

Thank for this cool works
It looks like I did update and rename this module, but I didn't update the project file. It was changed from CC Mixer to MIDI Mixer. You could just replace the CC Mixer instance with the MIDI Mixer, but it probably won't work as intended without configuring the MIDI Mixer. Alternatively you can copy and paste the code below into a text file and save the file with the name "TimeWaster_ReaRack2 CCmixer.jsfx"

Code:
version: 2.0.1
desc:ReaRack2 - CC Mixer
noindex:   true
author:    Malcolm Smith
           Copyright(C) 2017 and later, Malcolm Smith (username 'Time Waster' on REAPER forums).
           License: LGPL - http://www.gnu.org/licenses/lgpl.html

changelog: Version 2.0.1 (10/02/2018) Fixed a bug which caused messages to be sent out on the wrong channel.
                                      Some output CC values were > 127, fixed.
           Version 2.0.0 (10/12/2017) Initial version 2 release.
         
slider1:sccin1=0<0,64,1{Off,0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv}>CC Input 1
slider2:sccin2=0<0,64,1{Off,0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv}>CC Input 2
slider3:sccout=21<0,63,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv}>CC Output
slider4:schanout=1<0,16,1{All,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>MIDI Output Channel
slider5:sop=0<0,2,1{Multiply,Maximum,Minimum}>Operation
slider7:i1lev1=1<0,1>Input 1 Limit 1
slider8:i1lev2=0<0,1>Input 1 Limit 2
slider10:i2lev1=1<0,1>Input 2 Limit 1
slider11:i2lev2=0<0,1>Input 2 Limit 2
slider13:lev1=1<0,1>Output Limit 1
slider14:lev2=0<0,1>Output Limit 2
slider16:sclass=0<0,3,1{None,Master,Slave}>Class
slider17:sgroup=0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Class Group

options:gmem=ReaRack

in_pin:none
out_pin:none

@init
fxn = 200;

@slider

slidermove = 1;

@block

sclass == 2 ? slidermove  = gmem[group+fxn+13];

slidermove == 1 ?
(
ccIn1msb = sccin1 <= 32 ? sccin1-1:sccin1+31;
ccIn1lsb = ccIn1msb + 32;
ccIn2msb = sccin2 <= 32 ? sccin2-1:sccin2+31;
ccIn2lsb = ccIn2msb + 32;
ccoutmsb = sccout <= 31 ? sccout:sccout+32;
ccoutlsb = ccoutmsb+32;
chanout = schanout-1;

//Store slider values
group = sgroup*1000;
sclass == 1 ? (
  gmem[group+fxn+0] = sop;
  gmem[group+fxn+3] = i1lev1;
  gmem[group+fxn+4] = i1lev2;
  gmem[group+fxn+5] = i2lev1;
  gmem[group+fxn+6] = i2lev2;
  gmem[group+fxn+7] = lev1;
  gmem[group+fxn+8] = lev2;
  gmem[group+fxn+9] = sccin1;
  gmem[group+fxn+10] = sccin2;
  gmem[group+fxn+11] = sccout;
  gmem[group+fxn+12] = schanout;
  gmem[group+fxn+13] = slidermove;
);

//Retrieve slider values (slave mode)
sclass == 2 ? ( 
  sop     = gmem[group+fxn+0];
  i1lev1  = gmem[group+fxn+3];
  i1lev2  = gmem[group+fxn+4];
  i2lev1  = gmem[group+fxn+5];
  i2lev2  = gmem[group+fxn+6];
  lev1    = gmem[group+fxn+7];
  lev2    = gmem[group+fxn+8];
  sccin1  = gmem[group+fxn+9];
  sccin2  = gmem[group+fxn+10];
  sccout  = gmem[group+fxn+11];
  schanout= gmem[group+fxn+12];
);

op = sop;
ccIn1msb == -1 || ccIn2msb == -1 ?
(
sop = 1;
inputs = 1;
);
ccIn1msb == -1 && ccIn2msb == -1 ? inputs = 0;
ccIn1msb > -1 && ccIn2msb > -1 ? inputs = 2;

slidermove = 0;
); // end if slidermove

// Reset buffers
memset(0,-1,samplesblock+samplesblock);

while (midirecv(offsetin, msg1, msg2, msg3))
(
  // Extract message type
  modstatus = msg1;
  status = msg1 & $xF0;
  //Is it not a controller event? If so pass through, otherwise it is acontroller event.
  status != $xB0 ? midisend(offsetin, msg1, msg2, msg3):
  
  //It is acontroller event. Is it not either input CC? If so, pass through.
  (
  msg2 != ccIn1msb && msg2 != ccIn1lsb && msg2 != ccIn2msb && msg2 != ccIn2lsb ? midisend(offset, msg1, msg2, msg3)://Pass thru
    (
    // Is it the right CC for input 1?
    msg2 == ccIn1msb || msg2 == ccIn1lsb ?
      (
      msg2 == ccIn1msb ? val1msb = msg3;
      msg2 == ccIn1lsb ? val1lsb = msg3;
      offsetin[0] = (val1msb/127.9921875)+(val1lsb/16384);
      ccIn1msb != ccoutmsb ? midisend(offsetin, msg1, msg2, msg3);           
      );           
    // Is it the right CC for input 2?
    msg2 == ccIn2msb || msg2 == ccIn2lsb ?
      (
      msg2 == ccIn2msb ? val2msb = msg3;
      msg2 == ccIn2lsb ? val2lsb = msg3; 
      offsetin[samplesblock] = (val2msb/127.9921875)+(val2lsb/16384);
      ccIn2msb != ccoutmsb ? midisend(offsetin, msg1, msg2, msg3);
      );            
    );
  );
);

// Set counters for output loop
offsetout = 0;

// Start output loop
while (offsetout < samplesblock)
 (
 // Scale Inputs
 offsetout[0] >= 0 ?
   (
   val1 = offsetout[0];
   val1 *= (i1lev1-i1lev2);
   val1 += i1lev2;
   );
 ccIn1msb == -1 ? val1 = 0;
 
 offsetout[samplesblock] >= 0 ?
   (
   val2 = offsetout[samplesblock];
   val2 *= (i2lev1-i2lev2);
   val2 += i2lev2;
   );
 ccIn2msb == -1 ? val2 = 0;
 
 // Perform operations
  op == 0 ?
    (
    // Multiply values together
    val3 = val1*val2;
    );
  op == 1 ?    
    (
    // Maximum values
    val3 = max(val1,val2);
    );
  op == 2 ?
    (
    // Minimum values
    val3 = min(val1,val2);  
    );

 //Scale output
  val3 *= (lev1-lev2);
  val3 += lev2; 
  val3 *= 127.9921875; 
  val3msb = floor(val3);
  val3lsb = floor((val3-val3msb)*128);

  //Send new CC message
chanout == -1 ?
  (
   n = 0;
   loop(16,
     preval3msb != val3msb ? midisend(offsetout,$xB0+n,ccoutmsb,val3msb); // Only send messages if values have changed
     preval3lsb != val3lsb ? midisend(offsetout,$xB0+n,ccoutlsb,val3lsb);
     n += 1;
     );
  ):
  (
   preval3msb != val3msb ? midisend(offsetout,modstatus,ccoutmsb,val3msb);
   preval3lsb != val3lsb ? midisend(offsetout,modstatus,ccoutlsb,val3lsb);
  );
  // Store previous values   
  preval3msb = val3msb;
  preval3lsb = val3lsb;  
  offsetout += 1;
);// End output loop.

@gfx 400 180
gval1 = val1;
gval2 = val2;
gval3 = val3;

yrng = 100;
gfx_r = 0;
gfx_g = 1;
gfx_b = 0;
gfx_a = 1;
// Input 1 meter
gfx_x=50;
gfx_y=25+yrng;
gfx_lineto(50,(25+yrng)-(gval1*yrng));
gfx_lineto(60,(25+yrng)-(gval1*yrng));
gfx_lineto(60,(25+yrng));

// Input 2 meter
gfx_x=150;
gfx_y=25+yrng;
gfx_lineto(150,(25+yrng)-(gval2*yrng));
gfx_lineto(160,(25+yrng)-(gval2*yrng));
gfx_lineto(160,(25+yrng));

// Output meter
gfx_x=250;
gfx_y=25+yrng;
gfx_lineto(250,(25+yrng)-((gval3/128)*yrng));
gfx_lineto(260,(25+yrng)-((gval3/128)*yrng));
gfx_lineto(260,(25+yrng));

// Level lines
gfx_r = 1;
gfx_g = 0;
gfx_a = 0.5;
gfx_x = 25;
gfx_y = 25;
gfx_lineto(25+(260),25);
gfx_x = 25;
gfx_y = 25+yrng;
gfx_lineto(25+(260),25+yrng);
gfx_a = 1;
// Input1
gfx_x=30;
gfx_y=25+yrng-(i1lev1*yrng);
gfx_lineto(60,25+yrng-(i1lev1*yrng));
gfx_x=50;
gfx_y=25+yrng-(i1lev2*yrng);
gfx_lineto(80,25+yrng-(i1lev2*yrng));
// Input2
gfx_x=130;
gfx_y=25+ymax-(i2lev1*ymax);
gfx_lineto(160,25+ymax-(i2lev1*ymax));
gfx_x=150;
gfx_y=25+yrng-(i2lev2*yrng);
gfx_lineto(180,25+yrng-(i2lev2*yrng));
// Output
gfx_x=230;
gfx_y=25+yrng-(lev1*yrng);
gfx_lineto(260,25+yrng-(lev1*yrng));
gfx_x=250;
gfx_y=25+yrng-(lev2*yrng);
gfx_lineto(280,25+yrng-(lev2*yrng));

// Text
// Frame
gfx_a = 1;
gfx_x = 13;
gfx_y = 20;
gfx_drawstr("1");
gfx_x = 13;
gfx_y = 20+yrng;
gfx_drawstr("0");
gfx_r = 1;
gfx_g = 1;
gfx_b = 1;
gfx_a = 0.7;
gfx_x = 35;
gfx_y = 30+yrng;
gfx_drawstr("Input 1      Input 2     Output");
gfx_r = 1;
gfx_g = 0;
gfx_b = 0;
gfx_a = 1;
// Input 1
gfx_x=30;
gfx_y=15+yrng-((i1lev1*yrng));
gfx_drawstr("L1");
gfx_x=65;
gfx_y=15+yrng-((i1lev2*yrng));
gfx_drawstr("L2");
// Input 2
gfx_x=130;
gfx_y=15+yrng-((i2lev1*yrng));
gfx_drawstr("L1");
gfx_x=165;
gfx_y=15+yrng-((i2lev2*yrng));
gfx_drawstr("L2");
// Output
gfx_x=230;
gfx_y=15+yrng-((lev1*yrng));
gfx_drawstr("L1");
gfx_x=265;
gfx_y=15+yrng-((lev2*yrng));
gfx_drawstr("L2");

inputs == 0 ?
(
gfx_r = 1;
gfx_g = 1;
gfx_b = 1;
gfx_a = 0.5;
gfx_x=35;
gfx_y=45+yrng;
gfx_drawstr("No inputs, no output");
);

inputs == 1 ?
(
gfx_r = 1;
gfx_g = 1;
gfx_b = 1;
gfx_a = 0.5;
gfx_x=35;
gfx_y=45+yrng;
gfx_drawstr("One input, only the Maximum ");
gfx_x=35;
gfx_y=60+yrng;
gfx_drawstr("operation is available.");
);
When I get some time I will update the project file.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 01-15-2020, 03:19 PM   #256
grandfougue
Human being with feelings
 
grandfougue's Avatar
 
Join Date: Sep 2016
Posts: 413
Default

thank for your hel it work
grandfougue is offline   Reply With Quote
Old 03-08-2020, 08:00 AM   #257
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 3,093
Default

Tested ReaRack2 - Audio to Midi, using Audio as input, CC Output e.g. 95, but the midi monitor in ReaControlMIDI (log window) shows something else, CC127 for the audio to envelope generated signal. So output seems to be shifted by 32, is this on purpose?
TonE is offline   Reply With Quote
Old 03-08-2020, 03:56 PM   #258
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Yes. ReaRack uses 14 bit CC for control signals, which is achieved by using paired CCs. The CC you choose, which is the most significant byte CC (MSB) is paired with the CC 32 above, the least significant byte (LSB). Hence CC 95 is paired with CC 127. For every CC 95 message sent, you can see up to 127 CC 127 messages, depending on the rate of change of the signal.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 03-08-2020, 11:35 PM   #259
TonE
Human being with feelings
 
Join Date: Feb 2009
Location: Reaper HAS send control via midi !!!
Posts: 3,093
Default

So there is no option for 7bit CC.
TonE is offline   Reply With Quote
Old 03-09-2020, 02:41 AM   #260
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

If your receiver only accepts 7 bit, it will ignore the lsb component. The only issue then is the wasted data traffic. The ReaRack3 Envelope Multitool has a method for thinning the lsb data and the intention is to include that in other modules eventually.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 04-15-2020, 10:43 AM   #261
Hermenator
Human being with feelings
 
Join Date: Apr 2020
Posts: 2
Default

Hello Time Waster,
First of all, let me tell you that I think it's great what you're doing here! I like the minimalistic approach you're taking, with small but informative graphics. I've been playing around with VCV-Rack, too, but the fact that this runs straight in Reaper is awesome! And, more often than not, the graphics of VCV-Rack are often distracting, not to mention the spaghetti of cables, which clutter the screen pretty quickly.

I came across this thread because I wanted to do something similar as you did in Version 1. But I could never have taken it to where you have right now, so thank you for that! Skimming through this thread I came across much debate on the resolution of the control signals (in both time and precision) and I must say I liked your initial approach of using MIDI for Control in @block, and only audio in @sample. I'm on an pretty old mac and some modules need almost a full core!

That made me look into the code a little more careful and I realised some optimizations could be made. I've had a go on the 'Oscillator-Additive' module and was able to reduce the cpu-usage by a factor of 4x - 6x, using the Chebyshev-method:
Sawtooth: 7.5% -> 1.8%
Triangle: 20% -> 3.2%
Pulse : 14% -> 2.7%
(Reaper FX window measurements)

If you're interested, please find the file attached. If you want to know the details, you can find more info here:
https://en.wikipedia.org/wiki/List_o...ebyshev_method

So far I've only changed the oscillator-sections where the harmonics are summed, because I am not exactly sure what you are doing in the 'sweepmode' section. You seem to be taking yet another harmonics and add this with a special coefficient to the sample. Wouldn't it be better to just reinforce the last (one or two) harmonics? Now you risk that these resonance frequencies exceed the Nyquist frequency.

Some minor issues I noticed, let me know if you appreciate this
- Since 'Triangle' only uses every second harmonic, shouldn't it stop at 'cutoff/2', to be more in the same frequency range as the others?
- Your 'pulse' wave always oscillates between +0.5 and -0.5. If the pulse width is not equal to 0.5, this results in a DC-component in the signal. For a control signal this might just be what you want, but for audio it is undesirable. I have changed the last line so that the DC-component is always zero.

Finally, could you elaborate a bit on your views regarding per-sample control vs per-block control, ie. what is your line of thought for Version 3?

OK, Thanks again and keep up the good work,
Regards,

Hermenator

PS: What is the best way to exchange files? For now, I have converted it to a .txt file and attached that.
Attached Files
File Type: txt TimeWaster_ReaRack2 Oscillator-Additive Mod.txt (17.2 KB, 83 views)
Hermenator is offline   Reply With Quote
Old 04-16-2020, 06:47 AM   #262
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Hi Hermenator, thanks for your feedback. I'm not a mathematician, or a programmer for that matter, so any help is greatly appreciated.

The Chebyshev method you have used is a big improvement in efficiency, it almost makes this a viable oscillator for general use. If I may, I'll add this as a new version of the oscillator and add you in the credits.

Regarding the sweepmode section, IIRC what I'm attempting to do is to provide a method for cross fading the two highest harmonics, to provide a smooth frequency sweep if modulating the cutoff frequency. In addition, these harmonics can be boosted to provide a resonance effect. So, if I've coded it correctly, the loop section should only cover up to two harmonics below the cutoff frequency, with the last two harmonics calculated separately. The method I've used may not be the most efficient.

Regarding the triangular wave, good point. I'll need to look through the code a bit more to work out what I've done.

When I looked at the pulse wave DC offset, my code seemed to have zero offset, whereas yours didn't?? I replaced your last line with
Code:
    sample += (pw-$pi)/2;
and that fixed it.

I don't know how familiar you are with JSFX? Generally all MIDI is processed @block, regardless of whether it is sample accurate or not. There is no reason not to have sample accurate MIDI timing. The issue is more around the resolution used, in particular, for CC messages. Bearing in mind that I knew approximately nothing about MIDI when I began this project, ReaRack version 1 used a single CC message for modulation signals, which provides 7 bit resolution. 7 bit is pretty coarse and can be noticeably steppy. I was eventually convinced to implement 14 bit resolution using MSB/LSB paired CCs. This is certainly a lot smoother. The disadvantage is the amount of MIDI traffic, which can potentially spam your system.

Recently I tried a method for thinning out the MIDI data. The resolution can be reduced quite a lot without noticeable effect, so the idea would be to add a slider to allow the output resolution to be adjusted to suit. However, it adds yet another slider, and I'm not relishing the thought of going back through all of my modules to add it.

I haven't done any work on ReaRack3 recently. I've been trying to get a bit of actual music done I'm in a few minds about were to go with version 3. I've implemented using audio as a control signal and I'm also thinking about experimenting with using global memory as a third method, as there may be some advantages with simplifying setup. I've gotten a bit bogged down with developing the UI. It's a lot more work to code the graphics than the sound processing bits, but there are big advantages for simplifying the UI.

I have an idea for the ReaRack3 oscillator module, whereby it would become a multi oscillator module (up to 24). The oscillators will be able to be split into groups, making it polyphonic to varying degrees. This would necessitate having envelope generators built into the module, but I would retain the option of being able to use it as a stand alone oscillator. Overall, ReaRack3 is going in the direction of having fewer modules, but with more flexibility in each module. Is that less modular? I'm not sure.

Exchanging text files is fine, or upload to the stash if it's for general use, or there is ReaPack.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 04-17-2020, 02:37 PM   #263
Hermenator
Human being with feelings
 
Join Date: Apr 2020
Posts: 2
Default

Hi Time Waster,

Making Music, ah, that's what its all for, isn't it!?

Sure you can use the code, glad to be of help! In the attached file I've changed the bit for resonance/sweep too. It produces the same harmonics as your original. If you decide you do need lower harmonics, there are some comments in the code about what to remove.

As for the DC offset of the Pulse wave: I think it depends on what you consider 'zero DC content'. I meant it as in 'The sum/average of the signal over time to be zero', wheras you seem to mean 'The sum/average of the min and max signal to be zero'. A quick search on the web revealed only one source shedding some light on the issue: A book called "Designing Software Synthesizer Plugins in C++" by Will C. Pirkle. Link to Google Books: (see p207-p208)
https://books.google.nl/books?id=oaY...0offset&f=true

However, following my interpretation, the disadvantage of 'zero dc-offset' is that the min/max signal will clip sooner, which is also not good in a digital environment. And, since the trapezium wave follows the same logic, let's just leave it as you suggested. One can always use the 'dc remover plugin' in Reaper.

I agree with you that the standard JSFX UI is very, very limited. If only we had checkboxes, buttons, knobs and vertical sliders, one could be much more screen-space efficient. To make buttons, I often use the triggers, but they don't have a label, so no one else knows what they do if they don't read the manual
Tip: Instead of making yet another slider, a suggestion would be to make a variable 'FULL_RESOLUTION' in the file, which the user could set to 1 or 0 (and is by default what you intend it to be). (They WOULD have to read the manual, of course

Another thing, if you don't need the resolution but you don't want the steppiness, you can have an integer slider, but smooth its value in @sample, like
Code:
 val += 0.01*(slider1-val);
or linearly, like I have seen in your code. Bottom line, you don't need 44100 control values per sec to have sample smooth control, in my opinion. But I must admit I'm only just starting with synth programming, and I bet other people have other wishes. I'm going to do a lot of reading in over the next few days, and let my thoughts dwell on the issues you mention. An interesting source I've found so far is VCV Rack: https://vcvrack.com/

Even if you don't download the software (free), its manual is a good read. The software itself may give you some ideas about the desired level of modularity. My ideal synth would be the freedom of VCV Rack without the spaghetti of the patch-cables. In Reaper, these cables are hidden as audio or MIDI signals, just waiting to be used for whatever we wish them to be.

Rounding up now. Have fun making music!
Regards,

Hermenator

PS: The note scope you made is pretty awesome! I use it all the time to compare my mod against you original. One little thingy: It displays the wave upside down compared to the scope in the oscillator (you can notice with a Pulse wave with pw>0.5)
Attached Files
File Type: txt TimeWaster_ReaRack2 Oscillator-Additive Mod.txt (17.8 KB, 78 views)
Hermenator is offline   Reply With Quote
Old 04-18-2020, 07:33 AM   #264
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Quote:
Originally Posted by Hermenator View Post
... As for the DC offset of the Pulse wave: I think it depends on what you consider 'zero DC content'. I meant it as in 'The sum/average of the signal over time to be zero', wheras you seem to mean 'The sum/average of the min and max signal to be zero'...
OK, I see where you are coming from. Yes the point was to keep the signal within the clipping bounds. I'm not at all clear why it would be important to maintain zero offset the way you have defined it? More research needed. I did a quick experiment whereby I shifted the signal to correct for the average offset, but also scaled it to maintain roughly the same maximum amplitude. This resulted in what I perceived to be a volume change when varying the pulse width, not surprising given that the scaling effects the energy level of the signal and not, I think, a desirable or pleasing audio effect.

I note your comment regarding the note scope. That should be an easy fix. I will also take your other comments on board.

I always though of ReaRack as a proof of concept. I never really meant to take it as far as I did, I just got a bit carried away. I always hoped to inspire others to take it up and make it more of a collective effort. Feel free to mod any or all of it.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 09-30-2021, 04:42 AM   #265
Stoker
Human being with feelings
 
Join Date: Apr 2020
Location: UK, South coast
Posts: 76
Default

Quote:
Originally Posted by Time Waster View Post
It looks like I did update and rename this module, but I didn't update the project file. It was changed from CC Mixer to MIDI Mixer. You could just replace the CC Mixer instance with the MIDI Mixer, but it probably won't work as intended without configuring the MIDI Mixer.

...

When I get some time I will update the project file.
I've updated the 2 example projects that used CC Mixer to use MIDI Mixer instead. Uploaded to the stash: https://stash.reaper.fm/42934/Example%20Projects.zip

--Ian
Stoker is offline   Reply With Quote
Old 09-30-2021, 11:10 AM   #266
Vagelis
Human being with feelings
 
Vagelis's Avatar
 
Join Date: Oct 2017
Location: Larisa, Greece
Posts: 1,470
Default

Hi i like a lot the modulators here

I 'm enjoying the random step since reaper's parameter modulation lfo doesn't include a stepped random shape. However i've noticed that i can't limit the max and min values when the shape is random step which is a bummer. With other shapes there's no problem.
Any chance for a fix? Thanks in advance
Vagelis is offline   Reply With Quote
Old 10-12-2021, 06:00 PM   #267
Dopameme
Human being with feelings
 
Join Date: Mar 2018
Posts: 5
Default

I just came here to report the same thing as Vagelis!
Dopameme is offline   Reply With Quote
Old 10-12-2021, 10:15 PM   #268
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Thanks for reporting this issue, I'll look into it. In the meantime, you can run it through the MIDI Mixer (ReaRack2) or the Signal Processor (ReaRack3) to scale the output.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 10-13-2021, 05:25 AM   #269
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

The random step output scaling issue is now fixed for both ReaRack2 and ReaRack3 LFO's.

I also finally got around to updating the additive oscillator module following Hermenator's suggestions, see posts above for details.

The updates are in the stash and I also submitted the changes to ReaPack.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old 10-13-2021, 05:33 AM   #270
Dopameme
Human being with feelings
 
Join Date: Mar 2018
Posts: 5
Default

Awesome, thanks
Dopameme is offline   Reply With Quote
Old 10-13-2021, 05:46 AM   #271
Vagelis
Human being with feelings
 
Vagelis's Avatar
 
Join Date: Oct 2017
Location: Larisa, Greece
Posts: 1,470
Default

Thanks, just tried and works nicely!
Vagelis is offline   Reply With Quote
Old 10-13-2021, 06:09 PM   #272
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,212
Default

Quote:
Originally Posted by Stoker View Post
I've updated the 2 example projects that used CC Mixer to use MIDI Mixer instead. Uploaded to the stash: https://stash.reaper.fm/42934/Example%20Projects.zip

--Ian
Hi Ian, I missed your message earlier. Thanks for fixing the projects, I have now replaced the out of date copies in the Rearack2 zip file.

Mal.
__________________
ReaRack2 JSFX Modular Synth - Mostly harmless: https://stash.reaper.fm/v/28403/ReaR...dularSynth.zip
The Wasters of Time: https://soundcloud.com/thewastersoftime
Time Waster is offline   Reply With Quote
Old Yesterday, 03:13 AM   #273
Stoker
Human being with feelings
 
Join Date: Apr 2020
Location: UK, South coast
Posts: 76
Default

Quote:
Originally Posted by Time Waster View Post
Hi Ian, I missed your message earlier. Thanks for fixing the projects, I have now replaced the out of date copies in the Rearack2 zip file.

Mal.
Excellent! I'll delete them from the stash to avoid possible future confusion.
--Ian
Stoker 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 02:48 PM.


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