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

Add MIDI Tuning Standard (MTS) support #282

Open
OpenSourceAnarchist opened this issue Aug 15, 2024 · 1 comment
Open

Add MIDI Tuning Standard (MTS) support #282

OpenSourceAnarchist opened this issue Aug 15, 2024 · 1 comment

Comments

@OpenSourceAnarchist
Copy link

Timidity already supports MTS, but I was really hoping it could be added to SCC (edmidi), opnmidi, and adlmidi. Technically for my purposes I only need real-time single note change (bank/no bank). See https://sourceforge.net/p/timidity/git/ci/master/tree/doc/C/README.mts and https://sourceforge.net/p/timidity/git/ci/master/tree/timidity/playmidi.c#l8138 for their implementation, along with the tuning table here: https://sourceforge.net/p/timidity/git/ci/master/tree/timidity/tables.c#l58.

This allows for fine-grain control of individual note frequencies, and then channel-level effects take precedence after. This is extremely useful for microtonal midi files.

As an extreme case, attached is a midi file where "it selects bank 0, prog 0 (piano) to channel 0 and then proceeds to play a number of chords with four notes in each of them. Each chord is played via the MIDI notes 124, 125, 126 and 127. And before each chord is played, there is a SysEx message that uses MTS to assign new frequencies (in the lower, audible range) to those four MIDI note values via tuning bank 0, tuning prog 0 (from now on abbreviated as tuning 0/0)." (from FluidSynth/fluidsynth#102 (comment))

mts.zip

@Wohlstand
Copy link
Owner

Looks interesting, I need to learn this deeper.

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

No branches or pull requests

2 participants