Feature Request: MTS Midi Tuning Standard
Thanks for this great Plugin, I am currently using it as vst3 in Reaper 7.22 on Windows 10. I knew the original Aeolus on Linux for years and was very happy to see that you have picked it up.
Feature Request: Please make Aeolus compatible to MTS (Midi Tuning Standard, mode: new notes only), perhaps even to MTS-ESP (allows central microtonal tuning of several instruments from one master plugin). This would make Aeolus an ideal choice for all Performers, Composers and Researchers working with arbitrary historical, alternative and microtonal tunings and would even set it one big step ahead of Organteq. (Pianoteq supports MTS and MTS-ESP for quite a long time, Organteq still not.)
Thanks @julianrabius This should be feasible, however I am not quite sure I understand what you mean by "new notes only". Aeolus sound generation is such that retuning regenerates the wavetables for all the pipes, so you cannot have sustained notes playing in one tuning while the new notes play in a new tuning - the entire organ will need to change the tuning at once. This will drop all the notes currently being playing (this effect you can already observe when changing the scale from the "tuning fork" menu while playing). Also, all the instances of the plugin share the same wavetables, so changing the tuning of a single instance will affect all the instances of Aeolus plugin. But I suppose this behaviour is well in line with the MTS-ESP where all the clients are kept synced in tune by the master.
Thanks for considering, that sounds great!
The "MIDI Tuning updated specification" (2004) describes
-
Bulk Tuning Dump (non-real-time) The Bulk Tuning Dump would retune the full instrument, as you write. This takes time. If the tuning of certain keys does not change, these can however be skipped.
-
Single-note Tuning Change (real-time) This should take effect immediately. For instruments, that (like Aeolus?) technically do not allow bending of the sounding note, there is the recommendation to leave the sounding note unchanged and prepare the new wavetables in the background, which will then be used for the notes to follow. ("New notes only").
To be able to change the tuning within a composition on the fly, automated by the recorded MTS-sysex, or alternatively by a master tuning plugin (like MTS-ESP), still sounding notes should not be affected. Would it be possible, to keep the current wavetables for sounding notes, while new sets are computed in the background? I am not sure, if the MTS-ESP Master always sends Bulk Tuning Dumps, when a single note tuning has changed, or also uses the Single Note Tuning Change Messages where appropriate. You may already be aware that oddsound offers information and a library for integration of MTS and MTS-ESP: https://oddsound.com/devs.php
just discovered this overview of tuning techniques https://surge-synthesizer.github.io/tuning-guide
Bulk tuning (non-real time) should be possible. Real-time tuning while playing (even for the new notes) - not really with Aeolus. Generating wavetables takes time (I use multiple CPU threads to speed this up), so the readiness of the retuned waveforms is not guaranteed to perform live tuning switch within a composition.
I looked at the OddSound's code and it does not seem they notify clients about the bulk retune - they are rather for the client to query the notes frequencies in real-time while synthesising the audio.
My main point would be, that sounding notes should not be interrupted or altered while the retuning is running in the background. In many cases during a piece only single keys would have to be retuned. Doing this, the organ stops currently in use should be prioritized. Sequencing a piece with changing intonations, the few needed MTS "real-time-tuning" messages could in many cases be sent well ahead before the new sound is needed. For example: Sequencing a piece in d-dorian in just intonation, based on C4 = 256 Hz. During most of the piece, A4 (midi note number 69) shall be the pure fifth on D4, which means 256 * 27/16 = 432 Hz. From time to time an F-Major Chord appears and A4 is needed as a pure third on F4, that is 256 * 5/3 = 426,67 Hz.
In each case, the MTS-Message could be sent by the sequencer immediately after the note-on of the previous A4. Perhaps the recent wavetables could also be kept in memory, in case the previous frequency is needed again.
For cases of heavy microtonalism or instant switching between completely different tunings there might be an option (at compile-time?), that separate instances of Aeolus on different tracks each have their own wavetables and receive their own tuning instructions. In this case, MTS-ESP would not seem to be a good choice.
Of course I understand, that because of the computational load of generating new wavetables, there would never be a garanty, that the result will be in time.
I understand the use case, will see how this can be achieved.
(See also #26)
@julianrabius Will you be able to test this? The tuning change from the master plugin should work globally when enabled in the plugin's settings (tuning fork menu).
This is fantastic news. Thank you so much! I have just downloaded Aeolus(MTS) and started experimenting. Seems to work really great so far, will continue testing in depth as my time permits. I own the ODDSOUND full version, so I have first tried with MTS-ESP Master. Nothing irregular at first sight, Aeolus(MTS) behaves really nice.
Great! Thanks for testing. Let me know if any issues. This will be delivered in the next release then.