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