Hi again,
Sorry for being a bit obstinate about all this but I really do like the Tracktion Engine so far while at the same time microtonality is a must-have for our use case… and I have this feeling that it must be possible to solve somehow without any major rewrites!
In the light of this thread and after some hours of digging through the code and testing various approaches, it seems to me like the issue is twofold:
- Microtonal pitches must have a representation in the Tracktion Engine model
- The pitches must then be communicated to synths and other plugins
Starting with the respresentation, the solution seems pretty straightforward: adding an additional field to MidiNote
containing the “pitch deviation”. To me it makes sense to store this information in the note object as it is there is semantically belongs. Keeping an integer noteNumber
and adding a float pitchDeviation
also seems like a sensible compromise between flexibility and backward compatibility: all pitches could easily be represented but the extra pitch information could easily just be ignored by code that is not interested in it.
The second issue seems to be harder to solve within the current limits of the implementation. At first glance it seems like a trivial thing: I have a few bytes of information that I would like to pass on from a MidiNote
to the plugin playing that note. The problem is that the “transport layer” consists of MIDI (1.0) messages so only information supported by MIDI 1.0 can be passed on. The built-in existing way of extending MIDI (SysEx) also cannot be used because of memory issues (allocation in the audio thread).
So a few questions as an attempt to move forward:
- Can we agree on this description of the issue?
- Do you agree that it makes sense to think about the two parts of the issue separately?
- Do you think that my proposed solution for 1) is reasonable?
- What options are there for 2)?