Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: MTS Midi Tuning Standard #38

Open
julianrabius opened this issue Sep 14, 2024 · 6 comments
Open

Feature Request: MTS Midi Tuning Standard #38

julianrabius opened this issue Sep 14, 2024 · 6 comments
Labels
enhancement New feature or request
Milestone

Comments

@julianrabius
Copy link

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.)

@Archie3d Archie3d added the enhancement New feature or request label Sep 14, 2024
@Archie3d Archie3d added this to the 0.3.0 milestone Sep 14, 2024
@Archie3d
Copy link
Owner

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.

@julianrabius
Copy link
Author

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

@julianrabius
Copy link
Author

just discovered this overview of tuning techniques
https://surge-synthesizer.github.io/tuning-guide

@Archie3d
Copy link
Owner

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.

@julianrabius
Copy link
Author

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.

@Archie3d
Copy link
Owner

I understand the use case, will see how this can be achieved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants