Configs

Helio uses several configuration files, such as: scales, in-scale chords, temperaments, hotkeys, colour schemes and translations.

Each configuration type can have up to three versions, which are loaded and merged in this order:

  • built-in into the executable,
  • latest updates fetched from helio.fm, which extend and override the built-in ones,
    • for example, translations, which is now the only resource updated in the runtime,
  • user’s configs, which extend and override the previous step
    • for example, arpeggiators that you create in the app,
    • or any other configuration you might add and fill by hand.

Built-in configs

Chords

This config lists all chords displayed in the chord tool:

{
  /*
    A number of chords that are easy to define with in-scale keys.
    Sharp or flat near the number simply works as a halftone up/down.
  */
  "chords": {
    "chord": [
      { "name": "3", "keys": "1 3 5" },
      { "name": "sus2", "keys": "1 2 5" },
      { "name": "sus4", "keys": "1 4 5" },
      //{ "name": "aug", "keys": "1 3 5#" },
      //{ "name": "dim", "keys": "1 3 5b" },
      { "name": "6", "keys": "1 3 5 6" },
      { "name": "7", "keys": "1 3 5 7" },
      { "name": "7 sus2", "keys": "1 2 5 7" },
      { "name": "7 sus4", "keys": "1 4 5 7" },
      { "name": "9", "keys": "1 3 5 7 9" },
      { "name": "add9", "keys": "1 3 5 9" },
      { "name": "add9 sus4", "keys": "1 4 5 9" },
      { "name": "add11", "keys": "1 3 5 11" }
    ]
  }
}

Temperaments

This file lists all available temperaments, to which you can switch your project:

{
  "temperaments": {
    "temperament": [
      {
        "id": "12edo",
        "name": "12 equal temperament",
        "period": "C/B# C#/Db D Eb/D# E/Fb F/E# F#/Gb G G#/Ab A Bb/A# B/Cb",
        "highlighting": "2 2 1 2 2 2 1",
        "chromaticMap": "1 1 1 1 1 1 1 1 1 1 1 1",
        "chromaticScale": [
          { "key": "A", "scale": "A A# B C C# D D# E F F# G G#" },
          { "key": "Ab", "scale": "Ab A Bb B C Db D Eb E F Gb G" },
          { "key": "A#", "scale": "A# B C C# D D# E F F# G G# A" },
          { "key": "B", "scale": "B C C# D D# E F F# G G# A A#" },
          { "key": "Bb", "scale": "Bb B C Db D Eb E F Gb G Ab A" },
          { "key": "B#", "scale": "B# C# D D# E F F# G G# A A# B" },
          { "key": "C", "scale": "C C# D D# E F F# G G# A A# B" },
          { "key": "Cb", "scale": "Cb C Db D Eb E F Gb G Ab A Bb" },
          { "key": "C#", "scale": "C# D D# E F F# G G# A A# B C" },
          { "key": "D", "scale": "D D# E F F# G G# A A# B C C#" },
          { "key": "Db", "scale": "Db D Eb E F Gb G Ab A Bb B C" },
          { "key": "D#", "scale": "D# E F F# G G# A A# B C C# D" },
          { "key": "E", "scale": "E F F# G G# A A# B C C# D D#" },
          { "key": "Eb", "scale": "Eb E F Gb G Ab A Bb B C Db D" },
          { "key": "E#", "scale": "E# F# G G# A A# B C C# D D# E" },
          { "key": "F", "scale": "F Gb G Ab A Bb B C Db D Eb E" },
          { "key": "Fb", "scale": "Fb F Gb G Ab A Bb B C Db D Eb" },
          { "key": "F#", "scale": "F# G G# A A# B C C# D D# E F" },
          { "key": "G", "scale": "G G# A A# B C C# D D# E F F#" },
          { "key": "Gb", "scale": "Gb G Ab A Bb B C Db D Eb E F" },
          { "key": "G#", "scale": "G# A A# B C C# D D# E F F# G" }
        ]
      },
      {
        "id": "19edo",
        "name": "19 equal temperament",
        "period": "C C# Cx D D# Eb E E# F F# Fx G G# Ab A A# Bb B B#",
        "highlighting": "2 1 2 1 2 2 1 2 1 2 2 1",
        "chromaticMap": "2 1 2 1 2 2 1 2 1 2 2 1"
      },
      {
        "id": "22edo",
        "name": "22 equal temperament",
        "period": "C ^C vC# C# D Eb ^Eb vE E F Gb ^Gb vG G Ab ^Ab vA A Bb ^Bb vB B",
        "highlighting": "3 1 3 1 3 1 1 3 1 3 1 1",
        "chromaticMap": "3 1 3 1 3 1 1 3 1 3 1 1"
      },
      {
        "id": "26edo",
        "name": "26 equal temperament",
        "period": "D D# Ebb Eb E E# Fb F F# Fx Gb G G# Gx Ab A A# Bbb Bb B B# Cb C C# Cx Db",
        "highlighting": "2 2 3 1 3 2 2 2 2 3 2 2",
        "chromaticMap": "2 2 3 1 3 2 2 2 2 3 2 2"
      },
      {
        "id": "31edo",
        "name": "31 equal temperament",
        "period": "C Dbb C# Db C## D Ebb D# Eb D## E Fb E# F Gbb F# Gb F## G Abb G# Ab G## A Bbb A# Bb A## B Cb B#",
        "highlighting": "2 3 3 2 3 2 3 2 3 3 2 3",
        "chromaticMap": "2 3 3 2 3 2 3 2 3 3 2 3"
      }
    ]
  }
}

Temperaments define how highlighting works in the piano roll, including octave size and key names, and which scales are available to choose from. Temperament description also provides a chromatic approximation, which is used as the “least common denominator” to be able to convert a piece from one temperament to another.

Temperaments allow to specify up to 3 enharmonic equivalents per key, and custom chromatic scale note namings for each enharmonic equivalent. This is to make note names more consistent with traditional notation language, although not ideal, because it only uses names from chromatic scales; in the context of diatonic scales, note names will still differ from traditional notation because the sequencer displays both the chromatic scale (the grid itself) and whatever scales within it (the highlighted rows) at the same time.

Scales

Scales listed here are available to choose from in the key signature dialog, and in the rescale tool. Scales with octave size mismatching the current temperament’s octave size are ignored.

{
  "scales": {
    "scale": [

      // 12 edo scales; source: "The Scale Omnibus"
      { "period": 12, "name": "Ionian", "intervals": "2 2 1 2 2 2 1" },
      { "period": 12, "name": "Aeolian", "intervals": "2 1 2 2 1 2 2" },
      { "period": 12, "name": "Lydian", "intervals": "2 2 2 1 2 2 1" },
      { "period": 12, "name": "Mixolydian", "intervals": "2 2 1 2 2 1 2" },
      { "period": 12, "name": "Dorian", "intervals": "2 1 2 2 2 1 2" },
      { "period": 12, "name": "Phrygian", "intervals": "1 2 2 2 1 2 2" },
      { "period": 12, "name": "Locrian", "intervals": "1 2 2 1 2 2 2" },
      { "period": 12, "name": "Melodic Major", "intervals": "2 2 1 2 1 2 2" },
      { "period": 12, "name": "Melodic Minor", "intervals": "2 1 2 2 2 2 1" },
      { "period": 12, "name": "Harmonic Major", "intervals": "2 2 1 2 1 3 1" },
      { "period": 12, "name": "Harmonic Minor", "intervals": "2 1 2 2 1 3 1" },
      { "period": 12, "name": "Hungarian Major", "intervals": "3 1 2 1 2 1 2" },
      { "period": 12, "name": "Hungarian Minor", "intervals": "2 1 1 3 1 3 1" },
      { "period": 12, "name": "Neapolitan Major", "intervals": "1 2 2 2 2 2 1" },
      { "period": 12, "name": "Neapolitan Minor", "intervals": "1 2 2 2 1 3 1" },
      { "period": 12, "name": "Romanian Major", "intervals": "1 3 2 1 2 1 2" },
      { "period": 12, "name": "Romanian Minor", "intervals": "2 1 3 1 2 1 2" },
      { "period": 12, "name": "Enigmatic", "intervals": "1 3 2 2 2 1 1" },
      { "period": 12, "name": "Enigmatic Minor", "intervals": "1 2 3 2 2 1 1" },
      { "period": 12, "name": "Ionian Augmented", "intervals": "2 2 1 3 1 2 1" },
      { "period": 12, "name": "Lydian Augmented", "intervals": "2 2 2 2 1 2 1" },
      { "period": 12, "name": "Lydian Diminished", "intervals": "2 1 3 1 2 2 1" },
      { "period": 12, "name": "Lydian Dominant", "intervals": "2 2 2 1 2 1 2" },
      { "period": 12, "name": "Mixolydian Augmented", "intervals": "2 2 1 3 1 1 2" },
      { "period": 12, "name": "Phrygian Dominant", "intervals": "1 3 1 2 1 2 2" },
      { "period": 12, "name": "Ultraphrygian", "intervals": "1 2 1 3 1 1 3" },
      { "period": 12, "name": "Locrian Dominant", "intervals": "1 3 1 1 2 2 2" },
      { "period": 12, "name": "Superlocrian", "intervals": "1 1 2 2 2 2 2" },
      { "period": 12, "name": "Ultralocrian", "intervals": "1 2 1 2 2 1 3" },
      { "period": 12, "name": "Major Locrian", "intervals": "2 2 1 1 2 2 2" },
      { "period": 12, "name": "Leading Whole-Tone", "intervals": "2 2 2 2 2 1 1" },
      { "period": 12, "name": "Double Harmonic", "intervals": "1 3 1 2 1 3 1" },
      { "period": 12, "name": "Half Diminished", "intervals": "2 1 2 1 2 2 2" },
      { "period": 12, "name": "Altered Dominant", "intervals": "1 2 1 2 2 2 2" },
      { "period": 12, "name": "Blues Heptatonic", "intervals": "2 1 2 1 3 1 2" },
      { "period": 12, "name": "Blues Phrygian", "intervals": "1 2 2 1 1 3 2" },
      { "period": 12, "name": "Blues Modified", "intervals": "2 1 2 1 1 3 2" },
      { "period": 12, "name": "Blues Mixed", "intervals": "3 1 1 1 1 3 2" },
      { "period": 12, "name": "Blues Leading Tone", "intervals": "3 2 1 1 3 1 1" },
      { "period": 12, "name": "Rock'n'Roll", "intervals": "3 1 1 2 2 1 2" },

      // 19 edo scales; source: https://en.xen.wiki/w/19edo_modes
      { "period": 19, "name": "Melodic Minor", "intervals": "2 3 2 3 3 3 3" },
      { "period": 19, "name": "Harmonic Minor", "intervals": "2 3 2 3 3 2 4" },
      { "period": 19, "name": "Harmonic Major", "intervals": "2 3 2 4 2 3 3" },
      { "period": 19, "name": "Deutone", "intervals": "1 3 3 3 3 3 3" },
      { "period": 19, "name": "Meantone", "intervals": "2 3 3 2 3 3 3" },
      { "period": 19, "name": "Ionian", "intervals": "3 3 2 3 3 3 2" },
      { "period": 19, "name": "Aeolian", "intervals": "3 2 3 3 2 3 3" },
      { "period": 19, "name": "Dorian", "intervals": "3 2 3 3 3 2 3" },
      { "period": 19, "name": "Lydian", "intervals": "3 3 3 2 3 3 2" },
      { "period": 19, "name": "Mixolydian", "intervals": "3 3 2 3 3 2 3" },
      { "period": 19, "name": "Locrian", "intervals": "2 3 3 2 3 3 3" },
      { "period": 19, "name": "Major Locrian", "intervals": "2 2 3 3 3 3 3" },
      { "period": 19, "name": "Phrygian", "intervals": "2 3 3 3 2 3 3 "},

      // 22 edo scales; source: https://en.xen.wiki/w/22edo
      { "period": 22, "name": "Harmonic Minor", "intervals": "4 2 3 4 2 5 2" },
      { "period": 22, "name": "Superpyth, diatonic", "intervals": "4 1 4 4 4 1 4" },
      { "period": 22, "name": "Just major", "intervals": "4 3 2 4 3 4 2" },
      { "period": 22, "name": "Natural minor", "intervals": "4 2 3 4 2 4 3" },
      { "period": 22, "name": "Tetrachordal major", "intervals": "4 3 2 4 4 3 2" },
      { "period": 22, "name": "Tetrachordal minor", "intervals": "4 2 3 4 2 3 4" },
      { "period": 22, "name": "Just harmonic minor", "intervals": "4 2 3 4 2 5 2" },
      { "period": 22, "name": "Just harmonic major", "intervals": "4 3 2 4 2 5 2" },
      { "period": 22, "name": "Just melodic minor", "intervals": "4 2 3 4 3 4 2" },
      { "period": 22, "name": "Superpyth harmonic minor", "intervals": "4 1 4 4 1 7 1" },
      { "period": 22, "name": "Superpyth harmonic major", "intervals": "4 4 1 4 1 7 1" },
      { "period": 22, "name": "Superpyth melodic minor", "intervals": "4 1 4 4 4 4 1" },
      { "period": 22, "name": "Superpyth double harmonic", "intervals": "1 7 1 4 1 7 1" },
      { "period": 22, "name": "Porcupine bright major", "intervals": "4 3 3 3 3 4 2" },
      { "period": 22, "name": "Porcupine bright minor", "intervals": "4 2 4 3 3 3 3" },
      { "period": 22, "name": "Porcupine dark minor", "intervals": "4 2 3 4 3 3 3" },

      // 26 edo scales; home-cooked approximations of 12-edo
      { "period": 26, "name": "Ionian", "intervals": "4 5 2 4 5 4 2" },
      { "period": 26, "name": "Aeolian", "intervals": "4 3 4 4 2 5 4" },
      { "period": 26, "name": "Lydian", "intervals": "4 5 4 2 5 4 2" },
      { "period": 26, "name": "Mixolydian", "intervals": "4 5 2 4 5 2 4" },
      { "period": 26, "name": "Dorian", "intervals": "4 3 4 4 5 2 4" },
      { "period": 26, "name": "Phrygian", "intervals": "2 5 4 4 2 5 4" },
      { "period": 26, "name": "Locrian", "intervals": "2 5 4 2 4 5 4" },
      { "period": 26, "name": "Melodic Major", "intervals": "4 5 2 4 2 5 4" },
      { "period": 26, "name": "Melodic Minor", "intervals": "4 3 4 4 5 4 2" },
      { "period": 26, "name": "Harmonic Major", "intervals": "4 5 2 4 2 7 2" },
      { "period": 26, "name": "Harmonic Minor", "intervals": "4 3 4 4 2 7 2" },
      { "period": 26, "name": "Neapolitan Major", "intervals": "2 5 4 4 5 4 2" },
      { "period": 26, "name": "Neapolitan Minor", "intervals": "2 5 4 4 2 7 2" },
      { "period": 26, "name": "Romanian Major", "intervals": "2 7 4 2 5 2 4" },
      { "period": 26, "name": "Romanian Minor", "intervals": "4 3 6 2 5 2 4" },

      // 31 edo scales; source: https://en.xen.wiki/w/31edo
      { "period": 31, "name": "Major", "intervals": "5 5 3 5 5 5 3" },
      { "period": 31, "name": "Natural Minor", "intervals": "5 3 5 5 3 5 5" },
      { "period": 31, "name": "Melodic Minor", "intervals": "5 3 5 5 5 5 3" },
      { "period": 31, "name": "Harmonic Major", "intervals": "5 5 3 5 3 7 3" },
      { "period": 31, "name": "Harmonic Minor", "intervals": "5 3 5 5 3 7 3" },
      { "period": 31, "name": "Major-Minor", "intervals": "5 5 3 5 3 5 5" },
      { "period": 31, "name": "Septimal Natural Minor", "intervals": "5 2 6 5 2 5 6" },
      { "period": 31, "name": "Neutral Diatonic Mixolydian", "intervals": "4 4 5 4 4 5 5" },
      { "period": 31, "name": "Neutral Diatonic Lydian", "intervals": "4 5 4 4 5 5 4" },
      { "period": 31, "name": "Neutral Diatonic Phrygian", "intervals": "5 4 4 5 5 4 4" },
      { "period": 31, "name": "Neutral Diatonic Dorian", "intervals": "4 4 5 5 4 4 5" },
      { "period": 31, "name": "Neutral Diatonic Hypolydian", "intervals": "4 5 5 4 4 5 4" },
      { "period": 31, "name": "Neutral Diatonic Hypophrygian", "intervals": "5 5 4 4 5 4 4" },
      { "period": 31, "name": "Neutral Diatonic Hypodorian", "intervals": "5 4 4 5 4 4 5" },
      { "period": 31, "name": "Hemiolic Chromatic Mixolydian", "intervals": "2 2 9 2 2 9 5" },
      { "period": 31, "name": "Hemiolic Chromatic Lydian", "intervals": "2 9 2 2 9 5 2" },
      { "period": 31, "name": "Hemiolic Chromatic Phrygian", "intervals": "9 2 2 9 5 2 2" },
      { "period": 31, "name": "Hemiolic Chromatic Dorian", "intervals": "2 2 9 5 2 2 9" },  
      { "period": 31, "name": "Hemiolic Chromatic Hypolydian", "intervals": "2 9 5 2 2 9 2" },
      { "period": 31, "name": "Hemiolic Chromatic Hypophrygian", "intervals": "9 5 2 2 9 2 2" },
      { "period": 31, "name": "Hemiolic Chromatic Hypodorian", "intervals": "5 2 2 9 2 2 9" },
      { "period": 31, "name": "Ratio 2:3 Chromatic Mixolydian", "intervals": "2 3 8 2 3 8 5" },
      { "period": 31, "name": "Ratio 2:3 Chromatic Lydian", "intervals": "3 8 2 3 8 5 2" },
      { "period": 31, "name": "Ratio 2:3 Chromatic Phrygian", "intervals": "8 2 3 8 5 2 3" },
      { "period": 31, "name": "Ratio 2:3 Chromatic Dorian", "intervals": "2 3 8 5 2 3 8" },
      { "period": 31, "name": "Ratio 2:3 Chromatic Hypolydian", "intervals": "3 8 5 2 3 8 2" },
      { "period": 31, "name": "Ratio 2:3 Chromatic Hypophrygian", "intervals": "8 5 2 3 8 2 3" },
      { "period": 31, "name": "Ratio 2:3 Chromatic Hypodorian", "intervals": "5 2 3 8 2 3 8" },
      { "period": 31, "name": "Intense Diatonic Mixolydian", "intervals": "3 5 5 3 5 5 5" },
      { "period": 31, "name": "Intense Diatonic Phrygian", "intervals": "5 3 5 5 5 3 5" },
      { "period": 31, "name": "Intense Diatonic Dorian", "intervals": "3 5 5 5 3 5 5" },
      { "period": 31, "name": "Intense Diatonic Hypolydian", "intervals": "5 5 5 3 5 5 3" },
      { "period": 31, "name": "Intense Diatonic Hypophrygian", "intervals": "5 5 3 5 5 3 5" },
      { "period": 31, "name": "Soft Diatonic Mixolydian", "intervals": "2 5 6 2 5 6 5" },
      { "period": 31, "name": "Soft Diatonic Lydian", "intervals": "5 6 2 5 6 5 2" },
      { "period": 31, "name": "Soft Diatonic Phrygian", "intervals": "6 2 5 6 5 2 5" },
      { "period": 31, "name": "Soft Diatonic Dorian", "intervals": "2 5 6 5 2 5 6" },
      { "period": 31, "name": "Soft Diatonic Hypolydian", "intervals": "5 6 5 2 5 6 2" },
      { "period": 31, "name": "Soft Diatonic Hypophrygian", "intervals": "6 5 2 5 6 2 5" },
      { "period": 31, "name": "Soft Diatonic Hypodorian", "intervals": "5 2 5 6 2 5 6" }
    ]
  }
}

Meters

Meters listed here are available to choose from in the time signature dialog.

Each meter comes with a metronome, which is described using “Oona Pana” scheme, suggested by Rods Bobavich - a simplified, but handy way to describe musical rhythms, which is also easy to read and edit manually.

Metronome schemes listed here are just the default ones, and they can be edited for each time signature separately in the time signature dialog.

{
  "meters": {
    "meter": [
      {
        "name": "Common time",
        "time": "4/4",
        "metronome": "oona pana"
      },
      {
        "name": "Alla breve",
        "time": "2/4",
        "metronome": "oona"
      },
      {
        "name": "Waltz time",
        "time": "3/4",
        "metronome": "oonapa"
      },
      {
        "time": "5/4",
        "metronome": "oonapa pana"
      },
      {
        "time": "6/4",
        "metronome": "oonapa panapa"
      },
      {
        "time": "7/8",
        "metronome": "oonapa pana papa"
      },
      {
        "time": "9/8",
        "metronome": "oonapa panapa panapa"
      },
      {
        "time": "10/8",
        "metronome": "oona panapa pana panapa"
      },
      {
        "time": "11/8",
        "metronome": "oona papa oona pana panapa"
      },
      {
        "time": "13/8",
        "metronome": "oonapa panapa panapa pana papa"
      }
    ]
  }
}

Hotkeys

See the hotkeys page.

Translations

The translations file is too big to be included here; if you want to help proofread and improve the translation for your native language, please follow this link.

The translations are updated in the runtime, if there are any changes: the latest translations are saved in the translations.helio file in the app’s config directory.

User configs

To override or extend the built-in data, you can create a file with one of these names in your projects directory:

  • chords.json
  • scales.json
  • meters.json
  • temperaments.json
  • etc.

Custom scales

The minimal content for scales.json is as follows:

{
  "scales": {
    "scale": [
      { "period": 12, "name": "Oriental", "intervals": "1 3 1 1 3 1 2" }
    ]
  }
}

What it means:

  • "period": 12 - this scale will be available only in twelve-tone projects,
  • "name": "Oriental" - scales are merged by name; if the built-in list contained a scale with such name, it would be replaced,
  • "intervals": "1 3 1 1 3 1 2" - successive intervals, in dieses (this one is a heptatonic scale, i.e. it contains 7 intervals).

Here’s the example config with additional heptatonic scales for 19-edo and 31-edo:

{
  "scales": {
    "scale": [
      { "name": "Deutone 0|6", "period": 19, "intervals": "1 3 3 3 3 3 3" },
      { "name": "Deutone 1|5", "period": 19, "intervals": "3 1 3 3 3 3 3" },
      { "name": "Deutone 2|4", "period": 19, "intervals": "3 3 1 3 3 3 3" },
      { "name": "Deutone 3|3", "period": 19, "intervals": "3 3 3 1 3 3 3" },
      { "name": "Deutone 4|2", "period": 19, "intervals": "3 3 3 3 1 3 3" },
      { "name": "Deutone 5|1", "period": 19, "intervals": "3 3 3 3 3 1 3" },
      { "name": "Deutone 6|0", "period": 19, "intervals": "3 3 3 3 3 3 1" },
      { "name": "Kleismic 0|6", "period": 19, "intervals": "1 4 1 4 1 4 4" },
      { "name": "Kleismic 1|5", "period": 19, "intervals": "1 4 1 4 4 1 4" },
      { "name": "Kleismic 2|4", "period": 19, "intervals": "1 4 4 1 4 1 4" },
      { "name": "Kleismic 3|3", "period": 19, "intervals": "4 1 4 1 4 1 4" },
      { "name": "Kleismic 4|2", "period": 19, "intervals": "4 1 4 1 4 4 1" },
      { "name": "Kleismic 5|1", "period": 19, "intervals": "4 1 4 4 1 4 1" },
      { "name": "Kleismic 6|0", "period": 19, "intervals": "4 4 1 4 1 4 1" },
      { "name": "Liese 0|6", "period": 19, "intervals": "1 1 1 7 1 1 7" },
      { "name": "Liese 1|5", "period": 19, "intervals": "1 1 7 1 1 1 7" },
      { "name": "Liese 2|4", "period": 19, "intervals": "1 1 7 1 1 7 1" },
      { "name": "Liese 3|3", "period": 19, "intervals": "1 7 1 1 1 7 1" },
      { "name": "Liese 4|2", "period": 19, "intervals": "1 7 1 1 7 1 1" },
      { "name": "Liese 5|1", "period": 19, "intervals": "7 1 1 1 7 1 1" },
      { "name": "Liese 6|0", "period": 19, "intervals": "7 1 1 7 1 1 1" },
      { "name": "Magic 0|6", "period": 19, "intervals": "1 1 5 1 5 1 5" },
      { "name": "Magic 1|5", "period": 19, "intervals": "1 5 1 1 5 1 5" },
      { "name": "Magic 2|4", "period": 19, "intervals": "1 5 1 5 1 1 5" },
      { "name": "Magic 3|3", "period": 19, "intervals": "1 5 1 5 1 5 1" },
      { "name": "Magic 4|2", "period": 19, "intervals": "5 1 1 5 1 5 1" },
      { "name": "Magic 5|1", "period": 19, "intervals": "5 1 5 1 1 5 1" },
      { "name": "Magic 6|0", "period": 19, "intervals": "5 1 5 1 5 1 1" },
      { "name": "Altered Dorian", "period": 31, "intervals": "5 3 5 5 5 4 4" },
      { "name": "Altered Neapolitan Major", "period": 31, "intervals": "3 5 5 5 5 4 4" },
      { "name": "AugmentedPlus", "period": 31, "intervals": "8 2 8 2 8 2 1" },
      { "name": "Enharmonic Dorian", "period": 31, "intervals": "1 2 10 5 1 2 10" },
      { "name": "Enharmonic Hypodorian", "period": 31, "intervals": "5 1 2 10 1 2 10" },
      { "name": "Enharmonic Hypolydian", "period": 31, "intervals": "2 10 5 1 2 10 1" },
      { "name": "Enharmonic Hypophrygian", "period": 31, "intervals": "10 5 1 2 10 1 2" },
      { "name": "Enharmonic Lydian", "period": 31, "intervals": "2 10 1 2 10 5 1" },
      { "name": "Enharmonic Mixolydian", "period": 31, "intervals": "1 2 10 1 2 10 5" },
      { "name": "Enharmonic Phrygian", "period": 31, "intervals": "10 1 2 10 5 1 2" },
      { "name": "Harmonic Series 7", "period": 31, "intervals": "6 5 5 4 4 4 3" },
      { "name": "Harrison Major", "period": 31, "intervals": "5 6 2 5 5 6 2" },
      { "name": "Hyperblue Dorian", "period": 31, "intervals": "8 5 2 3 6 2 5" },
      { "name": "Hyperblue Harmonic", "period": 31, "intervals": "8 5 2 3 2 9 2" },
      { "name": "Hypermavila", "period": 31, "intervals": "8 3 3 8 3 3 3" },
      { "name": "Maqam Bayati", "period": 31, "intervals": "4 4 5 5 3 5 5" },
      { "name": "Maqam Rast", "period": 31, "intervals": "5 4 4 5 5 4 4" },
      { "name": "Neutral[7]", "period": 31, "intervals": "4 5 4 5 4 5 4" },
      { "name": "Phrygian Harmonic", "period": 31, "intervals": "2 8 3 5 2 5 6" },
      { "name": "Scorp", "period": 31, "intervals": "5 4 5 3 5 4 5" },
      { "name": "Screamapillar", "period": 31, "intervals": "5 5 4 4 5 5 3" },
      { "name": "Sheimanic", "period": 31, "intervals": "4 4 4 4 5 5 5" },
      { "name": "Subminor Altered", "period": 31, "intervals": "2 5 3 5 5 5 6" },
      { "name": "Thaiic", "period": 31, "intervals": "4 5 5 4 4 4 5" },
      { "name": "Tropical Major", "period": 31, "intervals": "5 7 1 5 7 5 1" },
      { "name": "Turkish Major", "period": 31, "intervals": "5 5 3 5 4 5 4" }
    ]
  }
}

Custom temperaments

To add a temperament, create temperaments.json; for example, let’s add 24-EDO:

{
  "temperaments": {
    "temperament": [
      {
        "id": "24edo",
        "name": "24 equal temperament",
        "period": "C ^C C# vD D ^D Eb vE E ^E F ^F F# vG G ^G Ab vA A ^A Bb vB B ^B",
		"periodRange": 2.0,
        "highlighting": "3 4 3 4 3 4 3",
        "chromaticMap": "2 2 2 2 2 2 2 2 2 2 2 2"
      }
    ]
  }
}

What it means:

  • id - if the built-in list contained a temperament with such id, it would be replaced,
  • name - this is displayed in the menus,
  • period - key names separated by whitespace; the number of keys defines the octave size,
  • periodRange - the pitch range that makes up a period, defaults 2.0 representing one octave; for nonoctave tunings use 3.0 for the duodecime used in the Bohlen-Pierce tuning or 1.5 for the pure fifth, used in the Carlos Alpha, Beta and Gamma tunings; for backward compatibility, if this parameter isn’t given, Helio assumes one octave; this parameter only affects the built-in instrument at the moment,
  • highlighting - the default highlighting scheme in the piano roll, i.e. which rows are highlighted as “white keys” by default,
  • chromaticMap - this is used to convert temperaments; here, since 24-EDO just divides the 12-tone semitone in two, the chromatic map just jumps over quarter-tones.

You might want to add some scales for it, for example:

{
  "scales": {
    "scale": [
      // append this list to your scales:
      { "period": 24, "name": "Maqam Nahfat", "intervals": "3 3 4 4 4 2 4" },
      { "period": 24, "name": "Maqam Saba", "intervals": "3 3 2 6 2 4 4" },
      { "period": 24, "name": "Maqam Sabr Jadid", "intervals": "3 3 2 6 2 6 2" }
      // etc, etc.
      // (source: https://en.xen.wiki/w/24edo)
    ]
  }
}

Custom colour schemes

To add your theme to the built-in themes, put a colourSchemes.json file in your projects directory. Here’s an example:

{
  "colourSchemes": {
    "colourScheme": [
      {
        "name": "Tonsky Mode",
        "colourMap":
        {
          "text": "ff000000",
          "headlineFill": "fffddb29",
          "pageFill": "fffddb29",
          "sidebarFill": "fffddb29",
          "dialogFill": "fffddb29",
          "lassoFill": "aaf9b579",
          "lassoBorder": "55000000",
          "buttonFill": "18000000",
          "frameBorder": "58000000",
          "whiteKey": "fffddb29",
          "blackKey": "fffdce29",
          "bar": "ff978717",
          "row": "fffbc851",
          "timeline": "fffddb29",
          "iconBase": "5f000000",
          "iconShadow": "27fde258"
        }
      }
    ]
  }
}