Ula ring messaging framework and multichannel voice allocation
Ula 1.1 and polyvoice 2.0, of which first versions were posted in the toolbox here, are now fully documented on http//yofiel.com . Before posting final versions of these, requests for further features in the shared designs, or queries on the explanations, are welcome.
So far, there is a pitch transpose for each of the 16 channels, and a reset command for the channel parameters in Polyvoice. The format of Polyvoice output note messages will be [channel][pitch][gate] instead of [pitch][gate][channel], as that is more like the way it is in MIDI.
Ula 1.2 will have a global reset and clock, and will be documented next week.
The ring clock, transport, reset, and preset message protocols for Ula 1.2 are now documented here:
The demo is making progress, now including full 16-channel multi support in poly~ and a multifingered arpeggiator with notes arpeggiated in the order played across 4 channels. Requests for changes or features in the public version are welcome over the next week, after which the 1.2 release will be in slush.
Some notes on Ula’s new multiphonic arpeggiator are here:
Polyvoice 2.0 is now fully documented here:
….The Ula 1.3 arpegiator is a multichannel, polyphonic arpeggiator with played note ordering. Multichannel operation lets it arpeggiate different sounds as well as different notes. Each sound plays in a different voice, so the sounds can overlap and not cut each other off. It arpeggiates notes not only in the order they are played, but also drops notes which are no longer played–That is, it arpeggiates the notes currently pressed on a keyboard, in the order they were pressed.
…Polyvoice 2.0 is a complete, multichannel, polyphonic voice controller, supporting multiple channels inside a single poly~ object. With it, each voice in the poly~ object can receive different channel messages, in the same way as in Multichannel MIDI keyboards and GMIDI 1.0 instruments. Any channel can play any number of voices in a single poly~ object. Each note issued t the poly~ object can make a different sound, simply by sending it to a different channel. Changing a channel voice parameter, say for example a filter cutoff, instantly changes the filter cutoff for all voices in the poly~ object which are on that channel, but does not change the cutoff for voices on other channels. Furthermore, the Ula design also sends preset changes upon new note-on events, without affecting existing playing notes. In MIDI terms, these are program changes, and the program changes affect new notes on a channel, but leave existing notes playing the old program until the old note ends, while simultaneously, controller changes are still instantaneous for all voices on the same channel. This is the same behavior as expected for multichannel synthesizers conforming to the GMIDI 1.0 specification. The Polyvoice controller also contains its own voice assignment algorithm, sending new notes to the voice with the least-recently-released note by default, ensuring that new notes do not clip the release phase of playing notes when voice stealing.
The Ula Ring Messaging protocol is updated to v1.1, and fully documented here:
Also it is downloadable from the same page.
"The ULA ring is a simple, open, and extensible way to connect many parts of a system together. All Ula subpatches can send messages to each other on single-wire ring, and they can be any sequence on the ring. The Ula controller can display all ring communication and stops stack overflow due to endlessly cycling messages. All messages passing through the Ula controller may optionally be printed to the to the Max debug window with a timestamp. Because the controller receives all ring messages, it can also manage message recording and playback, to recreate any AV composition on the Ula system. Ula v1.1 improves upon Ula 1.0 by providing more detailed messages, as well as more ways for patchers to talk to each other, such as message broadcast, snooping, and injection. The 1.1 controller, inside the Diag subpatch, also provides ring tests, reset, performance stats, and a simple way to add and remove subpatches from the ring."
There’s been a few people looking around, but no comments, which may be because the website was slow, so I speeded it up quite a bit. I’ll wait another week before closing the design. Please do let me know if you seek anything in particular in the way of multichannel polyphony.
The first implementation of ULA for a multichannel poly~ is now available for download without login here:
A pitch remapper and velocity shaper is now available here:
I created these patches on the way to more sophisticated work, and hope to distribute some built binaries for free. As is obvious from this thread, I haven’t got any direct feedback from people downloading, so I don’t plan to expand the public Ula source library further.