This is a little 'summer project' I did that turned out to be a little more
involved than I expected. I had purchased some modular hardware and thought
it might be interesting to try to build a software emulator (using
of course). This beta-version certainly has a few bugs, but the basic
idea works, and I'm able to get some interesting sounds from it. I may
add a few things now and then in the future, but for now I need to move
on to some other work.
I also took a better look at the
project. Dani Dobkin had mentioned it as a way to check out some
modules when I was buying my hardware. I didn't look very extensively
at it and didn't realize how fully-featured it was. Damon Holzborn,
after seeing an earlier (alpha) version of this virtual modular synth
I take a better look at the VCV rack.
It's a much bigger and more varied project than
my little effort, so I'm going to be exploring it for awhile. The
VCV developers have been working on this for several years. Hey,
three months for my goofy little thing isn't too bad!
If you'd like, though, download the application above and give it
a go. I've added the capability to save and restore patches, and I've
include four 'demo patches' with it:
- burbledrone.txt -- a burbling filtered drone
- cyclseqs.txt -- basic sequencer fun
- cyclseqs2.txt -- add some modulation to the sequence sounds
- modmod.txt -- go berserk with various forms of cross-modulation
- vmlooch.txt -- looch lives!
When you start these, you may hear some initial 'blurts' of sound.
That's one of those bugs I'm not gonna figure out right now. Just
condsider them part of the music. They're all in the "patches" folder
included in the download.
Here are the basic directions for using this. I've also created a
short (3 minutes)
showing how it operates.
- To create a connection, click on an "output" (SIG OUT, colored yellow-gold)
and drag the patch cord to an input (colored green) and release.
- To delete a connection, do the above in reverse (start with the
input, click and drag back to the output).
- Inputs are additive, including adding to whatever values may be
set on a module.
- Connecting the 'ping' inputs and outputs work the same way, but they are
a separate system. 'pings' are used as triggers to start, stop and
change state of various modules. NOTE: The 'ping' system needs
to be redone; results may vary!
- 'pings' can come from a different module (often the pinger module),
or can be set internally to a module by using the 'loop' button. The
looptime is settable.
- Be cognizant of the range of values expected by an input. For example,
the FREQ IN input for an oscillator expects frequency, so the the default
values (often 0.0 -- 1.0) from an output won't register much. A deviation
of an oscillator frequency by 0.5 Hz isn't all that noticeable.
- The ranges of various sliders and knobs can be set by the "lo" and "hi"
text boxes near the slider/knob.
- Be sure to hit RETURN after entering a value into a text box.
- The waveforms available on the wave slider for the oscillator
wave# 0 == sine
wave# 1 == saw
wave# 2 == square
wave# 3 == triangle
wave# 4 == pulse
- The envelope shapes available on the env module from the slider are:
shape# 0 == linear fade up/down
shape# 1 == linear ramp up
shape# 2 == linear ramp down
shape# 3 == exponential ramp up
shape# 4 == exponential ramp down
- The frequency values entered into each step of the seq module can be
absolute Hz, or they can be octave.pitchclass values (8.00 == middle
C, 8.01 == C# above middle C, 8.02 == D ... 8.12 == 9.00 == C above
middle C, etc. Values can be arbitrary, i.e. 8.02589 will be a slightly
sharp quarter tone above D).
- Typing 's' allows you to save the current patch into a text file.
- Typing 'r' allows you to load a previously saved patch.
- If the patching system gets messed up, hit the TAB key and it will reset
to the last made patch connection and recenter the interface.
- The screen can be resized, no zoom yet though. Clicking on the interface
and then dragging off-window will scroll the interface up/down/left/right.
- Double-click on the "beta0.app" icon to run the app.
You will notice a Terminal window that pops up when the app is
started. RTcmix runs in that window. If you close the app interface,
the window will persist and audio will still be happening. It's magic!
You will need to terminate the RTcmix window as well. I have a version
of the app that shuts everything down, but I kind of like running
the audio alone. The interface places a relatively substantial load
on the CPU, but the audio generally doesn't.
NOTE: If you have Catalina (OSX 10.15.x) or later,
Apple will probably complain that the app is "damaged"
(it isn't) and will try to move it to the trash (thanks, Apple!).
You might be able to CONTROL-click on the app and select "open", but
this may not be enabled for you. If you don't see that "open" option,
then double-click on the "dequarantine" command included in the folder
with the beta0-SA app (thanks Damon Holzborn!). It should then run
NOTE NOTE: I have noticed that the "dequaratine" command doesn't always
work. STUPID ANNOYING APPLE! If it doesn't, here's whatcha do:
1. start up a Terminal window (/Applications/Utilities/Terminal.app)
2. type in:
"sudo xattr -rd com.apple.quarantine "
without the quotes (and note the space at the end -- it has to be there)
3. Drag/Drop the "brads-vms-beta0/" folder into the Terminal window with
the "sudo ..." command typed in. The result should be a line in the
Terminal window that looks something like this:
sudo xattr -rd com.apple.quarantine /some/where/brads-vms-beta0
4. Hit <return>, give your password, and hopefully(!) all will be happy.
This was made using
for the audio and
for the graphics (with the
set of interface objects).