Tuning systems support

Hi!

Ardour (and Mixbus :slight_smile: becoming better and better …
But one more thing can do even better :wink:

All known about many musical tunings (https://en.wikipedia.org/wiki/Musical_tuning),
but not many people use something besides Equal temperament.
And for those who can’t work with this always not fully tuned tuning system :wink:
very important anything that might help use a more proper tuning.

Of course this work more for external instruments and plugins,
but maybe it would be better if this will be a consistent solution to the whole ecosystem.

As I understand it, this is more an architectural decision that is not hard to implement at the host level,
and all the hard work is done by plugins.

For the simplest case (for chromatic scales) this can be done as follows:

  1. on host level
    1. in session settings
      1. global settings about used tuning system
        1. preset selector (Equal, Just intonation, Pythagorean, ...)
        2. editor
          1. scale settings
            1. list of note's ratios (may be from scala file (http://www.huygens-fokker.org/scala/scl_format.html) (for example: just-intonation.scl)
            2. root note (for example: C)
          2. frequency settings
            1. note (for example: A4)
            2. frequency in Hz (for example 440)
  2. on LV2 level
    1. transfer 1.1.1.2 data to plugin
    2. frequency table (note->frequency) generator library
  3. on plugins level
    1. in settings
      1. switch for using host settings (via LV2) OR own settings
      2. editor (enabled if own settings ON) (as 1.1.1.2)
    2. use 2.2 instead hardcoded Equal temperament frequencies
  4. plugins for scale correction on alien devices (hardware or software)
    1. for those that implements MIDI Tuning standard support
      1. in settings
        1. standard's selector (for example: "SCALE/OCTAVE TUNING 2-BYTE FORM (REAL-TIME)")
      2. generate SYSEX
      3. send it to the device (hmm ... at what point ?)
    2. for any equal tuned, via Pitch Bend correction (only 1 voice, but nice for mono synth, ...)
      1. in settings
        1. device Pitch Bend range (for example: 2 semitone)
      2. in realtime for each note generate Pitch Bend correction value (ideally, relative to the specified)

For a more general case (not chromatic scales) need to add a keyboard mapping (as in scala .kbm files)

Of course (4) can be implemented before (1)-(3), and subsequently to use the new features of LV2

Sorry for formatting, hierarchy as HTML lists looks strange :wink:

1 Like

This belongs in http://tracker.ardour.org. It will be forgotten if left in the forums. Thanks.

This is a chicken/egg. I don’t know any synth plugins that support scales other than equal temperament 12TET. Do you have some examples?

The first step would be to define a vocabulary and ontology of the settings as LV2 extension. Once a communication protocol is defined, host and plugin support can be commence. Lifting scala specs sounds like a good idea to me for that.

Then again, the only existing jack synths with custom tunings that I know of are Aeolus and setBfree. Both are organs, which model tuning peculiarities of their physical equivalents and I’m not sure if scala can describe that configuration.

On Mac, I know and use plenty of synths that support loading alternate tunings (usually, it seems, from Scala files). This seems to be the unofficial way to do things.

software on Linux:
u-he Zebra2, DIVA, ACE, Bazille
ZynAddSubFX, Yoshimi (as LV2)
SuperCollider
AlsaModularSynth

software on non Linux (as i know, but not tested):
Native Instruments Kontakt, Absynth, FM8
Spectrasonics Omnisphere

hardware:
probably all top Roland instruments
several Yamaha, KORG, Kurzweil
Moog SUB 37, MINITAUR
DSI Prophet 12, Prophet-6, OB-6
portal to the modular world - Mutable instruments Yarns

AND MANY, MANY MORE … :wink:
some listed in http://www.huygens-fokker.org/scala/

2 Likes

Hi everyone, I just had a random exchange on Hacker News with @paul and he mentioned interest in supporting truly flexible tuning within Ardour as a goal over the coming years.

I haven’t introduced myself formally, and I have many topics I could get into here if I prioritized participating. I am a musician, teacher, and FLO software and culture advocate. I have spent a good portion of 20 years engaging with issues of tuning, not just in math or temperament theory but also in terms of music cognition, practice, ethnomusicology and more.

The main thing I’m doing with Ardour and music these days is related to the Kite guitar https://kiteguitar.com/. Briefly: just under 3 years ago, my friend Kite discovered a miracle of coincidences that enabled our development of a new guitar (and potentially keyboard) tuning layout that achieves practical access to harmonies in a way nobody thought was possible for hundreds (thousands?) of years. It is based on 41edo (41 equal divisions of the octave) but splits the tuning across pairs of strings. The miracle is that there’s a sequence of all the more blended harmonic ratios from 9/8 to 11/8 (specifically: 9/8, 7/6, 6/5, 5/4, 9/7, 4/3, 11/8) that happen to be at every-other-pitch of 41edo (and every one tuned better than 12edo; unlike all the smaller edos whuch improve some tunings and worsen others). So, all these harmonies are available and stackable right under your fingers, and the nearby dissonant intervals of 41edo are moved out of the way but are still accessible in the right context.

We’re in the process of developing videos and explanations both to demonstrate the guitar fretting and to use it to explain tuning concepts that are so widely misunderstood or simply unknown to most people.

Anyway, I’m curious about the potential for Ardour having tuning support. My dream ideal would be to have something like Melodyne integrated with the audio tracks and capable of setting arbitrary pitches as the references. But I imagine the practical vision is focused on MIDI tracks.

The standard stuff for MIDI is now related to the features of MPE or of MIDI 2.0 (and there’s some concerns about the proprietary terms around that I think). Otherwise, there are workarounds that use pitch-bend and multiple channels for up to 16-tone polyphony with each channel playing only one pitch at a time. Or there are plugin synths that support tuning tables or similar, and the sequencer UI would simply do well to be able to visually adjust to show keys or labels that help with using various tuning systems.

Incidentally, a good reference for some tuning software on GNU/Linux (though not limited to FLO software) is Linux Archives - Sevish which at least mentions Ardour currently.

My actual ideal dream for a JI-focused sequencer is basically Rationale download | SourceForge.net but simply developed into a good product. That allows arbitrary pitches and then to set relative pitches. So, once a first pitch is set, a second pitch is specified in terms of the first. The second might be 11/8 of the first etc, so while anything arbitrary can be set, there’s the capacity to snap to harmonic ratios (or potentially to other defined relationships) between sets of pitches.

Incidentally, Musescore supports edos pretty well via https://github.com/euwbah/musescore-microtonal-edo-plugin and so it might be just a great thing if somehow MuseScore with that can work well with Ardour. And to a degree it already does, given simply putting things together via Jack. I haven’t tested the limits of this yet. Side-note: I’m quite troubled by the commercial directions of the Musescore project, not as commerce being bad but with approaches that are questionable and not community or FLO aligned… I deeply appreciate that Ardour is boldly dedicated to ethical values.

For the moment, Ardour meets my needs since I’m mostly working on recording Kite guitar audio and using Ardour for simple mixing and editing of audio.

Anyway, if @paul or anyone wants to get clearer on the issues with tuning, maybe just wait for us to finish our big explainer videos… but you might succeed at sucking me into a discussion (which should be on a linked topic, not here, as tuning concepts is more tangential and better for #uncategorized ).

Cheers,
Aaron

YESS !! :raised_hands:

Now, with MIDI 2, …

You may not have to wait. You could use Scala which has a 41TET definition, and use that with a synth in Ardour.

Ardour’s “ACE Fluidsynth” supports MIDI Tuning (MTS) messages, and there is a Lua script (“Scala to MIDI Tuning”) to send MTS messages from .scl files. Other synths (eg. surge) also directly support loading scl files.

see MIDI pitch adjustment - #13 by x42

The downside: Ardour’s Editor does not know the difference, and I expect that it can never know since only the synth has sufficient information, and will have to provide this to the host.

Sure, there’s already nothing stopping Ardour from at least having MIDI data which ends up outputting any tuning that a synth can generate. But the point is that Paul mentioned interest in Ardour supporting flexible tuning in the future. So, indeed, the question for this topic is what Ardour could eventually do to work to provide a more appropriate interface and user experience and potentially the dynamism that I mentioned such as a Rationale-style sequencer.