JASS, Just Another Synth...Sort-of, codename: Gemini (UPDATED: esp with midi fixes)
JASS, Just Another Synth...Sort-of, codename: Gemini (UPDATED TO V-1.0.1)
jass-v1.0.1( esp with midi fixes).zip
1.0.1-CHANGES:
- Fixed issues with midi routing, re the mode selector (mentioned below)
- Upgraded the midi mode "fetch" abstraction to be less granular
- Fix (for midi) so changing cc["14","15","16"] to "rnd" outputs a random wave (It has always done this for non-midi.)
- Added a midi-mode-tester.pd (connect PD's midi out to PD's midi in to use it)
- Upgrade: cc-56 and cc-58 can now change pbend-cc and mod-cc in all modes
- Update: the (this) readme
INFO: Values setting to 0 on initial cc changes is (given midi) to be expected.
JASS is a clone-based, three wavetable, 16 voice polyphonic, Dual-channel synth.
With...
- The initial, two wavetables combined in 1 of 5 possible ways per channel and then adding those two channels. Example: additive+frequency modulation, phase+pulse-modulation, pulse-modulation+amplitude modulation, fm+fm, etc
- The third wavetable is a ring modulator, embedded inside each mod type
- 8 wave types, including a random with a settable number of partials and a square with a settable dutycycle
- A vcf~ filter embedded inside each modulation type
- The attack-decay-release, cutoff, and resonance ranges settable so they immediately and globally recalculate all relevant values
- Four parameters /mod type: p1,p2, cutoff, and resonance
- State-saving, at both the global level (wavetables, env, etc.), as well as, multiple "substates" of for-each-mod-type settings.
- Distortion, reverb
- Midiin, paying special attention to the use of 8-knob, usb, midi controllers (see below for details)
- zexy-limiters, for each channel, after the distortion, and just before dac~
Instructions
Requires: zexy
for-entire-state
- O: Open preset. "default.txt" is loaded by...default
- S: Save preset (all values incl. the multiple substates) (Note: I have Not included any presets, besides the default with 5 substates.)
- SA: Save as
- TEST: A sample player
- symbol: The filename of the currently loaded preset
- CL: Clear, sets all but a few values to 0
- U: Undo CL
- distortion,reverb,MASTER: operate on the total out, just before the limiter.
- MIDI (Each selection corresponds to a pgmin, 123,124,125,126,127, respectively, see below for more information)
- X: Default midi config, cc[1,7,8-64] available
- M: Modulators;cc[10-17] routed to ch1&ch2: p1,p2,cutoff,q controls
- E: Envelopes; cc[10-17] routed to filter- and amp-env controls
- R: Ranges; cc[10-17] routed to adr-min/max,cut-off min/max, resonance min/max, distortion, and reverb
- O: Other; cc[10-17] routed to rngmod controls, 3 wavetypes, and crossfade
- symbol: you may enter 8 cc#'s here to replace the default [10-17] from above to suit your midi-controller's knob configuration; these settings are saved to file upon entry
- vu: for total out to dac~
for-all-mod-types
- /wavetable
- graph: of the chosen wavetype
- part: partials, # of partials to use for the "rn" wavetype; the resulting, random sinesum is saved with the preset
- duty: dutycycle for the "du" wavetype
- type: sin | square | triangle | saw | random | duty | pink (pink-noise: a random sinesum with 128 partials, it is not saved with the preset) | noise (a random sinesum with 2051 partials, also not saved)
- filter-env: (self-explanatory)
- amp-env: (self-explanatory)
- rngmod: self-explanatory, except "sign" is to the modulated signal just before going into the vcf~
- adr-range: min,max[0-10000]; changing these values immediately recalculates all values for the filter- and amp-env's scaled to the new range
- R: randomizes all for-all-mod-types values, but excludes wavetype "noise"; rem: you must S or SA the preset to save the results
- U: Undoes R
for-each-mod-type
- mod-type-1: (In all cases, wavetable1 is the carrier and wavetable2 is the modulator); additive | frequency | phase | pulse | amplitude modulation
- mod-type-2: Same as above; mod-type-2 May be the same type as mod-type-1
- crossfade: Between ch1 and ch2
- detune: Applied to the midi pitch going into ch2
- for-each-clone-type controls:
- p1,p2: (self-explanatory)
- cutoff, resonance: (self-explanatory)
- navigation: Cycles through the saved substates of for-each-mod-type settings (note: they are lines on the end of a [text])
- CP: Copy the current settings, ie. add a line to the end of the [text] identical to the current substate
- -: Delete the current substate
- R: Randomize all (but only a few) substate settings
- U: Undo R
- cut-rng: min,max[0-20000] As adr-range above, this immediately recalculates all cutoff values
- res-rng: min,max[0-100], same as previously but for q
- pbend: cc,rng: the pitchwheel may be assigned to a control by setting this to a value >7 (see midi table below for possibilities); rng is in midi pitches (+/- the value you enter)
- mod-cc: the mod-wheel may be assigned to a control [7..64] by setting this value
midi-implementation
name | --- | Description |
---|---|---|
sysex | not supported | |
pgmin | 123,124,125,126,127; They set midi mode | |
notein | 0-127 | |
bendin | pbend-cc=7>pitchbend; otherwise to the cc# from below | |
touch | not supported | |
polytouch | not supported |
cc - basic (for all midi-configs)
# | name | --- | desciption |
---|---|---|---|
1 | mod-wheel | (assignable) | |
7 | volume | Master |
cc - "X" mode/pgmin=123
cc | --- | parameter |
---|---|---|
8 | wavetype1 | |
9 | partials 1 | |
10 | duty 1 | |
11 | wavetype2 | |
12 | partials 2 | |
13 | duty 2 | |
14 | wavetype3 | |
15 | partials 3 | |
16 | duty 3 | |
17 | filter-att | |
18 | filter-dec | |
19 | filter-sus | |
20 | filter-rel | |
21 | amp-att | |
22 | amp-dec | |
23 | amp-sus | |
24 | amp-rel | |
25 | rngmod-freq | |
26 | rngmod-sig | |
27 | rngmod-filt | |
28 | rngmod-amp | |
29 | distortion | |
30 | reverb | |
31 | master | |
32 | mod-type 1 | |
33 | mod-type 2 | |
34 | crossfade | |
35 | detune | |
36 | p1-1 | |
37 | p2-1 | |
38 | cutoff-1 | |
39 | q-1 | |
40 | p1-2 | |
41 | p2-2 | |
42 | cutoff-2 | |
43 | q-2 | |
44 | p1-3 | |
45 | p2-3 | |
46 | cutoff-3 | |
47 | q-3 | |
48 | p1-4 | |
49 | p2-4 | |
50 | cutoff-4 | |
51 | q-4 | |
52 | p1-5 | |
53 | p2-5 | |
54 | cutoff-5 | |
55 | q-5 | |
56 | pbend-cc | |
57 | pbend-rng | |
58 | mod-cc | |
59 | adr-rng-min | |
60 | adr-rng-max | |
61 | cut-rng-min | |
62 | cut-rng-max | |
63 | res-rng-min | |
64 | res-rng-max |
cc - Modes M, E, R, O
Jass is designed so that single knobs may be used for multiple purposes without reentering the previous value when you turn the knob, esp. as it pertains to, 8-knob controllers.
Thus, for instance, when in Mode M(pgm=124) your cc send the signals as listed below. When you switch modes, that knob will then change the values for That mode.
In order to do this, you must turn the knob until it hits the previously stored value for that mode-knob.
After hitting that previous value, it will begin to change the current value.
cc - Modes M, E, R, O assignments
Where [10..17] may be the midi cc #'s you enter in the MIDI symbol field (as mentioned above) aligned to your particular midi controller.
cc# | --- | M/pgm=124 | --- | E/pgm=125 | --- | R/pgm=126 | --- | O/pgm=127 |
---|---|---|---|---|---|---|---|---|
10 | ch1:p1 | filter-env:att | adr-rng-min | rngmod:freq | ||||
11 | ch1:p2 | filter-env:dec | adr-rng-max | rngmod:sig | ||||
12 | ch1:cutoff | filter-env:sus | cut-rng-min | rngmod:filter | ||||
13 | ch1:q | filter-env:re | cut-rng-max | rngmod:amp | ||||
14 | ch2:p1 | amp-env:att | res-rng-min | wavetype1 | ||||
15 | ch2:p2 | amp-env:dec | res-rng-max | wavetype2 | ||||
16 | ch2:cutoff | amp-env:sus | distortion | wavetype3 | ||||
17 | ch2:q | amp-env:rel | reverb | crossfade |
In closing
If you have anywhere close to as much fun (using, experimenting with, trying out, etc.) this patch, as I had making it, I will consider it a success.
For while an arduous learning curve (the first synth I ever built), it has been an Enormous pleasure to listen to as I worked on it. Getting better and better sounding at each pass.
Rather, than say to much, I will say this:
Enjoy. May it bring a smile to your face.
Peace through love of creating and sharing.
Sincerely,
Scott
16x oversampled: GuitarToy
Again, should have included the non-plugin Pd version for evaluation:
guitar_toy16X_V0.71a_release.zip
There's a folder in the archive (.AUCOP) that holds extra presets. On a Linux system it should be in the user's home path (I've never tested that on other systems). It's not absolutely necessary, and the "Load Presets" file dialog should just open in the default Pd dir, if it's not found.
Edit: Oops, I kinda already did that above. This is different only in changes to the extra preset file...
Conceptual question about Step Sequencer using Tables, Arrays instead of text files
@seb_harmonik.ar I'm trying to composite ideas from my sequencer and yours to make use of arrays. The things from mine are just the saving and recalling of presets, but it's getting a little confusing.
I renamed your tseq abstraction to tnseq. One thing that hanging me up is to send unique data from each tnseq object. So I tried [send $0-row] but that doesn't work. I can't figure out why. I figure if I have 8 rows (maybe more) each rows needs to have data sent and stored in a different place.
In the "storing presets" box, I want to have a different pd object for each row. What I am trying to do is compile each row's information into a message box with the preset number, the row number and the toggle box information. I was going to then store each preset (there might be 100) into a different array. Is this a crazy way to go about that? I can't really conceive of any other way to go about it.
If anyone has some improvements or suggestions please let me know. Thank you for all the help!
s3s: "simple three stack" guitar pedalboard/stompbox utilizing three fx1000 (multi-effect pedal) abstractions
KNOBS version
s3s-init-ver.zip
depends on: zexy moonlib list-abs iemlib
VSLIDER verion (No moonlib dependency)
s3s(sliders).zip
depends on: zexy list-abs iemlib
This is an example, demonstration patch, though fully functional in its own right, demonstrating the use of the fx1000 multi-effects pedal abstraction (included in the zip where more details about it are available in its -help file).
Like its predecessor, the fx600, the fx1000 is a cheap, fast, and easy to use multieffects abstraction (though including 10 not 6 effects) that, when combined, can easily create wonderful, highly complex, and original sounds. Each fx1000 includes: chorus, delay, distortion, flanger, phaser, pitchshifter, reverb, tremelo, vcf, and vibrato.
The s3s includes:
- a sample or adc~ toggle, which sets whether to receive audio~ from a sample (.wav) file or adc~;
- a sample player, with both a short, default (Pachabel's Canon) sample for testing and an openpanel to either test or even edit and remaster tracks;
- presets (for all three pedals) via savepanel and openpanel. There is no need to navigate anywhere to save the preset, just click "SAVE", enter a filename, and click "Save" (they are all stored in the fx1000/presets folder with a prefix in the format "pedal1effect-pedal2effect-pedal3effect"+whatever you entered). Note: you Do need to navigate to that folder to load a preset;
- a parallel or serial selector which either sums, i.e. +~ all three effects, or serializes them, audio~>1>2>3>masterout~;
and - a transport control (abs) for recording your work, which includes fadein and fadeout bangs and times(ms) which starts recording from env~=0 and then sends a line~ ramp up to 0.9 or vice versa sends line~ down then stops recording when env~=0. Recordings are saved at fx1000/recordings.
If you just turn dsp one and click the "PLAY" toggle, it will play the default(loadbang) voice (3 choruses).
INFO:
I can't play guitar very well. But I really wish I could, because I would really like to be able to use this patch to its full potential. Which is where you come in. .
I would Really like to see/hear what I good guitarist can do with a pedal board of 3 multifxs.
Please, do drop me a line or link if you use it or even just experiment with/test it.
I hope you find it easy to use and understand, rich in the amount of possibilities it (compactly) opens up, and able to free you up to do the really important thing, which is you making music (not programming pd .
Let me know if you have any problems getting it to work or there are issues with it and I'll help you or fix them as soon as I can.
Peace and Love through Music.
Sincerely,
Scott
p.s. one really fun thing to do is set it to "Parallel", then "R"andomly set the 3 pedals, and switch to Series, and tweak the knobs. Parallel allows you to hear each one, while Series allows you to hear the...whacked out...result. If it's cool, just save it with a name. Watch out though, it is limiter~ed but random results for distortion can be quite noise~y.
vstplugin~ 0.3.1 - bug fix release
This is a critical bug fix release for vstplugin~ v0.3.0 (see https://forum.pdpatchrepo.info/topic/12500/vstplugin-0-3-0)
NOTE: If you’ve already been using vstplugin~, please upgrade and read the changelog below!
Binaries are available on Deken or here: https://git.iem.at/pd/vstplugin/releases .
Please report any bugs at https://git.iem.at/pd/vstplugin/issues or leave a comment.
Changelog
bug fixes
- fixed wrong VST3 plugin ID. The main issue was that VST3 preset files couldn’t be opened in other VST hosts and vice versa.
NOTE: You can still open old “wrong” preset files, but this might go away in future versions, so you’re advised to open and save your old VST3 presets to “convert” them to the new correct format. But first you need to clear the plugin cache with [search_clear 1(
and do a new search to update the plugin IDs. Sorry for the inconvenience!
-
fixed possible crash when opening plugins asynchronously
-
fixed possible crash when quitting Pd (especially on macOS)
-
fixed crash with certain VST3 plugins when saving presets
-
disable window resizing if the GUI editor has a fixed size
features
- resizable VST3 GUI editors are now supported
vstplugin~ 0.3.0
I'm happy to announce the release of vstplugin~ v0.3.0.
[vstplugin~] allows to load VST2 and VST3 plugins on Windows, macOS and Linux.
Binaries are available on Deken or here: https://git.iem.at/pd/vstplugin/releases
Please report any issues at https://git.iem.at/pd/vstplugin/issues or https://github.com/Spacechild1/vstplugin/issues
BTW, I've made a small tutorial video :
Change Log
New features:
- better error messages when plugins fail to load (e.g. wrong CPU architecture)
- automatically scan VST3 presets
- new simplified preset management system, using named presets which are saved to standard locations (the old methods remain for power users).
- new
vstpresetbrowser.pd
abstraction - improved
vstpluginbrowser.pd
: better GUI + plugins can be filtered by keyword, type, category and vendor [open(
can be called asynchronously and responds with[open <success>(
- preset methods can be called asynchronously and respond with messages, e.g.
[preset_load <success>(
[reset(
can be executed asynchronously and responds with[reset(
.[search_stop(
method to cancel an asynchronous plugin search.[param_list(
,[program_list(
and[preset_list(
accept an optional plugin key argument[info(
also outputs the VST SDK version.- experimental support for PDINSTANCE (untested)
Bug fixes:
- fixed serveral bugs in the VST3 implementation
- fix crash when calling
[midi_*(
methods without plugin - don't lock Pd when receiving events from the GUI thread if DSP is running, instead set an atomic flag and set a clock in the perform routine. This avoids dead-locks in certain plugins and also improves realtime-safety.
Have fun!
Cheers,
Christof
[store.state] - patch-less state saving method for abstractions
Hi everybody,
Pd 0.49.1 has a new object [savestate] for saving lists of parameters to the parent patch so that different instances of an abstraction are saved with different parameters. The help file for it shows a method of creating/unpacking the list which I think is a bit awkward for abstractions with lots of parameters as it requires a lot of patching and is dependant on the order of packing/unpacking.
I have adapted the method used for saving presets to a text file to do the state saving in a very similar fashion here. Store.state-help.pd explains its workings as well as I could, hope it's clear enough.
In the future I'd like to merge this method and the text file preset saving to work alongside (where the presets are just multiple states, basically), but for most purposes I think the state saving is more useful and immediate than presets. At least for me, anyway.
This new object opens up interesting possibilities so any feedback or alternative methods are welcome.
Collate / collect timed sequence of Puredata messages?
@sdaau_ml ...... [qlist] will do that, and you can time tag the messages as well.
Use [list prepend add] to send your message into qlist..... it will put each message on a new line.
Then send [qlist] the [print( message when you want to print all to the terminal.
Click [qlist] or send it a [click( message if you want to open a window to see the messages stored.
[clear( will empty it.
It will not tell you how many messages are stored...... but you have done that bit already.
The [text] objects with [text define] will do it all though..........
[text] will also save messages, and you can retrieve them and query the lists.
[text size] will tell you how many lines have been added.
[text sequence] will do much the same as [qlist], send the messages out, etc.
[textfile] might be easier to handle than [text] though.... for your purpose, now that you have built your counters..... unsure about that though...... [text] would probably be best.
David.
How do we create presets?
If you want to be able to save and load several presets for one patch, arrays are the way to go. There are more than a dozen generic preset managing patches around this forum if you look in the patch and abstraction sections. But you will probably learn more from creating one yourself.
For a simple preset management use ; messages. Use the receive options on your buttons to your advantage. For example let's say you have four toggles receiving on b1, b2, b3, b4 respectively. Then you make a message box like this: [;
b1 1;
b2 0;
b3 0;
b4 1; (
The semicolons are important!. Now you that message will set all those toggles whenever you bang it, without connecting chords for the toggles.
If you're having a lot of toggles you might wanna look into ad-da conversion / binary to decimal and back. This way you can (theoretically) keep track of 32 zeros and ones with one float. There are a couple of conversion patches in the abastractions forum.
As for working with arrays for preset management, take a look at the help files, and the array examples in the /doc/ folder to get an idea what you can do with tabread and tabwrite.
using [savepanel] to save a *.pd file instead of File / Save
Hi all,
Is it possible to use [savepanel] to save a patch .pd file (i.e canvas) instead of File / Save? I already use the [SSSAD] preset saving system provided (which works like a dream to save patch presets) shown below. At the moment I use the [savepanel] to save a txt file of the presets for my patch through SSSAD. So could I also use [savepanel] to then save a pd patch file of the same name I give to the text file for presets or vice versa?
Thanks in advance !