mioSynth

April 26, 2020 · View on GitHub

Welcome to mioSynth a simple way to build an orchestra for cSound and play your favorite melody. Run it in Cabbage, standalone, or as VST plugin within your own DAW. Listen to the demo.

Programming '70 synths

It took me a great deal of time to learn about analog synth programming, if you are like me and you know little on how to make your own patches check out videos from New York School of Synthesis and the accompanying book, also the video Secrets of Analog an Digital Synthesis and the accompanying book, and finally Roland's synthesizer books. (Here i won't be quoting the main literature on the subject but i highly recommend it if you wish to take the next level)

Front panel

At a first glance you see immediately the classic analog setting, check the schema for more details.

Run in your DAW

Say you like Ableton Live, here a screenshot with mioSynth playing out of the box. You can export it as VST instrument or as standalone application.

Logic schema

Here every sub-panel is connected according to this diagram.

Midi

Connect your midi keyboard and control in realtime mioSynth, use your DAW's midi learn feature. If you need more control or your DAW doesn't work as you expect, use the midi button on the panel and customize the .csd source code file; starting from line 103 near iMid.

Mono

Selecting the mode you choose between monophonic or polyphonic. If you playback with mioSynth_player, it will run always polyphonic.

Show

Let you copy the string to add in your score and play the selected patch, check the console log for a line starting with f1 0 33 -2 or i1 0 1. Open mioSynth_player and paste the code in the score section, add notes as usual. Remember to use p6 to specify the ftable (actually it's your patch) you just added.

You may have as many patch as you like, just give the proper ftable number. That would be:

<CsScore>
;brass ensamble
f01 0 33 -2 0.225 0.388 0.694 0.347 0.500 0.200 0.500 0.300 0 19 -1 1 3388.290 0.6040.246 0.510 0.694 0.327 1.000 0.500 2 0.140 0.000 0.452 1.000 1 2 0 1 1 0 2.000 2.000

;p1 p2  p3 p4    p5 p6
i1  0   1  8.00  .9 1
i1  +   .  8.08  .9 1
e
</CsScore>

mioSynth_player

There is more in the player, an arpeggiator and a chords player! Yes, you can play your synth patches right away and create your own set of chords and scales. By the way if you feel to experiment, say you want to go beyond tonality, just fill the tables with frequencies thus they will be added to p4.

So how to use the arpeggiator or the chord player?

Say you want to play the I-VI-II-V progression on the guitar playing strings in different directions, just set repetition as negative and it will read table p7 right to left. Listen to the arpeggio.

p1p2p3p4p5p6p7p8p9p10 (add any override)
;intr;str;dur;pitch;amp;wav;arp;rep;pos;pan
i2026.00.5311-1022.9
i2+.5.09..12812.
i2+.6.02...-1022.85
i2+.6.07..13812.
i2025.00.5311512.1
i2+.4.09..12-422.
i2+.5.02...512.15
i2+.5.07..13-422.
  • p1 i2=arpeggiator, i3=chord player
  • p4 may be pitch-class (middle C=8.00, C#=8.01, D=8.02..) or frequency
  • p6 ftable containing synth patch or wave form
  • p7 ftable of chord/arpeggio
  • p8 repetition (how many notes in p3 time), loops if end of p7 is reached, + goes -->, - goes <--
  • p9 position of ftable p7
  • p10 and so on for override (check source code for pan)

In the source code you find an example with more instruments, listen to the demo.

Avaliable chords

chord namenotesrangemiddleitemstable
maj71 3 5 7-3,+31225f11 0 25 -2 -3 -2.04 -2.07 -2.11 -2 -1.04 -1.07 -1.11 -1 -0.04 -0.07 -0.01 0 0.04 0.07 0.11 1 1.04 1.07 1.11 2 2.04 2.07 2.11 3
min71 3b 5 7b-3,+31225f12 0 25 -2 -3 -2.03 -2.07 -2.10 -2 -1.03 -1.07 -1.10 -1 -0.03 -0.07 -0.01 0 0.03 0.07 0.10 1 1.03 1.07 1.10 2 2.03 2.07 2.10 3
dom71 3 5 7b-3,+31225f13 0 25 -2 -3 -2.04 -2.07 -2.10 -2 -1.04 -1.07 -1.10 -1 -0.04 -0.07 -0.01 0 0.04 0.07 0.10 1 1.04 1.07 1.10 2 2.04 2.07 2.10 3
min75b1 3b 5b 7b-3,+31225f14 0 25 -2 -3 -2.03 -2.06 -2.10 -2 -1.03 -1.06 -1.10 -1 -0.03 -0.06 -0.01 0 0.03 0.06 0.10 1 1.03 1.06 1.10 2 2.03 2.06 2.10 3
dim71 3b 5b 7bb-3,+31225f15 0 25 -2 -3 -2.03 -2.06 -2.09 -2 -1.03 -1.06 -1.09 -1 -0.03 -0.06 -0.01 0 0.03 0.06 0.09 1 1.03 1.06 1.09 2 2.03 2.06 2.09 3
maj61 3 5 6-3,+31225f16 0 25 -2 -3 -2.04 -2.07 -2.09 -2 -1.04 -1.07 -1.09 -1 -0.04 -0.07 -0.01 0 0.04 0.07 0.09 1 1.04 1.07 1.09 2 2.04 2.07 2.09 3
min61 3b 5 6-3,+31225f17 0 25 -2 -3 -2.03 -2.07 -2.09 -2 -1.03 -1.07 -1.09 -1 -0.03 -0.07 -0.01 0 0.03 0.07 0.09 1 1.03 1.07 1.09 2 2.03 2.07 2.09 3
maj91 3 5 7 9-3,+31531f18 0 31 -2 -3 -2.02 -2.04 -2.07 -2.11 -2 -1.02 -1.04 -1.07 -1.11 -1 -0.02 -0.04 -0.07 -0.01 0 0.02 0.04 0.07 0.11 1 1.02 1.04 1.07 1.11 2 2.02 2.04 2.07 2.11 3
91 3 5 7b 9-3,+31531f19 0 31 -2 -3 -2.02 -2.04 -2.07 -2.10 -2 -1.02 -1.04 -1.07 -1.10 -1 -0.02 -0.04 -0.07 -0.02 0 0.02 0.04 0.07 0.10 1 1.02 1.04 1.07 1.10 2 2.02 2.04 2.07 2.10 3
min91 3b 5 7b 9-3,+31531f20 0 31 -2 -3 -2.02 -2.03 -2.07 -2.10 -2 -1.02 -1.03 -1.07 -1.10 -1 -0.02 -0.03 -0.07 -0.02 0 0.02 0.03 0.07 0.10 1 1.02 1.03 1.07 1.10 2 2.02 2.03 2.07 2.10 3
sus1 4 5-3,+3919f21 0 19 -2 -3 -2.05 -2.07 -2 -1.05 -1.07 -1 -0.05 -0.07 0 0.05 0.07 1 1.05 1.07 2 2.05 2.07 3
7sus1 4 5 7b-3,+31225f22 0 25 -2 -3 -2.05 -2.07 -2.10 -2 -1.05 -1.07 -1.10 -1 -0.05 -0.07 -0.02 0 0.05 0.07 0.10 1 1.05 1.07 1.10 2 2.05 2.07 2.10 3
9sus1 4 5 7b 9-3,+31531f23 0 31 -2 -3 -2.02 -2.05 -2.07 -2.10 -2 -1.02 -1.05 -1.07 -1.10 -1 -0.02 -0.05 -0.07 -0.02 0 0.02 0.05 0.07 0.10 1 1.02 1.05 1.07 1.10 2 2.02 2.05 2.07 2.10 3

Patches

To manage your patches edit the file mioSynth.snaps, you can rename or delete patches easily.

Internals

This synth operates setting 33 parameters from the GUI, here you find every parameter explained. Generally speaking when you create a score in cSound at least you will use p1 (instrument), p2 (start time), p3 (duration), p4 (frequency or note), p5 (amplitude).

variable namep-varfunctionmodulerange
iAatp6attackVCA0.002, 1
iAdep7decayVCA0, 1
iAsup8sustainVCA0, 1
iArep9releaseVCA0, 1
kPw1p10duty cycleOSC10.05, 0.95
kPw2p11duty cycleOSC20.05, 0.95
kMx1p12volumeOSC10, 1
kMx2p13volumeOSC20, 1
kOc1p14octaveOSC1-36, 36 semitones
kOc2p15octaveOSC2-36, 36 semitones
kFn1p16fine tuningOSC1-25, 25 cents
kFn2p17fine tuningOSC2-25, 25 cents
kCutp18cut offVCF0, 22050
kResp19resonanceVCF0, 1
iFatp20attackVCF0.001, 1
iFdep21decayVCA0, 1
iFsup22sustainVCA0, 1
iFrep23releaseVCA0, 1
kVolp24main volumeVCA0, 1
kPanp25panningVCA0, 1
kNsep26selectorNOISE1, 2
kMx3p27volumeNOISE0, 1
kSizp28room sizeREVERB0, 1
kMx4p29dry/wetREVERB0, 1
iRevp30switchREVERB0, 1
iWf1p31selectorOSC11, 3
iWf2p32selectorOSC21, 3
iL1tp33switchOSC10, 1
iL2tp34switchOSC20, 1
iL1vp35switchOSC10, 1
iL2vp36switchOSC20, 1
kTrmp37tremolo rateREVERB0.5, 20
kVbrp38vibrato rateREVERB0.5, 20