Posted
I still haven't studied my installation of Synfire as I should, but I would like to quickly verify whether it's possible to send sysex message. Forum search doesn't turn up any recent definitive answer, so if the answer is no, that will save me a lot of time. If the answer is yes, can I get some details or a pointer to where this capability is documented?
Sun, 2023-04-23 - 11:54 Permalink
I have a synth that supports MTS real-time tuning. I'd like to retune it at arbitrary times so that the MIDI note numbers that Synfire outputs will play the MIDI notes I've microtuned to the EDO I want to use at that time. This is different from pitch bend microtuning, which limits pitch bent notes to one per channel. It's also different from pre-loading the synth with a microtuning, which limits it to 128 possible notes. That's not enough, for example, for EDO-31, which has over 300 notes over the 10+ usable musical octaves. I really need real-time microtuning via sysex to use Synfire to create microtonal music.
I've already created and tested sysex's that will do what I need, but they must be sent out at moments that coordinate with the music. The best way to do that would be from within Synfire.
Sun, 2023-04-23 - 18:39 Permalink
Sounds like a good idea for pure harmonic tunings and similar variants of the well-tempered tuning.
It's not yet obvious though how this would work with more than 12 tones per scale or scales spanning multiple octaves. Synfire's harmony knowledge and tools are based on a maximum of 12 tones per octave. You may be able to get interesting results, but you won't be able to use the Palette and Harmonizer in a meaningful way. Synfire also considers any pitch class modulo 12 to be equivalent harmony-wise. That's not the case with most microtonal scales.
Mon, 2023-04-24 - 00:42 Permalink
Yes, I'm thinking results that may be interesting in themselves even if not musically idiomatic in any established way.
But there's another important factor to take into consideration. Take EDO-19, for example, If I can custom-tune any MIDI note to any frequency, I can then place a desired 4-note chord or sub-scale of 12 (or any number of) notes in locations to "fool" Synfire into doing clever things with them. So perhaps working with a 12-note subset of EDO-19 would give a microtonal sound within a modulo 12 context, if you see what I mean. Partch's 43-note scale, for example, isn't used as a monolithic collection of 43 notes per octave, but as a source to choose and work with subsets.
Results could be muscially worthwhile, or could be garbage. Probably musically useful, but it might turn out that this way of working is too much of a pain to be fun--or it might turn out that it's relatively easy to get useful and unusual stuff by dropping in cleverly placed re-tunings of the MIDI notes. It's definitely experimental, and I wouldn't ask if I didn't think that a "send sysex" function would have additional uses for people using external synths. Historical variants of the well-tempered tuning, sure, but perhaps also controlling hardware synthesizer functionalities available via sysex on a per-synth basis.
Mon, 2023-04-24 - 07:51 Permalink
Microtonal music always enticed me, but the effort to support it in a meaningful way is huge. The semantics of microtonal scales are manyfold and there's no standard to refer to. All math and inferencing would require an extra argument (the current tuning). Even the black and white keys won't make sense anymore. You'd need a different keyboard layout per tuning. You'd probably even need a separate Catalog per tuning.
If your hardware supports some mapping of MIDI controllers or program changes to tunings, you could use Synfire's articulations.
If you are into coding, you could hack something that intercepts MIDI CC or program changes and inserts sysex into the stream.
The best place to add support for sysex might be articulations. They already support key switches, CC and program changes. Adding one more type should be doable.
Mon, 2023-04-24 - 11:20 Permalink
Microtonal is pretty niche, and I can't see practically restructuring systems built for EDO-12 and diatonically oriented music to accommodate microtonal for the reasons you mentioned. I, for one, wouldn't want to try to follow microtuned pitches on some extended version of the 5-line staff, and a piano keyboard is visually too confusing when you map higher EDO's onto it, and doesn't offer enough range to boot. I've tried isometric controllers like the LinnStrument, which worked quite well for certain EDO's, but the range limitation imposed by its limitation to 128 MIDI note numbers was too constraining. That leaves the only interest in microtonal music--at least for me--in algorithmic generation, which is why I wanted to try Synfire. I'm also looking at Opusmodus, a composition system with a rather different orientation than Synfire, but even that more experimentally-oriented environment doesn't support sysex messages. It does support 1-note-per-channel microtonality via pitch bend, but I have a synth that can do better than that, so I'd like to use it.
I also have a 6-octave Haken Continuum, which can be set to divide its octaves into any number of equal parts. Since its "keys" are only painted on, playing it--improvising on it--microtonally may be cramped at EDO-19, but you can develop enough muscle memory to make it worthwhile. I'm just after a composition system to generate accompaniment, etc. As I mentioned, I'm currently working with Opusmodus, and I haven't yet learned to really use Synfire since I purchased it. When you say articulations might be a good place to support sysex, I hope you mean that's functionality you will consider adding because I don't think I can hack something like that. I was hoping sysex might be more generally desirable than my single-use purpose so that you'd want to add it for your power users.
Tue, 2023-04-25 - 10:28 Permalink
Hi Jimmy,
> I'd like to retune it at arbitrary times so that the MIDI note numbers that Synfire outputs will play the MIDI notes I've microtuned to the EDO I want to use at that time
Are you aware of Oddsound's MTE-ESP Suite? That allows you to dynamically change a global tuning table across the course of your composition with plain MIDI messages like key switches or MIDI CC. The plugin suite then retunes your actual instruments via different protocols like MTS SysEx, MPE or its native MTS-ESP protocol to follow that tuning table, so that all your instruments are in sync with your tuning that changes over time.
I plan to use this with Synfire in my next piece using pajara temperament (perhaps just plain 22-EDO). I think the key to use Synfire for something like this is indeed to define a custom catalogue and custom palettes. Additionally, I think it really helps to use scales of up to 12 tones with a certain degree of regularity, e.g., that use several instances of the same chords. I would like to have different transpositions of the same Synfire chord mapped to the same microtonal chord. Intervals that are equal in 12-EDO are not necesssarily the same in your microtonal tuning, but I think it helps to have at least several cases of a 12-EDO interval consistently mapped to the same other microtonal interval (e.g., many 12-EDO minor thirds might be mapped to your microtonal 7/6 subminor third etc). Of course, that is just my preference, and not a necessity. Anyway, with a regular temperament (e.g., an EDO temperament) and certain scales this might be easier to get that with others.
For completeness, link to the manual: https://oddsound.com/dl/ODDSound_MTS_ESP_Suite_Master_Manual.pdf.
Tue, 2023-04-25 - 10:45 Permalink
[off-topic]
> I'm currently working with Opusmodus
I started to add support for arbitrary regular temperaments to Opusmodus as part of my tot library. I even started to extended the notation OMN to support arbitrary JI pitches with custom accidentals (implemented as text attributes), which would then be translated into whatever temperament you are using. The goal is that you could notate something like (Q CS4 -5K) to express a c sharp quarter note lowered by a syntonic comma (5 limit comma). For more info, see the work-in-progress tutorial.
However, this is currently all unfinished. So, if you want to compose microtonal music with Opusmodus then feel free to explore that, but do't expect everything to work. I am currently not planning to complete this any time soon, but instead want to use Synfire + MTS-ESP for now.
Tue, 2023-04-25 - 13:21 Permalink
Yes, I saw your stuff over at the Opusmodus forum. Very cool! I'm looking forward to trying it out. I hope someday you'll be inspired to come back to it.
As for MTS-ESP, I communicated with them the day it came out. It simply will not do what I need, which is real-time retuning. That's the only way to achieve simultaneous access to all 10+ octaves of any EDO (or other microtuning). In other words, polyphony limited only by CPU (not 16), and any note from the lowest bass to the highest soprano. That requires less than 120+ notes of EDO-12, which the 128 MIDI semitones cover, but higher than that...well, you see the arithmentic. I've written my own sequencer in Ruby that will do this via dynamic allocation of the notes scheduled to play each beat, but my little system is hardly a Synfire or Opusmodus. Oddsound doesn't dynamically allocate re-tuned sections of the keyboard, but that's the only way to get full-spectrum microtonality.
It's a square peg in a round hole here at Synfire, whose set of functionality orients to very harmonically extended tonal music (to put it briefly). I'm just thinking simply adding sysex functionality could be really fruitful for microtonal in a way that has no effect or side effects on any of Synfire's existing paradigms. I would think the more geeky Opusmodus (I mean that in a good way) would be open to adding sysex as just another user function, but I don't think I've communicated to the dev very well the difference between channel-based pitch bend tuned microtones and MTS-based real-time tuned microtones.
Just to verify, you do accomplish your Opusmodus MIDI micro-tunings via pitch bend, correct?
Tue, 2023-04-25 - 13:27 Permalink
Hi jimmy, not sure what DAW, if any you use, but maybe a maxforlive plugin in ableton could convert between some synfire cc parameters into the sysex you need? You seem to be capable of programming given your use of ruby, so Im sure you'd crack it in maxforlive?
Tue, 2023-04-25 - 14:05 Permalink
I guess that's possible, but for me injecting a sysex into a Synfire score at arbitrary locations would be the simplest thing because it wouldn't involve a third party app. I could actually have my sequencer listen for a CC from Synfire (OSC would be better, if supported) and get the job done, but again, the external software becomes one more chore I'd have to manage.
Tue, 2023-04-25 - 15:18 Permalink
> simultaneous access to all 10+ octaves of any EDO (or other microtuning)
I see. If that would be a strict requirement for me, I would try not at all use any MIDI-based software or hardware, but instead use some score-based software synth (e.g., SuperCollider or Csound) or something that can be tuned with OSC messages.
If you want to use Synfire, then you want to use not only chords but also scales, i.e. a hierarchic organisation of subsets of all your possible pitches. I think I can get away with using MTS-ESP for microtonal music, because I always need only some scale -- some subset of pitches of my full tuning -- at a time. With MTS-ESP and also with Synfire, this scale subset is restricted to 12 different pitches, but that subset can change at any moment with MTS-ESP, and rather quickly, if you want that (e.g., you might have a new scale every bar or even every beat). For me that is good enough, but your musical needs may be different of course.
If you are using Reaper, there is also alt-tuner, where you can have a larger subset than just 12 sim. scale tones at any moment.
> Just to verify, you do accomplish your Opusmodus MIDI micro-tunings via pitch bend, correct?
Most of the tuning-math in the source file I linked is independent of any specific tuning implementation. In practice, I used MPE, i.e., be limited to 12 sim. different tones. However, the implementation uses the tuning-support of Opusmodus, and I think that allows also for other tuning approaches. Never checked that though, as I have now mainly MPE-supporting plugins.