Godel 2b2 available, with Live! support

Ernest's icon

Beta 2 of the Godel arpeggiator with polyphonic synthesizer is now available for download:

This release contains the following files:

* Godel2b2.maxpat - the standalone Max instrument
* Godel2live.amxd - Godel 2 as a Live 9.90 instrument. This is a small shell with a button to open Gocel 2 in another window.
* Godelcore2b2.maxpat - the poly~ patch containing the synthesizer in gen~.
* godelPresets.json - The presets file. This must be locatable during load (in the same folder) for the instrument to work.
* godelSettings2b2.json - The system settings data. This must be locatable during load (in the same folder) for the instrument to work.

So far I have not been able to run more than 8 voices without audio dropout, but I don't know very much about configuration Live and it is probably a driver issue. I got as far as disabling the max audio controls when the instrument is loaded in Live!.

Please let me know if you have any suggestions or questions before the next release, which will be the release candidate. I only plan to add some demo patches and build collectives for the final release.

Ernest's icon

Features:

  • Two oscillators

  • Adjustable waveform shape

  • FM, sync, and FM feedback

  • Graphical pitch tracking, graphical FM tracking, and wave display

  • 12/24-pole filter

  • Graphical pitch tracking

  • Mixed poles, variable saturation, and variable drive

  • Two LFOs

  • Adjustable waveform shape, and frequency

  • Polyphonic spread by frequency or amplitude

  • Two ADSR envelopes

  • Attack velocity sensitivity

  • Graphical gate velocity sensitivity

  • Pitch slope modulation

  • Single, multiple, and repeat modes

  • Modulation matrix

  • Six assignable polyphonic modulations with individual level control for each matrix selection

  • 21 sources

  • 37 destinations

  • Stereo effects

  • Phaser/flanger

  • High-quality chorus

  • Ping-pong tempo delay

  • Efficient reverb

  • Custom fast-response limiter

  • Keyboard

  • Direct, stored note, and pitch transposition modes

  • Multicolor display

  • Notes may be stored in the preset and recalled in the same order played

  • MIDI input

  • Note on/off, program change, mod wheel, pitch bend, volume, all notes off, all sounds off, and MTC start/96-clock/stop signals

  • Arpeggiator

  • Sequences notes in the order played, with adjustable rate

  • The arpeggio may either adjust to the number of notes on, or with fixed note count, allowing new notes to substitute into the arpeggio

  • Hold mode allows including multiple notes with the same pitch in the arpeggio

  • Notes are stored in the sequence played

  • Notes are fully polyphonic with adjustable duration (notes may overlap)

  • Keyboard input in direct mode may play along with the arpeggio

  • Adjustable rate, syncs with external clock

  • Chord generator

  • May add chord notes to directly played notes or arpeggiated notes

  • Adjustable velocity response and duration for each note in the chord adds realism

  • Pitch remapping to different keys with sophisticated note cache system to track note-off events even when remapping is changed while a note is on, for either direct notes, stored notes, or both

  • Arpeggiated chords may have variable and intervals and patterns

  • Custom voice allocator

  • Optimally assigns notes for best quality when CPU resources are low, with complex note age adjustment both for note on and note-off events

  • Presets and preset bank management

  • Loading and saving of external preset files

  • Single-click recall, save, and delete of 128 programs

  • Last session state restored when starting a new session

  • Text comments stored with each preset

  • Max 6 Implementation

  • User interface almost completely built in Max 6 objects

  • Audio completely implemented in Max 6 gen~

Ernest's icon

Somewhat surprised not to have more feedback on a design this complete, I purchased a Mac Mini with Mavericks yesterday and did find some problems on initial testing. For example on Mavericks the file path is not resolved for saves, and the clock turns on automatically. So I will be releasing another beta. There have been 50 downloads and no one mentioned any problems, but if you do find it is not working as you might expect, or it is working as expected, please let me know.

Wetterberg's icon

I haven't been able to run it without dropouts either. Any lack of feedback would be based on not *really* having tried it.
I don't know, it's tough to be completely open about this, because clearly a lot of work went into this, so I hope this message finds you well.

To be perfectly honest I was hoping to find a proper arpeggiator that I could play around with, but it's welded to a synthesizer I'm not interested in.

If I could have a device that was from the "MIDI input" section and down, I'd be more inclined to test further.

broc's icon

Keep in mind that M4L users can easily build complex and flexible instruments in Live from existing devices (synthesiser, effects, LFOs etc). For this 'modular' approach it would be useful to have new special purpose devices instead of 'monolithic' ones.

Ernest's icon

Thank you Wetterberg. Please could you share the OS and CPU you have?

This is the fist shared implementation of an analog emulation synthesizer with audio designed entirely in gen~, and has over 100 parameters implemented. So while the Godel arpeggio architecture is unique, it is not the main interest of this project.

But to answer the issue of decoupling it from the synthesizer in detail, the problem is twofold: first, of lesser difficulty, new notes of the same pitch are not always assigned to new voices in other instruments. Second, and of more difficulty, the receiving instrument can receive very dense clusters of note-off events for notes of varying duration and same pitch, and it can also receive notes from the keyboard as well as the originator and chord generators (of which there could be many. S,o it has no way, with the standard MIDI protocol, to attach the note-off events to the correct voice.

I am a little disappointed with gen~ because on windows 7 with a 3GHz i7, it works fine when not in Ableton, and it will take many unit tests after deletion of separate subpatches to discover what gen~ component(s) are causing the audio overload. Clearly the audio chain is too long, and when compiled it cannot be completed within the available buffered sample periods.

poly-gen-in-godel.jpeg
jpeg
Ernest's icon

To explain a little more about the arpeggiator, it contains two allocators.

The first allocator stores notes in the order played. It displays the notes, maintains an age index for each note, adds multiple notes of the same pitch to the store if necessary; removes notes from the store when the keyboard turns them off (adjusting the index of other notes in the storage), and when the player turns on more notes than the limit, it also turns off the note display for the top kslider object.

The second allocator, after the chord generation and pitch remapping, controls a second kslider object under the first. It also generates note-off events for the arpeggiator, and additionally maintains a note tag index as well as an age index. The tags identify other notes in the same chord to be turned off when the arpeggiator is off and the player turns off the chord's root note.

This system also permits multiple arpeggiators, chord generators, and transposers to play at once, but first I am trying to get gen~ working.

Ernest's icon

An additional change in the second allocator was necessary to support display in the second max kslider object. When the arpeggiator or real-time play generates a note-off event after transposition or key remap is changed, the pitch of the note-off event can be different than the pitch of the original note, so the wrong note gets turned off in the keyboard display. Therefore the second arpeggiator also keeps a record not only of the original note, but also its pitch offset generated at time of the note-on event by tansposition and key remapping. Upon receiving a note-off event, it scans the original pitches of note-on events to find the voice of the note being turned off, and if it has not already been turned off because the polyphony was exceeded, it sends the note-off event to the sound generator and kslider object after adding the stored offset at the time of the original note-on event.

ehdyn's icon

I tried it on a very crappy PC laptop and it seemed to work just fine. I limited the voices to 8 or under and was thinking what would be neat is if this were a dynamic parameter. So you "lock" it using the current method but if I go upwards it allows me to explore the limits and gives slight changes to the material and of course would be reflected in the voice display.

All in all I think it's a great patch although it would be nice to understand some more of your thinking behind the overall architecture. I purchased Godel for Reaktor awhile back and still use it on a regular basis along with Husserl, and I think this compares favorably.
Also, I think this would fit in really well the "X" series of instruments from the example folder - X.FM and the transport controlled series that drives it..

If I had one wish it would be for a more complex amp envelope.. when I see four stages on any instrument I get a little bummed. The filter is quite nice though!
Anyways, always cool to look at your stuff and learn from it.

ehdyn's icon

Ah I see, while this reply was marinating in my browser you went into more depth and explained everything

Ernest's icon

Well hi. In fact the voices *are* a dynamic parameter, although it is not yet in my opinion ideal. In Godel 2, there is a setting left of the voice meter that sets the number of voices which can be active at any one time for each preset, and is stored with the preset, as is currently documented in the user manual. To reduce DPU usage, the preset value can also be clamped down to a hard limit from the settings panel. But the poly~ instances are not changed in number, rather instead, the unused instances are muted and left resident in memory. So the number of voices are dynamic and can change instantly.

What is not ideal currently is that it is loading 32 instances of poly~, and the voice settings limit the total number that can be on at any one time. In fact I believe there should be a third limit, which sets the number of voices that can have a gate-on, independent of the number of total voices, so the total number of notes which are on can be, say, 8, but also, up to 32 instances can have release phases active as well. The problem I perceive is confusion, as there are then *three* voice limit settings: one of the total number of voices allowed for the preset, one of the number which may have notes on, and a clamp limit for low-power CPUS, and already two settings are confusing, so I was not planning to add the ideal third setting until Godel 3, if I am able to make such a thing in the future.

But I also have some good news. I got a standalone running on a 2.5ghz mac mini, and so far, it seems to be working just fine with 32 voices, and without excessive CPU load. So my next priority is to make more demo presets. If you have used Godel or Husserl on Reaktor before, you know there are far more possibilities than are obvious from very few panel controls, so it could take a while to make a good demonstration.

Ernest's icon

The problem with moving to macos was rather simpler than I expected, although somewhat surprising. It seemed for some reason, the live.text object needed its enum set to '0 1' rather than text enum, for it to send events out the left outlet. I don't entirely understand why this was necessary, as it wasn't in the live.text help file, but the help file works. Maybe it was because the patch was originally built on a PC, and there have been some notes on the forum about strange behavior of some of the live objects. But whatever the reason, after changing the enum values, it started to work as expected.

In the standalone for mac Mavericks, pattrstorage also doesn't have problems with finding the path to the preset files. That seems to be a problem for Live! collectives only.

I did also find the built application for maces is much more smooth and responsive than the .maxpat.