Hi RBJ,

I see I've mostly concentrated on limitations, without going into what
the software actually does.

Moselle is working software, stable enough to jam and develop with for
hours.  Only crashes I see are when I've made unusual programming
errors in a patch I'm writing.

General Overview (these are the actual current features, not the todo list)

-- write programs ("patches") in a functional language which allows
arbitrary connection of traditional modular synthesizer components
-- play an attached MIDI device and hear from computer speaker/soundcard.
-- program is an "Integrated Development Environment" (IDE) with
editor, oscilloscope, harmonic spectrum analyzer etc.
-- editor has syntax highlighting, error highlighting etc.
-- language does NOT cover composition, or routing of MIDI messages
-- instead language is focused only on the signal processing
-- think of it as a modular synthesizer that can be programmed almost like Excel
-- 150 tutorial/example patches
-- 400+ "traditional synth keyboard" patches

Module types currently include: (again, are the actual current
modules, not the todo list)

-- oscillator, supporting hard sync, FM, PM; pulse width, several
original features; works fine at LFO frequency

-- "stored waveform oscillator" with bandwidth limitation including
pulse width, super-powerful harmonic specification; works fine at LFO
frequency

-- resonant Butterworth filter (2/4/6 pole, hp/lp); works fine at
LFO/control frequency

-- envelopes: WAIDBPSR (superset of ADSR) or arbitrary-number of
time/level/wait/goto/start segments; works fine as oscillator at audio
frequency and as mini-sequencer

-- delay: multitap; modulatable time/gain; can specify taps with
mathematical expressions

-- noise (pink, white); can be used as oscillator with filter
resonance or with delay comb filtering

-- sample/hold

-- slew and portamento

-- mapper

-- tuning tables

-- additional components for global params (eg A=440), MIDI channel
and voice controllers (use anything to control anything)

-- patch control covering unison, mono, poly, etc.

-- packages: the ability to write your new modules based on other
modules.  For example, I have taken your soft limiter and made a
SoftLimiterRBJ package that, from the patch programmer's perspective,
can be used exactly as the built-in component types above.  Other
examples I have working as we speak include Reverb, ReverseReverb,
Casio CZ-inspired oscillator (based internally on 3-4 oscillators,
using FM, AM, and phase-based switching between sine and square
waves), LeslieSimulator (based on three Filters, two Delays, four
LFOs, and two Slews, resulting in simulation of rotating bass and
treble speakers with crossover, doppler, independent rotating speeds
with separately-configurable rise and fall times)



Limitations are currently severe, namely:

-- PC only (and not known to be working on anything besides Windows 7)

-- not integrated with DAW

-- performance is mega ultra slow, limiting you in some cases to 2-3
notes max, though I can increase this 10x and will be working on it
within the week I think, once I release the Packages support... once I
get the faster interpreter working, I will implement a compiler, first
to C, but in theory could output x86, GPU, DSP, whatever instruction
set would be needed for a special project.



Thanks for the offer of help but the main help I need is feedback!

Also, note that while the standalone version is cost-free and I
currently plan to always offer it as such, it is commercial software
so isn't a great framework for developmental contributions.  However
I'm open to business-level collaborations.



As a concrete example, here is a nice bass patch based on the soft
limiter equations you discussed here a few months back.  This is
actually not a great example of Moselle's power, because, while every
input of every module can be an equation of arbitrary complexity, the
only interesting math in this patch is the Input of the
SoftLimiterRBJ.

# THE PATCH: A sine wave goes through the RBJ soft limiter, giving it
higher harmonics.
# An envelope applies a spike of DC, causing the limiting to affect
the top half of the sine
# wave a lot more than the bottom half.  Asymmetric distortion like
this makes even harmonics
# stronger.  An LFO provides a light amount of DC slowly, causing a
bit of motion in the
# sound even after the envelope is done.  To eliminate keyclick, a
volume envelope with very
# short attack and release times takes the edge off.

# The RBJ soft limiter has a parameter Order that can be an odd number
from 3 to 15 and which
# controls the sharpness of the limiting.  This is controlled by velocity.

# TO PLAY: try the bass.  MIDI controller GeneralPurpose1 adjusts the
sound, with minimum
# value being not too much more than a sine, and max value going
almost square.  Velocity
# controls only the limiter's curve, but that is sufficient to give a
variety of tones.

[Osc]
Waveform    = Sine

[Env]
Attack      = 300ms
Decay       = 2
Sustain     = .05

[EnvVol]
Attack      = 2ms
Sustain     = 1
Release     = 5ms

[LFO]
Frequency   = .3
Waveform    = Triangle

[SoftLimiterRBJ]
Input       = ( Osc:Control*2/3 + Env/2 + LFO/8  ) * General1{.7,3}
Order       = Select( Velocity, 3, 5, 7, 9, 11, 13, 15 )

[Voice]
Mono        = SoftLimiterRBJ * EnvVol:Amp
Finished    = EnvVol:Finished




And here is the SoftLimiterRBJ package, which you'll see above is
treated from the patch-writer's perspective exactly as all the
built-in module types.  (Note its unusual in that its not built out of
osc, filter, and other components, instead this package is merely
math.  But I'm sure this mail is already trying many people's patience
without me posting a more complicated package like the Leslie
simulator...)

#SoftLimiterRBJ: see music-dsp mailing list 18 Oct 2013.
[Interface]
Input     = 0
Order     = 1
# just to save typing, I'm making a new variable x that is the input signal.
x         = Input
Output = IF( x < -1, -1,
                x >  1,  1,
                FromList( Order, 0,
                x,
                0,
                3/2      *(x - 1/3 * x^3
                                                ),
                0,
                15/8     *(x - 2/3 * x^3 + 1/5 * x^5
                                                ),
                0,
                35/16    *(x - 3/3 * x^3 + 3/5 * x^5 - 1/7 * x^7
                                                ),
                0,
                315/128  *(x - 4/3 * x^3 + 6/5 * x^5 - 4/7 * x^7 + 1/9
* x^9                                           ),
                0,
                3465/1280*(x - 5/3 * x^3 +10/5 * x^5 -10/7 * x^7 + 5/9
* x^9 - 1/11 * x^11                             ),
                0,
                45045/15360*(x - 6/3 * x^3 +15/5 * x^5 -20/7 * x^7
+15/9 * x^9 - 6/11 * x^11 + 1/13 * x^13             ),
                0,
                45045/14306*(x - 7/3 * x^3 +21/5 * x^5 -35/7 * x^7
+35/9 * x^9 -21/11 * x^11 + 7/13 * x^13 - 1/15 * x^15 ) ) )
--
dupswapdrop -- the music-dsp mailing list and website:
subscription info, FAQ, source code archive, list archive, book reviews, dsp 
links
http://music.columbia.edu/cmc/music-dsp
http://music.columbia.edu/mailman/listinfo/music-dsp

Reply via email to