{
 "firmware": "winampFM Synth",
 "slug": "winampfm",
 "author": "Hericdk, based on SLOOP by isod89 and Felucca by Leo Kuroshita (Hügelton Instruments)",
 "repo": "https://github.com/hericdk/winampFM",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "v0.12",
 "mapped_commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
 "release_date": "2026-10-14",
 "date_mapped": "2026-10-17",
 "status": "Independently checked: zero errors in round 3 (2026-10-17). No device testing.",
 "turns_it_into": "A four-track groovebox with a Winamp-style player, cassette sound previews, live effects and 28 full-screen visualizers.",
 "docs": [
  {
   "title": "README.md",
   "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/README.md",
   "words": 1009,
   "read_at": "v0.12 at 54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "title": "Firmware site at the mapped commit",
   "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/index.html",
   "read_at": "2026-10-17; local tag snapshot, not the live site"
  }
 ],
 "install": {
  "official": "https://hericdk.github.io/winampFM/",
  "hub": "https://thefirmwarehub.com/"
 },
 "part_id_notes": "SEL is B_SCL in this source. The C sources are nested under firmware/firmware/src. The default panel table binds each printed label to its matrix position; saved compatible panel tables can override that mapping. Lights use button part ids and grouped key_lights, with individual key-light parts in groups.key_lights. The firmware addresses one PLAY matrix lamp and has no separate green-lamp instruction. Jacks are described separately because their connections are not panel gestures.",
 "modes": [
  {
   "id": "player_playlist",
   "name": "Player: PLAYLIST",
   "how_to_get_there": "Tap HOME from EFFECTS.",
   "what_it_is": "The player shows the sound bank below the transport, spectrum and four tracks; PRESETS changes the selected track sound.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5387-5394",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5165-5205",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5165-L5205"
    }
   ]
  },
  {
   "id": "effects_send",
   "name": "Player: SEND",
   "how_to_get_there": "Use SELECT on EFFECTS to choose SEND.",
   "what_it_is": "Distortion, chorus, delay and reverb amounts for the selected track. The same knob jobs remain while a visualizer is open or PLAYLIST is showing.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "90-100",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L100"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "142-199",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L142-L199"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5397-5451",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
    }
   ]
  },
  {
   "id": "effects_space",
   "name": "Player: SPACE",
   "how_to_get_there": "Use SELECT on EFFECTS to choose SPACE.",
   "what_it_is": "Shared delay time, feedback, reverb size and damping. The same knob jobs remain while a visualizer is open or PLAYLIST is showing.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "90-100",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L100"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "142-199",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L142-L199"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5397-5451",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
    }
   ]
  },
  {
   "id": "effects_master",
   "name": "Player: MASTER",
   "how_to_get_there": "Use SELECT on EFFECTS to choose MASTER.",
   "what_it_is": "Shared DJ filter, dust, kick ducking and tempo. The same knob jobs remain while a visualizer is open or PLAYLIST is showing.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "90-100",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L100"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "142-199",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L142-L199"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5397-5451",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
    }
   ]
  },
  {
   "id": "effects_party",
   "name": "Player: PARTY",
   "how_to_get_there": "Use SELECT on EFFECTS to choose PARTY.",
   "what_it_is": "Chooses which tracks are heard and how that group moves through the song; these choices are live session state. The same knob jobs remain while a visualizer is open or PLAYLIST is showing.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "90-100",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L100"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "142-199",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L142-L199"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5397-5451",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
    }
   ]
  },
  {
   "id": "effects_track",
   "name": "Player: TRACK",
   "how_to_get_there": "Use SELECT on EFFECTS to choose TRACK.",
   "what_it_is": "Selected track level, pattern length and pan, plus shared swing. The same knob jobs remain while a visualizer is open or PLAYLIST is showing.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "90-100",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L100"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "142-199",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L142-L199"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5397-5451",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
    }
   ]
  },
  {
   "id": "visual_window",
   "name": "Visualizer window",
   "how_to_get_there": "Tap HOME after PLAYLIST.",
   "what_it_is": "SELECT chooses SCOPE, BARS, MILK, RAYS, SHIP, RACER or DRIVE; the retained effects group still owns KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "101-105",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L101-L105"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5387-5417",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5417"
    }
   ]
  },
  {
   "id": "visual_full",
   "name": "Full-screen visualizer",
   "how_to_get_there": "Tap HOME from the visualizer window.",
   "what_it_is": "SELECT chooses among 28 animated scenes; the retained effects group still owns KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "1234-1248",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5387-5417",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5417"
    }
   ]
  },
  {
   "id": "tapes",
   "name": "TAPES",
   "how_to_get_there": "Hold PLAY for 0.7 seconds outside a menu, layer, armed recording or free take, or tap HOME from the full-screen visualizer.",
   "what_it_is": "Audition sounds and their example phrases, then copy one into the chosen track with SEL.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "1133-1153",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1133-L1153"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5387-5394",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "287-335",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L335"
    }
   ]
  },
  {
   "id": "recorder_arm",
   "name": "Recorder: armed",
   "how_to_get_there": "Press REC while stopped outside SONG.",
   "what_it_is": "Choose free timing or tempo recording; notes or PLAY begin according to START.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_studio.c",
     "lines": "122-140",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L122-L140"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "996-1025",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L996-L1025"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "1186-1204",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1186-L1204"
    }
   ]
  },
  {
   "id": "recorder_take",
   "name": "Recorder: free take",
   "how_to_get_there": "Arm REC in an empty project with MODE FREE, then play a note.",
   "what_it_is": "Captures up to 192 note events over at most 24 seconds; REC closes the loop and PLAY discards the take.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "631-645",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L631-L645"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "887-955",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L887-L955"
    }
   ]
  },
  {
   "id": "count_in",
   "name": "Recorder: count-in",
   "how_to_get_there": "Choose START COUNT while armed for tempo recording and press PLAY.",
   "what_it_is": "Four clicks precede recording; another PLAY cancels the count and leaves recording armed.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "2404-2448",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2404-L2448"
    }
   ]
  },
  {
   "id": "usb_rescue",
   "name": "USB rescue",
   "how_to_get_there": "Switch on with physical OCT- held alone, or let the boot guard enter rescue automatically after two consecutive failed starts retained across resets.",
   "what_it_is": "USB rescue skips normal project, sample and settings startup; a fresh power-on clears the failed-start count, while another reset from rescue falls back to the ROM loader.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/bootguard.h",
     "lines": "27-29",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/bootguard.h#L27-L29"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/recovery.c",
     "lines": "41-69",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/recovery.c#L41-L69"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/bootguard.h",
     "lines": "15-29",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/bootguard.h#L15-L29"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/main.c",
     "lines": "335-358",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L335-L358"
    }
   ]
  },
  {
   "id": "update_mode",
   "name": "USB update mode",
   "how_to_get_there": "With playback stopped, hold OCT- and OCT+ together for more than five seconds.",
   "what_it_is": "Pending sections, settings and a changed working project are saved before USB update mode; on synth tracks outside menus this can include the send reset triggered earlier in the same hold, which releasing early does not reverse.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/main.c",
     "lines": "243-270",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L243-L270"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "1039-1051",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1039-L1051"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "1048-1057",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1048-L1057"
    }
   ]
  },
  {
   "id": "keys_synth",
   "name": "Synth keys",
   "how_to_get_there": "Select a synth track outside any held layer.",
   "what_it_is": "Keys follow the selected engine, octave, transpose and scale mapping, including while a menu or TAPES is open. Track 3’s copied percussion tape instead uses the one-percussion-sound key context.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "179-248",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/voice.c",
     "lines": "411-413",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
    }
   ]
  },
  {
   "id": "keys_chord",
   "name": "Chord keys",
   "how_to_get_there": "Choose a chord type on a scaled synth track with SEL held and KNOB 1.",
   "what_it_is": "White keys play chords; black keys modify held chords, with POWER responding only to inversion.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "250-298",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L298"
    }
   ]
  },
  {
   "id": "keys_drums",
   "name": "Drum keys",
   "how_to_get_there": "Select the drum track outside its GRID page and any held layer.",
   "what_it_is": "White keys play sixteen lanes and black keys repeat the lane to their left.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/drums.c",
     "lines": "60-108",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
    }
   ]
  },
  {
   "id": "keys_step_entry",
   "name": "STEP note entry",
   "how_to_get_there": "Open the synth STEP page with step entry enabled, without recording, recording armed or a free take.",
   "what_it_is": "Keys enter notes at the cursor; the four STEP page knobs are described with that page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "730-776",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L776"
    }
   ]
  },
  {
   "id": "held_fx",
   "name": "Punch effects",
   "how_to_get_there": "Hold FX. Tap HOME while held to leave the layer open.",
   "what_it_is": "Keys temporarily process the whole mix.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "493-502",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L493-L502"
    }
   ]
  },
  {
   "id": "held_edit",
   "name": "Erase",
   "how_to_get_there": "Hold EDIT. Tap HOME while held to leave the layer open.",
   "what_it_is": "Keys remove notes or drum hits without a confirmation.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "50-106",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
    }
   ]
  },
  {
   "id": "held_edit_mute",
   "name": "Drum lane mutes",
   "how_to_get_there": "Hold EDIT. Press a black key on the drum track. Tap HOME while held to leave the layer open.",
   "what_it_is": "White keys toggle temporary drum lane mutes after a black key changes EDIT to mute mode.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "736-788",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L736-L788"
    }
   ]
  },
  {
   "id": "held_arp",
   "name": "Repeat",
   "how_to_get_there": "Hold ARP. Tap HOME while held to leave the layer open.",
   "what_it_is": "Keys repeat single synth notes or drum hits, with at most four rolls together.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "511-514",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L511-L514"
    }
   ]
  },
  {
   "id": "held_seq",
   "name": "Step keys",
   "how_to_get_there": "Hold SEQ. Tap HOME while held to leave the layer open.",
   "what_it_is": "White keys set or remove steps, and four black keys choose the page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "108-179",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L108-L179"
    }
   ]
  },
  {
   "id": "held_seq_steps",
   "name": "Held step edit",
   "how_to_get_there": "Hold SEQ. Hold one or more white step keys. Tap HOME while held to leave the layer open.",
   "what_it_is": "With white step keys held, knobs edit those steps and PRESETS edits their parameter locks.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "180-303",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L180-L303"
    }
   ]
  },
  {
   "id": "held_sel",
   "name": "Key and scale",
   "how_to_get_there": "Hold SEL. Tap HOME while held to leave the layer open.",
   "what_it_is": "Keys set the root across the three synth tracks.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "352-357",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
    }
   ]
  },
  {
   "id": "held_glo",
   "name": "Track mix",
   "how_to_get_there": "Hold GLO. Tap HOME while held to leave the layer open.",
   "what_it_is": "Keys mute or solo tracks, trigger fills, tap tempo and enable MIDI learn.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "420-435",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
    }
   ]
  },
  {
   "id": "held_save",
   "name": "Sections and song",
   "how_to_get_there": "Hold SAVE. Tap HOME while held to leave the layer open.",
   "what_it_is": "Keys recall or store four projects as sections and record their playing order.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "359-456",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L456"
    }
   ]
  },
  {
   "id": "layer_locked",
   "name": "Layer locked open",
   "how_to_get_there": "Tap HOME while holding a layer button.",
   "what_it_is": "The layer stays after release; most other buttons close it and consume their press.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "849-909",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L849-L909"
    }
   ]
  },
  {
   "id": "page_tabs",
   "name": "Parameter tabs",
   "how_to_get_there": "Tap a function button briefly; most change tabs when released, while ENV and LFO act on press.",
   "what_it_is": "The lower window contains the current page, its four knob values and its family tabs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "387-429",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L387-L429"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "798-846",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L846"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "1273-1278",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1273-L1278"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_env",
   "name": "ENV tab",
   "how_to_get_there": "Tap ENV to open its tabs, then tap it again or turn SELECT to ENV.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "388",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L388"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_env_dest",
   "name": "ENV DEST tab",
   "how_to_get_there": "Tap ENV to open its tabs, then tap it again or turn SELECT to ENV DEST.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "389",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L389"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_lfo",
   "name": "LFO tab",
   "how_to_get_there": "Tap LFO to open its tabs, then tap it again or turn SELECT to LFO.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "391",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L391"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_lfo2",
   "name": "LFO 2 tab",
   "how_to_get_there": "Tap LFO to open its tabs, then tap it again or turn SELECT to LFO 2.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "392",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L392"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_lfo_dest",
   "name": "LFO DEST tab",
   "how_to_get_there": "Tap LFO to open its tabs, then tap it again or turn SELECT to LFO DEST.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "393",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L393"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_fx",
   "name": "FX tab",
   "how_to_get_there": "Tap FX to open its tabs, then tap it again or turn SELECT to FX.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "394",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L394"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_slicer",
   "name": "SLICER tab",
   "how_to_get_there": "Tap FX to open its tabs, then tap it again or turn SELECT to SLICER.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "395",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L395"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_delay",
   "name": "DLY tab",
   "how_to_get_there": "Tap FX to open its tabs, then tap it again or turn SELECT to DLY.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "397",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L397"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_reverb_chorus",
   "name": "REV/CHO tab",
   "how_to_get_there": "Tap FX to open its tabs, then tap it again or turn SELECT to REV/CHO.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "398",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L398"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_filter_mix",
   "name": "FILT/MIX tab",
   "how_to_get_there": "Tap FX to open its tabs, then tap it again or turn SELECT to FILT/MIX.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "399",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L399"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_sel",
   "name": "SEL tab",
   "how_to_get_there": "Tap SEL to open its tabs, then tap it again or turn SELECT to SEL.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "400",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L400"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_sel2",
   "name": "SEL 2 tab",
   "how_to_get_there": "Tap SEL to open its tabs, then tap it again or turn SELECT to SEL 2.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "401",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L401"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_analog_filter",
   "name": "FILTER (ANALOG) tab",
   "how_to_get_there": "Tap EDIT to open its tabs, then tap it again or turn SELECT to FILTER (ANALOG).",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track. It is reachable only on ANALOG.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "404",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L404"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_voice",
   "name": "VOICE tab",
   "how_to_get_there": "Tap EDIT to open its tabs, then tap it again or turn SELECT to VOICE.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "406",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L406"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_voice2",
   "name": "VOICE 2 tab",
   "how_to_get_there": "Tap EDIT to open its tabs, then tap it again or turn SELECT to VOICE 2.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "407",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L407"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_global",
   "name": "GLOBAL tab",
   "how_to_get_there": "Tap GLO to open its tabs, then tap it again or turn SELECT to GLOBAL.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "408",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L408"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_master",
   "name": "MASTER tab",
   "how_to_get_there": "Tap GLO to open its tabs, then tap it again or turn SELECT to MASTER.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "409",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L409"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_system",
   "name": "SYSTEM tab",
   "how_to_get_there": "Tap GLO to open its tabs, then tap it again or turn SELECT to SYSTEM.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "410",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L410"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_drum_settings",
   "name": "DRUMS settings tab",
   "how_to_get_there": "Tap GLO to open its tabs, then tap it again or turn SELECT to DRUMS settings.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "411",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L411"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_midi",
   "name": "MIDI tab",
   "how_to_get_there": "Tap GLO to open its tabs, then tap it again or turn SELECT to MIDI.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "412",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L412"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_midi2",
   "name": "MIDI 2 tab",
   "how_to_get_there": "Tap GLO to open its tabs, then tap it again or turn SELECT to MIDI 2.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "413",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L413"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_texture",
   "name": "TEXTURE tab",
   "how_to_get_there": "Tap GLO to open its tabs, then tap it again or turn SELECT to TEXTURE.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "416",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L416"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_texture2",
   "name": "TEXTURE 2 tab",
   "how_to_get_there": "Tap GLO to open its tabs, then tap it again or turn SELECT to TEXTURE 2.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "417",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L417"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_arp",
   "name": "ARP tab",
   "how_to_get_there": "Tap ARP to open its tabs, then tap it again or turn SELECT to ARP.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "422",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L422"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_arp2",
   "name": "ARP 2 tab",
   "how_to_get_there": "Tap ARP to open its tabs, then tap it again or turn SELECT to ARP 2.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4. This tab has no editable values on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "423",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L423"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_pattern",
   "name": "PATTERN tab",
   "how_to_get_there": "Tap SEQ to open its tabs, then tap it again or turn SELECT to PATTERN.",
   "what_it_is": "Four parameter columns controlled by KNOB 1–4.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "425",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L425"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "432-466",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L432-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4630-4704",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
    }
   ]
  },
  {
   "id": "page_insert_off",
   "name": "INSERT: OFF",
   "how_to_get_there": "Open the FX tabs and select INSERT; KNOB 1 chooses OFF.",
   "what_it_is": "The insert’s next three knobs change meaning with its type; the drum track also supports this tab.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "396",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "200-226",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "435-442",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L435-L442"
    }
   ]
  },
  {
   "id": "page_insert_drive",
   "name": "INSERT: SOFT/HARD/FOLD/FUZZ",
   "how_to_get_there": "Open the FX tabs and select INSERT; KNOB 1 chooses SOFT/HARD/FOLD/FUZZ.",
   "what_it_is": "The insert’s next three knobs change meaning with its type; the drum track also supports this tab.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "396",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "200-226",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "435-442",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L435-L442"
    }
   ]
  },
  {
   "id": "page_insert_crush",
   "name": "INSERT: CRUSH",
   "how_to_get_there": "Open the FX tabs and select INSERT; KNOB 1 chooses CRUSH.",
   "what_it_is": "The insert’s next three knobs change meaning with its type; the drum track also supports this tab.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "396",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "200-226",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "435-442",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L435-L442"
    }
   ]
  },
  {
   "id": "page_insert_sweep",
   "name": "INSERT: PHASR/FLANG/CHOR",
   "how_to_get_there": "Open the FX tabs and select INSERT; KNOB 1 chooses PHASR/FLANG/CHOR.",
   "what_it_is": "The insert’s next three knobs change meaning with its type; the drum track also supports this tab.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "396",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "200-226",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "435-442",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L435-L442"
    }
   ]
  },
  {
   "id": "edit_analog_1",
   "name": "EDIT 1: ANALOG",
   "how_to_get_there": "Select a synth track using ANALOG, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_analog.c",
     "lines": "164-171",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L164-L171"
    }
   ]
  },
  {
   "id": "edit_analog_2",
   "name": "EDIT 2: ANALOG",
   "how_to_get_there": "Select a synth track using ANALOG, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_analog.c",
     "lines": "164-171",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L164-L171"
    }
   ]
  },
  {
   "id": "edit_digital_1",
   "name": "EDIT 1: DIGITAL",
   "how_to_get_there": "Select a synth track using DIGITAL, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_digital.c",
     "lines": "148-155",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L148-L155"
    }
   ]
  },
  {
   "id": "edit_digital_2",
   "name": "EDIT 2: DIGITAL",
   "how_to_get_there": "Select a synth track using DIGITAL, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_digital.c",
     "lines": "148-155",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L148-L155"
    }
   ]
  },
  {
   "id": "edit_phase_1",
   "name": "EDIT 1: PHASE",
   "how_to_get_there": "Select a synth track using PHASE, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_phase.c",
     "lines": "188-195",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L188-L195"
    }
   ]
  },
  {
   "id": "edit_phase_2",
   "name": "EDIT 2: PHASE",
   "how_to_get_there": "Select a synth track using PHASE, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_phase.c",
     "lines": "188-195",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L188-L195"
    }
   ]
  },
  {
   "id": "edit_lofi_1",
   "name": "EDIT 1: LOFI",
   "how_to_get_there": "Select a synth track using LOFI, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_lofi.c",
     "lines": "221-228",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L221-L228"
    }
   ]
  },
  {
   "id": "edit_lofi_2",
   "name": "EDIT 2: LOFI",
   "how_to_get_there": "Select a synth track using LOFI, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_lofi.c",
     "lines": "221-228",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L221-L228"
    }
   ]
  },
  {
   "id": "edit_sample_1",
   "name": "EDIT 1: SAMPLE",
   "how_to_get_there": "Select a synth track using SAMPLE, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_sample.c",
     "lines": "207-214",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L207-L214"
    }
   ]
  },
  {
   "id": "edit_sample_2",
   "name": "EDIT 2: SAMPLE",
   "how_to_get_there": "Select a synth track using SAMPLE, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_sample.c",
     "lines": "207-214",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L207-L214"
    }
   ]
  },
  {
   "id": "edit_voice_1",
   "name": "EDIT 1: VOICE",
   "how_to_get_there": "Select a synth track using VOICE, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_formant.c",
     "lines": "230-237",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L230-L237"
    }
   ]
  },
  {
   "id": "edit_voice_2",
   "name": "EDIT 2: VOICE",
   "how_to_get_there": "Select a synth track using VOICE, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_formant.c",
     "lines": "230-237",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L230-L237"
    }
   ]
  },
  {
   "id": "edit_trio_1",
   "name": "EDIT 1: TRIO",
   "how_to_get_there": "Select a synth track using TRIO, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_trio.c",
     "lines": "383-390",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L383-L390"
    }
   ]
  },
  {
   "id": "edit_trio_2",
   "name": "EDIT 2: TRIO",
   "how_to_get_there": "Select a synth track using TRIO, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_trio.c",
     "lines": "383-390",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L383-L390"
    }
   ]
  },
  {
   "id": "edit_wheel_1",
   "name": "EDIT 1: WHEEL",
   "how_to_get_there": "Select a synth track using WHEEL, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_drawbar.c",
     "lines": "286-293",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L286-L293"
    }
   ]
  },
  {
   "id": "edit_wheel_2",
   "name": "EDIT 2: WHEEL",
   "how_to_get_there": "Select a synth track using WHEEL, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_drawbar.c",
     "lines": "286-293",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L286-L293"
    }
   ]
  },
  {
   "id": "edit_grain_1",
   "name": "EDIT 1: GRAIN",
   "how_to_get_there": "Select a synth track using GRAIN, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_grain.c",
     "lines": "439-446",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L439-L446"
    }
   ]
  },
  {
   "id": "edit_grain_2",
   "name": "EDIT 2: GRAIN",
   "how_to_get_there": "Select a synth track using GRAIN, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_grain.c",
     "lines": "439-446",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L439-L446"
    }
   ]
  },
  {
   "id": "edit_fm6_1",
   "name": "EDIT 1: FM6",
   "how_to_get_there": "Select a synth track using FM6, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_fm6.c",
     "lines": "370-377",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L370-L377"
    }
   ]
  },
  {
   "id": "edit_fm6_2",
   "name": "EDIT 2: FM6",
   "how_to_get_there": "Select a synth track using FM6, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_fm6.c",
     "lines": "370-377",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L370-L377"
    }
   ]
  },
  {
   "id": "edit_phys_1",
   "name": "EDIT 1: PHYS",
   "how_to_get_there": "Select a synth track using PHYS, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_phys.c",
     "lines": "267-274",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L267-L274"
    }
   ]
  },
  {
   "id": "edit_phys_2",
   "name": "EDIT 2: PHYS",
   "how_to_get_there": "Select a synth track using PHYS, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_phys.c",
     "lines": "267-274",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L267-L274"
    }
   ]
  },
  {
   "id": "edit_noise_1",
   "name": "EDIT 1: NOISE",
   "how_to_get_there": "Select a synth track using NOISE, then open EDIT 1.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_noise.c",
     "lines": "263-270",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L263-L270"
    }
   ]
  },
  {
   "id": "edit_noise_2",
   "name": "EDIT 2: NOISE",
   "how_to_get_there": "Select a synth track using NOISE, then open EDIT 2.",
   "what_it_is": "Four engine-specific values; EDIT keeps the page title while the knob labels follow the engine.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "402-403",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_noise.c",
     "lines": "263-270",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L263-L270"
    }
   ]
  },
  {
   "id": "edit_lofi_wram",
   "name": "EDIT 1: LOFI wave RAM",
   "how_to_get_there": "On LOFI EDIT 1 set WAVE to WRAM.",
   "what_it_is": "Only the changed knob jobs are listed here; the other controls keep their engine tab jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_lofi.c",
     "lines": "42-56",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    }
   ]
  },
  {
   "id": "edit_lofi_step",
   "name": "EDIT 1: LOFI stepped envelope",
   "how_to_get_there": "On LOFI EDIT 1 set CHIP to STEP.",
   "what_it_is": "Only the changed knob jobs are listed here; the other controls keep their engine tab jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_lofi.c",
     "lines": "42-56",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    }
   ]
  },
  {
   "id": "edit_noise_lfsr",
   "name": "EDIT 2: NOISE LFSR",
   "how_to_get_there": "Set NOISE MODE to LFSR and open EDIT 2.",
   "what_it_is": "Only the changed knob jobs are listed here; the other controls keep their engine tab jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_noise.c",
     "lines": "20-52",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    }
   ]
  },
  {
   "id": "edit_noise_meta",
   "name": "EDIT 2: NOISE META",
   "how_to_get_there": "Set NOISE MODE to META and open EDIT 2.",
   "what_it_is": "Only the changed knob jobs are listed here; the other controls keep their engine tab jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_noise.c",
     "lines": "20-52",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    }
   ]
  },
  {
   "id": "edit_phys_memb1",
   "name": "EDIT 1: PHYS membrane",
   "how_to_get_there": "Set PHYS MODEL to MEMB and open EDIT 1.",
   "what_it_is": "Only the changed knob jobs are listed here; the other controls keep their engine tab jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_phys.c",
     "lines": "18-27",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    }
   ]
  },
  {
   "id": "edit_phys_memb2",
   "name": "EDIT 2: PHYS membrane",
   "how_to_get_there": "Set PHYS MODEL to MEMB and open EDIT 2.",
   "what_it_is": "Only the changed knob jobs are listed here; the other controls keep their engine tab jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_phys.c",
     "lines": "18-27",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    }
   ]
  },
  {
   "id": "edit_phys_symp1",
   "name": "EDIT 1: PHYS sympathetic strings",
   "how_to_get_there": "Set PHYS MODEL to SYMP and open EDIT 1.",
   "what_it_is": "Only the changed knob jobs are listed here; the other controls keep their engine tab jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_phys.c",
     "lines": "18-27",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    }
   ]
  },
  {
   "id": "edit_phys_symp2",
   "name": "EDIT 2: PHYS sympathetic strings",
   "how_to_get_there": "Set PHYS MODEL to SYMP and open EDIT 2.",
   "what_it_is": "Only the changed knob jobs are listed here; the other controls keep their engine tab jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/eng_phys.c",
     "lines": "18-27",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "222-234",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
    }
   ]
  },
  {
   "id": "page_presets",
   "name": "PRESETS browser",
   "how_to_get_there": "Tap SAVE on a parameter tab, then select PRESETS.",
   "what_it_is": "A list of sounds across engines, followed by occupied user sound slots; this page does not edit the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "418",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L418"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "551-560",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L551-L560"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "1286-1295",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1295"
    }
   ]
  },
  {
   "id": "page_user",
   "name": "USER sound slots",
   "how_to_get_there": "Open the SAVE tabs and select USER.",
   "what_it_is": "Thirty-two user sound slots hold a synth engine, its sound settings and a sixteen-step pattern; this page has no editable controls on the drum track.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "419",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L419"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/upreset.c",
     "lines": "3-12",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L3-L12"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "435-442",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L435-L442"
    }
   ]
  },
  {
   "id": "page_project",
   "name": "PROJECT section slots",
   "how_to_get_there": "Open the SAVE tabs and select PROJECT.",
   "what_it_is": "The four project slots are the song’s sections A–D; load, save and erase require stopped transport.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "420",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L420"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "531-615",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L531-L615"
    }
   ]
  },
  {
   "id": "page_tools",
   "name": "TOOLS",
   "how_to_get_there": "Open the SAVE tabs and select TOOLS.",
   "what_it_is": "Two clockwise detents within about 1.5 seconds confirm each action; changes affect the working loop, which can later autosave.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "421",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L421"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "605-648",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L605-L648"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "618-652",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
    }
   ]
  },
  {
   "id": "page_step",
   "name": "STEP editor",
   "how_to_get_there": "Select a synth track, open SEQ and select STEP.",
   "what_it_is": "Edits the current pattern one step at a time; playing keys enter notes and releasing all entered notes advances the cursor unless live recording is armed.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "424",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L424"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "729-775",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L729-L775"
    }
   ]
  },
  {
   "id": "song_editor",
   "name": "SONG order",
   "how_to_get_there": "From the player tap SAVE and release it quickly, or select SONG in the SEQ family.",
   "what_it_is": "An order of up to 16 section entries uses the four project slots A–D, with one to 64 bars per entry; only cursor movement is accepted while playing.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "834-842",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L842"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "426",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L426"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_song.c",
     "lines": "20-86",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L20-L86"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/arranger.h",
     "lines": "8-19",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/arranger.h#L8-L19"
    }
   ]
  },
  {
   "id": "drum_grid",
   "name": "DRUM GRID",
   "how_to_get_there": "Select the drum track and briefly tap SEQ or EDIT from the player; turn SELECT left for GRID.",
   "what_it_is": "White keys toggle the selected sound’s steps in the current bank of sixteen, while four low black keys select a step bank.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "805-815",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L805-L815"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_studio.c",
     "lines": "443-488",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L488"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_studio.c",
     "lines": "513-517",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L513-L517"
    }
   ]
  },
  {
   "id": "drum_kit",
   "name": "DRUM KIT",
   "how_to_get_there": "From DRUM GRID briefly tap SEQ or EDIT, or turn SELECT right.",
   "what_it_is": "Sixteen drum pads, the kit choice, its overall level, reverb and pan.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "805-810",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L805-L810"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_studio.c",
     "lines": "513-559",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L513-L559"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "4955-4985",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4955-L4985"
    }
   ]
  },
  {
   "id": "preferences",
   "name": "PREFERENCES",
   "how_to_get_there": "Hold HOME for about 0.7 seconds.",
   "what_it_is": "PRESETS moves through keyboard lighting, importer, low-cut, USB audio, boot sound, tape autoplay, USB serial, learned MIDI clearing and information; screen brightness is hidden and SKINS is only a future-feature label.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "1165-1175",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1165-L1175"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "5-7",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5503-5541",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5503-L5541"
    }
   ]
  },
  {
   "id": "pref_lowcut",
   "name": "LOWCUT setting",
   "how_to_get_there": "In PREFERENCES use PRESETS to highlight LOWCUT.",
   "what_it_is": "KNOB 1 sets the value; OCT+ or SEL toggles it; The changed setting is saved at menu close when stopped, or later when stopped and quiet.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "341-347",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L341-L347"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "235-236",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "90-99",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "1094-1102",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
    }
   ]
  },
  {
   "id": "pref_usb_audio",
   "name": "USB AUDIO setting",
   "how_to_get_there": "In PREFERENCES use PRESETS to highlight USB AUDIO.",
   "what_it_is": "KNOB 1 sets the value; OCT+ or SEL toggles it; The changed setting is saved at menu close when stopped, or later when stopped and quiet.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "348-351",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L348-L351"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "235-236",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "90-99",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "1094-1102",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
    }
   ]
  },
  {
   "id": "pref_boot_sound",
   "name": "BOOT SOUND setting",
   "how_to_get_there": "In PREFERENCES use PRESETS to highlight BOOT SOUND.",
   "what_it_is": "KNOB 1 sets the value; OCT+ or SEL toggles it; The changed setting is saved later when stopped and quiet, or at menu close when stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "352-356",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L352-L356"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "235-236",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "90-99",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "1094-1102",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
    }
   ]
  },
  {
   "id": "pref_tape_auto",
   "name": "TAPES AUTOPLAY setting",
   "how_to_get_there": "In PREFERENCES use PRESETS to highlight TAPES AUTOPLAY.",
   "what_it_is": "KNOB 1 sets the value; OCT+ or SEL toggles it; The changed setting is saved later when stopped and quiet, or at menu close when stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "366-370",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L366-L370"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "235-236",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "90-99",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "1094-1102",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
    }
   ]
  },
  {
   "id": "pref_usb_serial",
   "name": "USB SERIAL setting",
   "how_to_get_there": "In PREFERENCES use PRESETS to highlight USB SERIAL.",
   "what_it_is": "KNOB 1 sets the value; OCT+ or SEL toggles it; The changed setting is saved later when stopped and quiet, or at menu close when stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "357-361",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L357-L361"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "235-236",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "90-99",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "1094-1102",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
    }
   ]
  },
  {
   "id": "pref_clear_learn",
   "name": "MIDI LEARN CLEAR",
   "how_to_get_there": "In PREFERENCES highlight MIDI LEARN CLEAR.",
   "what_it_is": "OCT+ or SEL forgets all learned MIDI CC assignments without another confirmation or undo, then the changed device settings are saved later when stopped and quiet or at menu close.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "362-365",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L362-L365"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui.c",
     "lines": "727-734",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L727-L734"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "90-99",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
    }
   ]
  },
  {
   "id": "pref_keyboard_led",
   "name": "KEYBOARD LED",
   "how_to_get_there": "Open PREFERENCES, choose KEYBOARD LED with PRESETS, then press OCT+ or SEL.",
   "what_it_is": "Choose one of six key-light animations and its speed, fade and retrigger behavior; a change plays a preview and schedules settings storage.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "264-276",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L264-L276"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "386-390",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L386-L390"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5571-5594",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5571-L5594"
    }
   ]
  },
  {
   "id": "pref_importer",
   "name": "IMPORTER sample slots",
   "how_to_get_there": "Open PREFERENCES, choose IMPORTER with PRESETS, then press OCT+ or SEL.",
   "what_it_is": "Lists uploaded sample slots USR1–USR4, their names, usage and an erase progress bar.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "28-83",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L28-L83"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "380-385",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L380-L385"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5596-5629",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5596-L5629"
    }
   ]
  },
  {
   "id": "pref_about_memory",
   "name": "ABOUT memory",
   "how_to_get_there": "Open PREFERENCES, choose ABOUT with PRESETS, then press OCT+ or SEL.",
   "what_it_is": "Shows memory usage; PRESETS flips to credits.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "251-257",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L251-L257"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "391-395",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L391-L395"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5631-5660",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5631-L5660"
    }
   ]
  },
  {
   "id": "pref_about_credits",
   "name": "ABOUT credits",
   "how_to_get_there": "In ABOUT turn PRESETS.",
   "what_it_is": "Credits and licence information; PRESETS flips back to memory usage.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "251-257",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L251-L257"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_winamp.c",
     "lines": "5652-5660",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5652-L5660"
    }
   ]
  },
  {
   "id": "keys_percussion",
   "name": "Track 3: one percussion sound",
   "how_to_get_there": "Choose track 3 in TAPES, browse its extra 32 BRASIL or BRASIL 2 sounds and press SEL. To return to an ordinary synth sound, choose and copy a regular track-3 tape.",
   "what_it_is": "Each note-producing key triggers the same selected percussion sound; held-button jobs and scale restrictions still apply, and the live percussion choice is not included in project or user-sound saves.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "111-130",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L111-L130"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "154-175",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L154-L175"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/voice.c",
     "lines": "411-413",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "416-438",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L416-L438"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/upreset.c",
     "lines": "85-103",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L85-L103"
    }
   ]
  },
  {
   "id": "midi_program_change",
   "name": "MIDI Program Change",
   "how_to_get_there": "Send a Program Change through USB MIDI or the TRS MIDI input.",
   "what_it_is": "A zero-based sound-list or drum-kit index changes the routed track sound; IN CLOCK ignores it, while IN CH selects the current track on the chosen channel.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "2554-2597",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2554-L2597"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui.c",
     "lines": "611-635",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L611-L635"
    }
   ]
  }
 ],
 "controls": {
  "button_home": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A short HOME tap returns from an editing page to the player, retaining its last window, unless a menu, held layer, SONG or DRUM screen handles it.",
    "short_label": "HOME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "337-348",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L337-L348"
     }
    ]
   },
   {
    "mode": "player_playlist",
    "gesture": "release",
    "action": "Tap and release HOME to advance EFFECTS → PLAYLIST → visualizer window → full-screen visualizer → TAPES while no recording take or held layer overrides it.",
    "short_label": "NEXT WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5387-5394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "release",
    "action": "Tap and release HOME to advance EFFECTS → PLAYLIST → visualizer window → full-screen visualizer → TAPES while no recording take or held layer overrides it.",
    "short_label": "NEXT WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5387-5394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
     }
    ]
   },
   {
    "mode": "effects_space",
    "gesture": "release",
    "action": "Tap and release HOME to advance EFFECTS → PLAYLIST → visualizer window → full-screen visualizer → TAPES while no recording take or held layer overrides it.",
    "short_label": "NEXT WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5387-5394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
     }
    ]
   },
   {
    "mode": "effects_master",
    "gesture": "release",
    "action": "Tap and release HOME to advance EFFECTS → PLAYLIST → visualizer window → full-screen visualizer → TAPES while no recording take or held layer overrides it.",
    "short_label": "NEXT WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5387-5394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
     }
    ]
   },
   {
    "mode": "effects_party",
    "gesture": "release",
    "action": "Tap and release HOME to advance EFFECTS → PLAYLIST → visualizer window → full-screen visualizer → TAPES while no recording take or held layer overrides it.",
    "short_label": "NEXT WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5387-5394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
     }
    ]
   },
   {
    "mode": "effects_track",
    "gesture": "release",
    "action": "Tap and release HOME to advance EFFECTS → PLAYLIST → visualizer window → full-screen visualizer → TAPES while no recording take or held layer overrides it.",
    "short_label": "NEXT WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5387-5394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
     }
    ]
   },
   {
    "mode": "visual_window",
    "gesture": "release",
    "action": "Tap and release HOME to advance EFFECTS → PLAYLIST → visualizer window → full-screen visualizer → TAPES while no recording take or held layer overrides it.",
    "short_label": "NEXT WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5387-5394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "release",
    "action": "Tap and release HOME to advance EFFECTS → PLAYLIST → visualizer window → full-screen visualizer → TAPES while no recording take or held layer overrides it.",
    "short_label": "NEXT WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1239-1244",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1239-L1244"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5387-5394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5387-L5394"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Hold HOME beyond 0.7 seconds to open the settings list or close the current menu, saving settings immediately while stopped or later when stopped and quiet, with the first close able to write defaults without an edit when previous settings were unreadable.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "781-795",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L781-L795"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1165-1175",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1165-L1175"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "730-754",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L730-L754"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "896-911",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L896-L911"
     }
    ]
   },
   {
    "mode": "tapes",
    "gesture": "release",
    "action": "A short HOME tap restores an unkept preview and returns to EFFECTS, except during the two-second copy animation.",
    "short_label": "LEAVE TAPES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1177-1182",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1177-L1182"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "168-179",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L168-L179"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "LOCK LAYER",
    "action": "Locks this layer open when HOME is tapped and released, until another button besides PLAY, REC or OCT is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "849-858",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L849-L858"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-909",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L909"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LOCK LAYER",
    "action": "Locks this layer open when HOME is tapped and released, until another button besides PLAY, REC or OCT is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "849-858",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L849-L858"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-909",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L909"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "LOCK LAYER",
    "action": "Locks this layer open when HOME is tapped and released, until another button besides PLAY, REC or OCT is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "849-858",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L849-L858"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-909",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L909"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "LOCK LAYER",
    "action": "Locks this layer open when HOME is tapped and released, until another button besides PLAY, REC or OCT is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "849-858",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L849-L858"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-909",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L909"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "LOCK LAYER",
    "action": "Locks this layer open when HOME is tapped and released, until another button besides PLAY, REC or OCT is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "849-858",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L849-L858"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-909",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L909"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "LOCK LAYER",
    "action": "Locks this layer open when HOME is tapped and released, until another button besides PLAY, REC or OCT is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "849-858",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L849-L858"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-909",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L909"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "LOCK LAYER",
    "action": "Locks this layer open when HOME is tapped and released, until another button besides PLAY, REC or OCT is pressed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "849-858",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L849-L858"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-909",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L909"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "release",
    "short_label": "PLAYER",
    "action": "Returns to the player after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "337-345",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L337-L345"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "release",
    "short_label": "PLAYER",
    "action": "Returns to the player after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "494-497",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L494-L497"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "release",
    "short_label": "PLAYER",
    "action": "Returns to the player after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "494-497",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L494-L497"
     }
    ]
   },
   {
    "mode": "preferences",
    "gesture": "long_press",
    "short_label": "CLOSE MENU",
    "action": "Hold HOME beyond 0.7 seconds to close the menu, saving settings immediately while stopped or later when stopped and quiet, with the first close able to write defaults without an edit when previous settings were unreadable.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "781-795",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L781-L795"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1165-1175",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1165-L1175"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "730-754",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L730-L754"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "896-911",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L896-L911"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "long_press",
    "short_label": "CLOSE MENU",
    "action": "Hold HOME beyond 0.7 seconds to close the menu, saving settings immediately while stopped or later when stopped and quiet, with the first close able to write defaults without an edit when previous settings were unreadable.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "781-795",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L781-L795"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1165-1175",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1165-L1175"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "730-754",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L730-L754"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "896-911",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L896-L911"
     }
    ]
   },
   {
    "mode": "pref_importer",
    "gesture": "long_press",
    "short_label": "CLOSE MENU",
    "action": "Hold HOME beyond 0.7 seconds to close the menu, saving settings immediately while stopped or later when stopped and quiet, with the first close able to write defaults without an edit when previous settings were unreadable.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "781-795",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L781-L795"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1165-1175",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1165-L1175"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "730-754",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L730-L754"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "896-911",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L896-L911"
     }
    ]
   },
   {
    "mode": "pref_about_memory",
    "gesture": "long_press",
    "short_label": "CLOSE MENU",
    "action": "Hold HOME beyond 0.7 seconds to close the menu, saving settings immediately while stopped or later when stopped and quiet, with the first close able to write defaults without an edit when previous settings were unreadable.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "781-795",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L781-L795"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1165-1175",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1165-L1175"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "730-754",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L730-L754"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "896-911",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L896-L911"
     }
    ]
   },
   {
    "mode": "pref_about_credits",
    "gesture": "long_press",
    "short_label": "CLOSE MENU",
    "action": "Hold HOME beyond 0.7 seconds to close the menu, saving settings immediately while stopped or later when stopped and quiet, with the first close able to write defaults without an edit when previous settings were unreadable.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "781-795",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L781-L795"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1165-1175",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1165-L1175"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "730-754",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L730-L754"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "896-911",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L896-L911"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A short PLAY tap starts or stops the loop on release when no menu, held layer, armed recording or free take overrides it.",
    "short_label": "PLAY / STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1133-1153",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1133-L1153"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1252-1260",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1252-L1260"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Hold PLAY for 0.7 seconds to open TAPES without starting playback when no menu, held layer, armed recording, count-in or free take overrides it.",
    "short_label": "TAPES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1133-1153",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1133-L1153"
     }
    ]
   },
   {
    "mode": "recorder_arm",
    "gesture": "press",
    "action": "Press PLAY to start recording at the chosen tempo, with four introductory clicks when START COUNT and internal sync apply.",
    "short_label": "START REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2404-2423",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2404-L2423"
     }
    ]
   },
   {
    "mode": "recorder_take",
    "gesture": "press",
    "action": "Discard the free take immediately without a question, keeping the previous project.",
    "short_label": "DROP TAKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "941-955",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L941-L955"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "press",
    "action": "Cancel the four-click count and leave recording armed.",
    "short_label": "CANCEL COUNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2404-2423",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2404-L2423"
     }
    ]
   },
   {
    "mode": "tapes",
    "gesture": "press",
    "action": "Restart the chosen tape phrase, temporarily soloing its track and pausing a running loop until the preview ends.",
    "short_label": "HEAR TAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "136-152",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L136-L152"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "287-294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L294"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Outside menus and SONG, REC starts overdubbing the selected track during loop playback or arms recording while stopped, and a further press ends recording or cancels the arm.",
    "short_label": "RECORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "122-140",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L122-L140"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Outside menus and SONG, hold REC for about two seconds to clear the chosen track pattern and latched arpeggio without a question, with EDIT + OCT- restoring only notes or hits and length before a later working-project autosave.",
    "short_label": "CLEAR TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1028-1091",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1028-L1091"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "1015",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L1015"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "621-653",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L621-L653"
     }
    ]
   },
   {
    "mode": "recorder_take",
    "gesture": "press",
    "action": "Without a question, turn a suitable take into a quantized 1-, 2- or 4-bar loop with a derived tempo and later autosave, discarding a take shorter than half a second or one whose timing cannot fit.",
    "short_label": "CLOSE TAKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "887-932",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L887-L932"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "621-653",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L621-L653"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "RESET SENDS",
    "action": "Resets the selected track’s distortion, chorus, delay and reverb sends plus slicer settings to defaults immediately without asking or undo and allows the changed working project to autosave later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5671-5679",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5671-L5679"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1155",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1155"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "press",
    "short_label": "STORE SCENE",
    "action": "Saves the whole working loop to the cursor entry’s section immediately while stopped, with a second press within three seconds required only to replace an occupied section, and no undo for the replaced saved project.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "37-65",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L37-L65"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "531-545",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L531-L545"
     }
    ]
   },
   {
    "mode": "pref_importer",
    "gesture": "long_press",
    "short_label": "ERASE SAMPLE",
    "action": "Erases the selected occupied sample slot’s entire contents in flash after 1.3 seconds held, with no further question or undo and no change if released sooner.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "33-35",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L33-L35"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "56-82",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L56-L82"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/editor.c",
      "lines": "108-120",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/editor.c#L108-L120"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "recorder_arm",
    "gesture": "turn",
    "action": "In an empty project, choose FREE or TEMPO recording; the choice is saved once stopped.",
    "short_label": "REC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "996-1025",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L996-L1025"
     }
    ]
   },
   {
    "mode": "recorder_take",
    "gesture": "turn",
    "action": "Does nothing during the free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1223-1227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1223-L1227"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "turn",
    "action": "Does nothing during the free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1223-1227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1223-L1227"
     }
    ]
   },
   {
    "mode": "tapes",
    "gesture": "turn",
    "action": "Does nothing in TAPES.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "287-335",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L335"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "turn",
    "action": "Change the selected track distortion send.",
    "short_label": "DIST SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_space",
    "gesture": "turn",
    "action": "Change the shared delay time.",
    "short_label": "DELAY TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_master",
    "gesture": "turn",
    "action": "Change the shared DJ filter.",
    "short_label": "DJ FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_party",
    "gesture": "turn",
    "action": "Choose one, two, three or all four tracks to be heard.",
    "short_label": "FORM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "172-199",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L172-L199"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_track",
    "gesture": "turn",
    "action": "Change the selected track level, with the first turn instead unmuting a muted track.",
    "short_label": "TRACK LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "155-163",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L155-L163"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "421-450",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L421-L450"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "MIX FILTER",
    "action": "Changes the whole mix filter between low-pass, neutral and high-pass.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "493-502",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L493-L502"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "ROTATE",
    "action": "Rotates the pattern by one step per turn direction, leaving each step’s nudge, locks and fill condition on their original numbered steps; undo restores notes or hits and length, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "50-106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "503-510",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L503-L510"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "443-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "ROTATE",
    "action": "Rotates the pattern by one step per turn direction, leaving each step’s nudge, locks and fill condition on their original numbered steps; undo restores notes or hits and length, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "50-106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "503-510",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L503-L510"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "443-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "ROLL RATE",
    "action": "Chooses eighth, sixteenth, thirty-second, thirty-second-triplet or sixty-fourth-note repeats.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "511-514",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L511-L514"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "PEN NOTE",
    "action": "Chooses and auditions the drum lane to edit, or chooses one synth note for new steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "515-536",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L515-L536"
     }
    ]
   },
   {
    "mode": "held_seq_steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "HELD PITCH",
    "action": "Transposes held synth steps and keeps them on release, or chooses and auditions the drum lane without marking held steps as edited, so releasing an occupied drum step can still remove the newly chosen lane.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "180-247",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L180-L247"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "515-520",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L515-L520"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "CHORD TYPE",
    "action": "Chooses off, triad, seventh, ninth, suspended-fourth or power chords for the selected synth track and does nothing on drums.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "538-552",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L538-L552"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "LEVEL 1",
    "action": "Changes track 1’s level without toggling its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "554-557",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L554-L557"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "486-562",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L486-L562"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "short_label": "ATTACK",
    "action": "Sets the selected synth track’s attack time, or its tempo value when ENV SYNC is on; FM6 uses its patch envelopes instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "388",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L388"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "75",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L75"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "short_label": "ENV FILTER",
    "action": "Sets envelope movement of the selected synth sound’s filter or brightness; FM6 ignores ENV DEST.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "389",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L389"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "79",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L79"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "short_label": "LFO RATE",
    "action": "Sets the selected synth track’s free LFO speed, used when LFO SYNC is OFF.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "391",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L391"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "83",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L83"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_lfo2",
    "gesture": "turn",
    "short_label": "LFO SYNC",
    "action": "Chooses a tempo division for the selected synth track’s LFO or OFF for its free rate.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "392",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L392"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "136",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L136"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "short_label": "LFO PITCH",
    "action": "Sets LFO pitch depth for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "393",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L393"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "87",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L87"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "short_label": "TRACK DRIVE",
    "action": "Sets distortion for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "107",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L107"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "short_label": "SLICER MODE",
    "action": "Chooses OFF, rhythmic gating or stuttering for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "119",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L119"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_delay",
    "gesture": "turn",
    "short_label": "DELAY TIME",
    "action": "Chooses the shared delay’s tempo division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "157",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_reverb_chorus",
    "gesture": "turn",
    "short_label": "REVERB SIZE",
    "action": "Sets shared reverb size.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "161",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L161"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_filter_mix",
    "gesture": "turn",
    "short_label": "TRACK FILTER",
    "action": "Filters the selected synth track with low-pass left of centre, no filter at centre and high-pass right of centre.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "124",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L124"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "turn",
    "short_label": "SCALE ROOT",
    "action": "Sets the selected synth track’s scale root.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_sel2",
    "gesture": "turn",
    "short_label": "TRANSPOSE",
    "action": "Transposes the selected synth track by up to two octaves in either direction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_analog_filter",
    "gesture": "turn",
    "short_label": "FILTER TYPE",
    "action": "Chooses low-pass, band-pass or high-pass for the ANALOG engine.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "134",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L134"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "161-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L161-L174"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "short_label": "VOICE MODE",
    "action": "Chooses polyphonic, monophonic, legato or unison playing for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "111",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L111"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_voice2",
    "gesture": "turn",
    "short_label": "ALLOCATION",
    "action": "Chooses rotating or reused voices for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "115",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L115"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "short_label": "TEMPO",
    "action": "Sets the loop tempo from 40 to 240 BPM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "153",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L153"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "short_label": "DUST",
    "action": "Sets the master dust effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "short_label": "MIDI OUT",
    "action": "Chooses MIDI output from keyboard playing alone or keyboard and sequencer; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "165",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L165"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_drum_settings",
    "gesture": "turn",
    "short_label": "DRUM CHANNEL",
    "action": "Sets the drum track’s MIDI channel or OFF, skipping occupied channels; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "177",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L177"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "76-87",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L76-L87"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2127-2143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2127-L2143"
     }
    ]
   },
   {
    "mode": "page_midi",
    "gesture": "turn",
    "short_label": "TRACK 1 MIDI",
    "action": "Sets synth track 1’s MIDI channel or OFF, skipping occupied channels; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "186",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L186"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "76-87",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L76-L87"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2127-2143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2127-L2143"
     }
    ]
   },
   {
    "mode": "page_midi2",
    "gesture": "turn",
    "short_label": "MIDI IN",
    "action": "Chooses all-channel notes and clock, clock alone or one incoming channel on the selected track; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "167",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L167"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_texture",
    "gesture": "turn",
    "short_label": "TEXTURE",
    "action": "Chooses no background, a built-in texture or one of four uploaded sample slots.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "190",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L190"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_texture2",
    "gesture": "turn",
    "short_label": "TEXTURE RATE",
    "action": "Sets background texture movement over one, two, four, eight or sixteen bars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "194",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L194"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "short_label": "ARP MODE",
    "action": "Chooses OFF, ascending, descending, up-and-down, random or played-order arpeggiation for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "91",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_arp2",
    "gesture": "turn",
    "short_label": "ARP SWING",
    "action": "Sets the selected synth track’s arpeggio swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "95",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L95"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "short_label": "PATTERN SIZE",
    "action": "Sets the selected track’s pattern length from one to 64 steps.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "103",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L103"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_off",
    "gesture": "turn",
    "short_label": "INSERT TYPE",
    "action": "Chooses the selected track’s insert type.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_drive",
    "gesture": "turn",
    "short_label": "INSERT TYPE",
    "action": "Chooses the selected track’s insert type.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_crush",
    "gesture": "turn",
    "short_label": "INSERT TYPE",
    "action": "Chooses the selected track’s insert type.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_sweep",
    "gesture": "turn",
    "short_label": "INSERT TYPE",
    "action": "Chooses the selected track’s insert type.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANALOG WAVE",
    "action": "Chooses the ANALOG oscillator waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "164",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L164"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "39-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L39-L45"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "ANALOG CUT",
    "action": "Sets the ANALOG filter cutoff, also available as FILTER KNOB 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "168",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L168"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "39-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L39-L45"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "short_label": "DIGITAL ALG",
    "action": "Chooses one of eight four-operator FM algorithms.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "148",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L148"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "30-43",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L30-L43"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "short_label": "FM INDEX",
    "action": "Sets four-operator FM modulation depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "152",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L152"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "30-43",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L30-L43"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE WAVE",
    "action": "Chooses the first phase-distortion waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "188",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L188"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "PHASE TUNE",
    "action": "Detunes the second phase-distortion line in cents.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI CHIP",
    "action": "Chooses the chip character, including the stepped-envelope mode.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "221",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L221"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "3-10",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L3-L10"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "LOFI SWEEP",
    "action": "Sets the downward pitch sweep after each new note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "225",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L225"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "3-10",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L3-L10"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SAMPLE SET",
    "action": "Chooses a built-in sample set or an uploaded user set.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "207",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L207"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "141-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L141-L174"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "SAMPLE CUT",
    "action": "Sets the sample low-pass tone filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "211",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L211"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "141-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L141-L174"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOICE VOWEL",
    "action": "Chooses the starting vowel along the vowel range.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "230",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L230"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "97-146",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L97-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "VOICE BUZZ",
    "action": "Sets the vocal source’s buzz.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "97-146",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L97-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO WAVE",
    "action": "Chooses a three-oscillator waveform and interaction setup.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "383",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L383"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "3-25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L3-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "TRIO FILTER",
    "action": "Chooses low-pass, band-pass, high-pass or notch filtering.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "387",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L387"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "3-25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L3-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "WHEEL BARS",
    "action": "Chooses one of sixteen drawbar registrations.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "286",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L286"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "WHEEL PERC",
    "action": "Chooses organ percussion or turns it off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "290",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "GRAIN SOURCE",
    "action": "Chooses a sample set for granular playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "439",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L439"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "GRAIN PITCH",
    "action": "Transposes grain playback by up to two octaves either way.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "443",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L443"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 ALG",
    "action": "Uses the patch’s own algorithm at PAT or selects algorithm 1–32.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "370",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "FM6 MOD TIME",
    "action": "Makes modulator envelopes faster to the left or slower to the right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "374",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L374"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS MODEL",
    "action": "Chooses MODAL, STRNG, MEMB or SYMP physical modelling.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L267"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS PLACE",
    "action": "Sets strike or pluck position, or sympathetic-string level in SYMP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "271",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L271"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE MODEL",
    "action": "Chooses analog noise, dust, a long shift register or a metallic register cycle.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "263",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L263"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE TRACK",
    "action": "Sets how strongly filter frequency follows played pitch.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L267"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "edit_phys_symp2",
    "gesture": "turn",
    "short_label": "PHYS STRINGS",
    "action": "Sets sympathetic-string level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "18-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_presets",
    "gesture": "turn",
    "short_label": "BROWSE SOUND",
    "action": "Browses and immediately loads synth sounds across the engines and occupied user sound slots, replacing current unsaved sound edits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "551-555",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L551-L555"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "376-431",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L376-L431"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "573-593",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L573-L593"
     }
    ]
   },
   {
    "mode": "page_user",
    "gesture": "turn",
    "short_label": "SOUND SLOT",
    "action": "Chooses user sound slot U01–U32 and cancels an armed action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "561-578",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L561-L578"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "17-18",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L17-L18"
     }
    ]
   },
   {
    "mode": "page_project",
    "gesture": "turn",
    "short_label": "SECTION SLOT",
    "action": "Selects project slot 1–4, which SONG uses as section A–D.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "169-172",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L169-L172"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_tools",
    "gesture": "turn",
    "short_label": "CLEAR STEPS",
    "action": "Clears the selected track’s pattern after two clockwise detents within about 1.5 seconds, with EDIT plus OCT- able to undo the pattern and later autosave able to persist it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "605-631",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L605-L631"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "964-975",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L964-L975"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "page_step",
    "gesture": "turn",
    "short_label": "STEP CURSOR",
    "action": "Moves the cursor through the selected synth track’s pattern, wrapping at either end.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "453-462",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L453-L462"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "turn",
    "short_label": "SONG CURSOR",
    "action": "Selects an entry in the song order, including while playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "68-76",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L68-L76"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "turn",
    "short_label": "GRID SOUND",
    "action": "Selects and auditions one of the sixteen drum lanes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "529-535",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L529-L535"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "turn",
    "short_label": "DRUM KIT",
    "action": "Selects the drum kit, stopping at either end of the kit list.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "555-559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L555-L559"
     }
    ]
   },
   {
    "mode": "pref_lowcut",
    "gesture": "turn",
    "short_label": "LOWCUT",
    "action": "Switches the output low-cut filter on clockwise or off counterclockwise; the changed setting is saved at menu close when stopped, or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "341-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L341-L347"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_usb_audio",
    "gesture": "turn",
    "short_label": "USB AUDIO",
    "action": "Selects FULL USB audio clockwise or MASTER counterclockwise; the changed setting is saved at menu close when stopped, or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "348-351",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L348-L351"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_boot_sound",
    "gesture": "turn",
    "short_label": "BOOT SOUND",
    "action": "Enables the power-on sound clockwise or disables it counterclockwise; the changed setting is saved later when stopped and quiet, or at menu close when stopped.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "352-356",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L352-L356"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_tape_auto",
    "gesture": "turn",
    "short_label": "TAPE PREVIEW",
    "action": "Enables automatic tape preview clockwise or requires PLAY counterclockwise; the changed setting is saved later when stopped and quiet, or at menu close when stopped.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "366-370",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L366-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_usb_serial",
    "gesture": "turn",
    "short_label": "USB SERIAL",
    "action": "Enables the USB serial console clockwise or disables it counterclockwise for the next start; the changed setting is saved later when stopped and quiet, or at menu close when stopped.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "357-361",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L357-L361"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "turn",
    "short_label": "LIGHT SPEED",
    "action": "Sets key-animation speed from 0 to 15, previews the change and schedules its save when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "264-276",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L264-L276"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "recorder_arm",
    "gesture": "turn",
    "action": "For tempo recording, choose a 1-, 2- or 4-bar pattern for the selected track.",
    "short_label": "REC BARS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "996-1025",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L996-L1025"
     }
    ]
   },
   {
    "mode": "recorder_take",
    "gesture": "turn",
    "action": "Does nothing during the free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1223-1227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1223-L1227"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "turn",
    "action": "Does nothing during the free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1223-1227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1223-L1227"
     }
    ]
   },
   {
    "mode": "tapes",
    "gesture": "turn",
    "action": "Does nothing in TAPES.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "287-335",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L335"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "turn",
    "action": "Change the selected track chorus send.",
    "short_label": "CHORUS SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_space",
    "gesture": "turn",
    "action": "Change shared delay feedback.",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_master",
    "gesture": "turn",
    "action": "Change the shared lo-fi dust amount.",
    "short_label": "DUST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_party",
    "gesture": "turn",
    "action": "Choose the first track in the heard group.",
    "short_label": "LEAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "172-199",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L172-L199"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_track",
    "gesture": "turn",
    "action": "Change the selected track pattern length.",
    "short_label": "TRACK STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "155-163",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L155-L163"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "421-450",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L421-L450"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "DUST",
    "action": "Changes the mix dust amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "493-502",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L493-L502"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "DOUBLE/HALF",
    "action": "Doubles the pattern by copying its notes or drum hits after themselves up to 64 steps, or halves its length, leaving nudge, locks and fill conditions uncopied; undo restores notes or hits and length, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "50-106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "503-510",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L503-L510"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "443-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "DOUBLE/HALF",
    "action": "Doubles the pattern by copying its notes or drum hits after themselves up to 64 steps, or halves its length, leaving nudge, locks and fill conditions uncopied; undo restores notes or hits and length, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "50-106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "503-510",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L503-L510"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "443-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Does nothing in the held ARP layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "511-514",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L511-L514"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "DIVISION",
    "action": "Changes the selected pattern’s clock division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "515-536",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L515-L536"
     }
    ]
   },
   {
    "mode": "held_seq_steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "HELD LEVEL",
    "action": "Changes held synth steps to velocity 1–127 and clears accent and per-note levels, or changes the selected drum lane’s hit level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "180-247",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L180-L247"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "515-520",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L515-L520"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "ALL SCALES",
    "action": "Changes scale for all three synth tracks.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "538-552",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L538-L552"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "LEVEL 2",
    "action": "Changes track 2’s level without toggling its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "554-557",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L554-L557"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "486-562",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L486-L562"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "short_label": "DECAY",
    "action": "Sets the selected synth track’s decay time, or its tempo value when ENV SYNC is on; FM6 uses its patch envelopes instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "388",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L388"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "76",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L76"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "short_label": "ENV PITCH",
    "action": "Sets envelope movement of the selected synth sound’s pitch; FM6 ignores ENV DEST.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "389",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L389"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "80",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L80"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "short_label": "LFO WAVE",
    "action": "Chooses sine, triangle, saw, square or sample-and-hold modulation for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "391",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L391"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "84",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L84"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_lfo2",
    "gesture": "turn",
    "short_label": "LFO TRIGGER",
    "action": "Chooses whether a new phrase restarts the selected synth track’s LFO or it runs freely.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "392",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L392"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "137",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L137"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "short_label": "LFO FILTER",
    "action": "Sets LFO filter or brightness depth for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "393",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L393"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "88",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L88"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "short_label": "CHORUS SEND",
    "action": "Sets the selected synth track’s chorus send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "short_label": "SLICE SHAPE",
    "action": "Chooses one of 16 rhythmic slicer patterns for the selected track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "120",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_delay",
    "gesture": "turn",
    "short_label": "DELAY RETURN",
    "action": "Sets shared delay feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "158",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L158"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_reverb_chorus",
    "gesture": "turn",
    "short_label": "REVERB DAMP",
    "action": "Sets shared reverb damping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "162",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L162"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_filter_mix",
    "gesture": "turn",
    "short_label": "INSERT MIX",
    "action": "Sets the selected synth track’s insert dry and wet balance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "133",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L133"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "turn",
    "short_label": "SCALE",
    "action": "Chooses the selected synth track’s scale.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "100",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L100"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_sel2",
    "gesture": "turn",
    "short_label": "STRUM",
    "action": "Spaces chord notes in time for the selected synth track, with positive values playing from low to high and negative values from high to low.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "125",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L125"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_analog_filter",
    "gesture": "turn",
    "short_label": "ANALOG CUT",
    "action": "Sets the ANALOG filter cutoff, also available as EDIT 2 KNOB 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "161-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L161-L174"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "short_label": "GLIDE",
    "action": "Sets glide for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "112",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L112"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_voice2",
    "gesture": "turn",
    "short_label": "UNISON TUNE",
    "action": "Sets unison detuning for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "116",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L116"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "short_label": "SWING",
    "action": "Sets shared sequencer swing from straight to its strongest amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "154",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L154"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "short_label": "DUCK",
    "action": "Sets kick-driven ducking.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "181",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "short_label": "CLOCK SOURCE",
    "action": "Chooses internal, USB MIDI or TRS MIDI transport and clock; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "166",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L166"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_drum_settings",
    "gesture": "turn",
    "short_label": "DRUM LEVEL",
    "action": "Sets overall drum level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "178",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L178"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_midi",
    "gesture": "turn",
    "short_label": "TRACK 2 MIDI",
    "action": "Sets synth track 2’s MIDI channel or OFF, skipping occupied channels; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "187",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L187"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "76-87",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L76-L87"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2127-2143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2127-L2143"
     }
    ]
   },
   {
    "mode": "page_midi2",
    "gesture": "turn",
    "short_label": "OTHER MIDI",
    "action": "Routes unmatched MIDI channels to the selected track or ignores them; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "189",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L189"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "76-87",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L76-L87"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2127-2143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2127-L2143"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2139-2143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2139-L2143"
     }
    ]
   },
   {
    "mode": "page_texture",
    "gesture": "turn",
    "short_label": "TEXTURE GAIN",
    "action": "Sets background texture level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "191",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L191"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_texture2",
    "gesture": "turn",
    "short_label": "TEXTURE WHEN",
    "action": "Chooses texture only with playback or continuously.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "195",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L195"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "short_label": "ARP RATE",
    "action": "Sets the selected synth track’s arpeggio tempo division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "92",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L92"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_arp2",
    "gesture": "turn",
    "short_label": "ARP CHANCE",
    "action": "Sets the selected synth track’s chance of each arpeggio note sounding.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "96",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L96"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "short_label": "STEP RATE",
    "action": "Sets the selected track’s step division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "104",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L104"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_off",
    "gesture": "turn",
    "short_label": "INSERT A",
    "action": "Changes the stored first insert value while the insert is OFF.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_drive",
    "gesture": "turn",
    "short_label": "INSERT DRIVE",
    "action": "Sets drive for the selected track’s distortion insert.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_crush",
    "gesture": "turn",
    "short_label": "CRUSH BITS",
    "action": "Sets the selected track’s crusher bit depth from one to sixteen bits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_sweep",
    "gesture": "turn",
    "short_label": "INSERT SPEED",
    "action": "Sets the selected track’s swept insert speed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANALOG TUNE",
    "action": "Detunes the ANALOG oscillator pair in cents.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "165",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L165"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "39-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L39-L45"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "ANALOG RES",
    "action": "Sets ANALOG filter resonance, also available as FILTER KNOB 3.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "169",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L169"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "39-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L39-L45"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "short_label": "DIGITAL R2",
    "action": "Sets FM operator 2’s frequency ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "149",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L149"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "30-43",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L30-L43"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "short_label": "FM MOD DECAY",
    "action": "Sets four-operator FM modulator-envelope decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "153",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L153"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "30-43",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L30-L43"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE WAVE2",
    "action": "Chooses an alternating waveform or disables the alternate wave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "189",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L189"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "PHASE LINES",
    "action": "Chooses a mixed or ring-modulated second phase-distortion line.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "193",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L193"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI WAVE",
    "action": "Chooses pulse, triangle, saw, noise or wave RAM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "222",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L222"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "3-10",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L3-L10"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "LOFI VIBRATO",
    "action": "Sets LOFI vibrato.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "3-10",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L3-L10"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SAMPLE TUNE",
    "action": "Transposes sample playback by up to two octaves either way.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L208"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "141-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L141-L174"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "212",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L212"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "141-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L141-L174"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOICE END",
    "action": "Chooses the vowel reached by TALK.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "231",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L231"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "97-146",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L97-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "VOICE BREATH",
    "action": "Sets breath noise, reaching a whisper at the top.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "235",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L235"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "97-146",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L97-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO SECOND",
    "action": "Sets oscillator 2’s pitch interval from minus 24 to plus 24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "384",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L384"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "3-25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L3-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "TRIO CUT",
    "action": "Sets TRIO filter cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "388",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L388"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "3-25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L3-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "WHEEL SUB",
    "action": "Adjusts the registration’s low drawbars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "287",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L287"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "WHEEL CLICK",
    "action": "Sets organ key-click level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "291",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L291"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "GRAIN CENTRE",
    "action": "Sets the centre position from which grains are taken.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "440",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L440"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "GRAIN SPREAD",
    "action": "Sets random spread around the grain position and timing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "444",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L444"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 FEEDBACK",
    "action": "Offsets feedback from the loaded patch’s value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "371",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L371"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "FM6 VELOCITY",
    "action": "Offsets modulator velocity sensitivity.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "375",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS SHAPE",
    "action": "Sets partial structure in MODAL, string character in STRNG, harmonicity in MEMB or sympathetic chord in SYMP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "268",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L268"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS ACCENT",
    "action": "Sets the physical model’s full-velocity accent strength.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "272",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L272"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE COLOUR",
    "action": "Tilts noise from white through pink to brown.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "264",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L264"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE PULSES",
    "action": "Sets impulse density in ANLG or DUST, or register length in LFSR or META.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "268",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L268"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "edit_noise_lfsr",
    "gesture": "turn",
    "short_label": "NOISE LENGTH",
    "action": "Chooses the long register’s length from L23 down to L7.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_noise_meta",
    "gesture": "turn",
    "short_label": "NOISE CYCLE",
    "action": "Chooses the short register cycle used as a metallic waveform.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phys_memb1",
    "gesture": "turn",
    "short_label": "PHYS HARMONY",
    "action": "Moves the membrane between an inharmonic head and harmonic overtones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "18-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phys_symp1",
    "gesture": "turn",
    "short_label": "PHYS CHORD",
    "action": "Tunes the sympathetic strings to a named chord or the track’s scale root.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "18-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_presets",
    "gesture": "turn",
    "short_label": "ENGINE",
    "action": "Selects the previous or next synth engine and its default sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "556-557",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L556-L557"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "448-484",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L448-L484"
     }
    ]
   },
   {
    "mode": "page_user",
    "gesture": "turn",
    "short_label": "LOAD SOUND",
    "action": "Loads the selected occupied user sound after two clockwise detents within about 1.5 seconds, retaining the current pattern, mix and scale settings while replacing unsaved sound edits without a sound undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "561-578",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L561-L578"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "294-311",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L294-L311"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "236-267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L236-L267"
     }
    ]
   },
   {
    "mode": "page_project",
    "gesture": "turn",
    "short_label": "ERASE SCENE",
    "action": "Erases the selected section’s saved project immediately after two clockwise detents within about 1.5 seconds while stopped and removes its song entries for a later settings save, without changing the working loop or providing undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "580-591",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L580-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "547-577",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L547-L577"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1059-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1059-L1102"
     }
    ]
   },
   {
    "mode": "page_tools",
    "gesture": "turn",
    "short_label": "INIT SOUND",
    "action": "Resets the selected synth sound to its engine defaults and first preset after two clockwise detents within about 1.5 seconds, with no sound undo and later autosave able to persist it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "605-637",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L605-L637"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "450-455",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L450-L455"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "page_step",
    "gesture": "turn",
    "short_label": "STEP PITCH",
    "action": "Transposes every note in the current step or adds the last played note when the step is empty.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "463-473",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L463-L473"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "turn",
    "short_label": "SONG SECTION",
    "action": "Chooses section A–D for the current song entry while stopped and leaves the order in memory until it is saved.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "77-79",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L77-L79"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "turn",
    "short_label": "GRID CURSOR",
    "action": "Selects and auditions a step in the drum pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "536-540",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L536-L540"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "turn",
    "short_label": "DRUM LEVEL",
    "action": "Sets overall drum level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "555-559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L555-L559"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "turn",
    "short_label": "LIGHT FADE",
    "action": "Sets key-animation fade from 0 to 15, previews the change and schedules its save when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "264-276",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L264-L276"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "recorder_arm",
    "gesture": "turn",
    "action": "For tempo recording, choose a first-note start or a four-click count after PLAY; the choice is saved once stopped.",
    "short_label": "REC START",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "996-1025",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L996-L1025"
     }
    ]
   },
   {
    "mode": "recorder_take",
    "gesture": "turn",
    "action": "Does nothing during the free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1223-1227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1223-L1227"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "turn",
    "action": "Does nothing during the free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1223-1227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1223-L1227"
     }
    ]
   },
   {
    "mode": "tapes",
    "gesture": "turn",
    "action": "Does nothing in TAPES.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "287-335",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L335"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "turn",
    "action": "Change the selected track delay send.",
    "short_label": "DELAY SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_space",
    "gesture": "turn",
    "action": "Change the shared reverb size.",
    "short_label": "REVERB SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_master",
    "gesture": "turn",
    "action": "Change shared kick-driven ducking.",
    "short_label": "KICK DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_party",
    "gesture": "turn",
    "action": "Choose OFF or a group change every 1, 2, 4 or 8 bars.",
    "short_label": "AUTOTURN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "172-199",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L172-L199"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_track",
    "gesture": "turn",
    "action": "Change the selected track pan.",
    "short_label": "TRACK PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "155-163",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L155-L163"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "421-450",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L421-L450"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "DUCK",
    "action": "Changes the mix ducking amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "493-502",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L493-L502"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "TRANSPOSE",
    "action": "Transposes every saved synth note by semitones and does nothing on drums; undo restores notes or hits and length, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "50-106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "503-510",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L503-L510"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "443-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "TRANSPOSE",
    "action": "Transposes every saved synth note by semitones and does nothing on drums; undo restores notes or hits and length, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "50-106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "503-510",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L503-L510"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "443-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Does nothing in the held ARP layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "511-514",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L511-L514"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "STEP SWING",
    "action": "Changes the selected pattern’s swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "515-536",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L515-L536"
     }
    ]
   },
   {
    "mode": "held_seq_steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "RATCHET",
    "action": "Sets one to four repeats for each held synth note or the selected drum lane’s held hits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "180-247",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L180-L247"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "515-520",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L515-L520"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "KEY MAPPING",
    "action": "Chooses unscaled keys, SNAP or WHITE scale-degree keys for the selected synth track and does nothing on drums.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "538-552",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L538-L552"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "LEVEL 3",
    "action": "Changes track 3’s level without toggling its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "554-557",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L554-L557"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "486-562",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L486-L562"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "short_label": "SUSTAIN",
    "action": "Sets the selected synth track’s sustain level; FM6 uses its patch envelopes instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "388",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L388"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L77"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "short_label": "ENV SHAPE",
    "action": "Sets envelope movement of the selected synth sound’s shape; FM6 ignores ENV DEST.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "389",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L389"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "81",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L81"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "short_label": "LFO PHASE",
    "action": "Sets the selected synth track’s starting LFO phase.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "391",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L391"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "85",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L85"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_lfo2",
    "gesture": "turn",
    "short_label": "LFO POLARITY",
    "action": "Chooses bipolar or unipolar modulation for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "392",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L392"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "138",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L138"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "short_label": "LFO SHAPE",
    "action": "Sets LFO shape depth for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "393",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L393"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "89",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L89"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "short_label": "DELAY SEND",
    "action": "Sets the selected synth track’s delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "109",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L109"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "short_label": "SLICER RATE",
    "action": "Sets the selected track’s slicer division.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "121",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L121"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_delay",
    "gesture": "turn",
    "short_label": "DELAY COLOUR",
    "action": "Sets the shared delay’s tone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "159",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L159"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_reverb_chorus",
    "gesture": "turn",
    "short_label": "CHORUS RATE",
    "action": "Sets shared chorus speed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "163",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L163"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_filter_mix",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "turn",
    "short_label": "KEY MAPPING",
    "action": "Chooses unrestricted notes, notes snapped to the scale, or scale notes on white keys with black keys silent for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "101",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L101"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_sel2",
    "gesture": "turn",
    "short_label": "VOICE LEAD",
    "action": "Keeps new chords near the previous chord’s voicing for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "126",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_analog_filter",
    "gesture": "turn",
    "short_label": "ANALOG RES",
    "action": "Sets ANALOG filter resonance, also available as EDIT 2 KNOB 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "161-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L161-L174"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "short_label": "GLIDE MODE",
    "action": "Chooses a glide rate or fixed glide time for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "113",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L113"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_voice2",
    "gesture": "turn",
    "short_label": "PAN",
    "action": "Pans the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "117",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L117"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "short_label": "CLICK",
    "action": "Chooses metronome OFF, recording only or always on.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "155",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L155"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "short_label": "MIX FILTER",
    "action": "Filters the whole mix with low-pass left of centre, no filter at centre and high-pass right of centre.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "182",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L182"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "short_label": "MIDI IN",
    "action": "Chooses all-channel notes and clock, clock alone or one incoming channel on the selected track; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "167",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L167"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_drum_settings",
    "gesture": "turn",
    "short_label": "DRUM REVERB",
    "action": "Sets the drum reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "179",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L179"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_midi",
    "gesture": "turn",
    "short_label": "TRACK 3 MIDI",
    "action": "Sets synth track 3’s MIDI channel or OFF, skipping occupied channels; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "188",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L188"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "76-87",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L76-L87"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2127-2143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2127-L2143"
     }
    ]
   },
   {
    "mode": "page_midi2",
    "gesture": "turn",
    "short_label": "MIDI OUT",
    "action": "Chooses MIDI output from keyboard playing alone or keyboard and sequencer; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "165",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L165"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_texture",
    "gesture": "turn",
    "short_label": "TEXTURE TONE",
    "action": "Filters the background texture with low-pass left of centre, no filter at centre and high-pass right of centre.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_texture2",
    "gesture": "turn",
    "short_label": "TEXTURE DUCK",
    "action": "Chooses whether kick-driven master ducking also affects the texture.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "196",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L196"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "short_label": "ARP OCTAVES",
    "action": "Sets the selected synth track’s arpeggio span from one to four octaves.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "93",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L93"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_arp2",
    "gesture": "turn",
    "short_label": "ARP HOLD",
    "action": "Keeps the selected synth track’s arpeggio chord after the keys are released.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "97",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L97"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "short_label": "STEP SWING",
    "action": "Sets the selected track’s own pattern swing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "105",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L105"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_off",
    "gesture": "turn",
    "short_label": "INSERT B",
    "action": "Changes the stored second insert value while the insert is OFF.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_drive",
    "gesture": "turn",
    "short_label": "INSERT TONE",
    "action": "Sets tone for the selected track’s distortion insert.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_crush",
    "gesture": "turn",
    "short_label": "CRUSH RATE",
    "action": "Sets the selected track’s crusher sample rate.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_sweep",
    "gesture": "turn",
    "short_label": "INSERT DEPTH",
    "action": "Sets the selected track’s swept insert depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANALOG MIX",
    "action": "Balances the ANALOG oscillators.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "166",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L166"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "39-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L39-L45"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "ANALOG DRIVE",
    "action": "Sets ANALOG filter drive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "39-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L39-L45"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "short_label": "DIGITAL R3",
    "action": "Sets FM operator 3’s frequency ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "150",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L150"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "30-43",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L30-L43"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "short_label": "FM FEEDBACK",
    "action": "Sets feedback for four-operator FM operator 4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "154",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L154"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "30-43",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L30-L43"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE BEND",
    "action": "Sets phase-distortion amount.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "190",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L190"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "PHASE SUB",
    "action": "Adds a sine one octave below the phase-distortion note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "194",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L194"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI DUTY",
    "action": "Sets pulse duty, or selects a named wave table when WAVE is WRAM.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "223",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L223"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "3-10",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L3-L10"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "LOFI ARP",
    "action": "Chooses no chip arpeggio or an octave, major or minor pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L227"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "3-10",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L3-L10"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SAMPLE BITS",
    "action": "Sets sample playback bit reduction.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "209",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L209"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "141-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L141-L174"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "SAMPLE DRIVE",
    "action": "Sets sample overdrive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "213",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L213"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "141-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L141-L174"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOICE TALK",
    "action": "Sets the time of the vowel movement.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "232",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L232"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "97-146",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L97-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "VOICE Q",
    "action": "Sets the formant resonances.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "97-146",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L97-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO THIRD",
    "action": "Sets oscillator 3’s pitch interval from minus 24 to plus 24 semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "3-25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L3-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "TRIO RES",
    "action": "Sets TRIO filter resonance.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "389",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L389"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "3-25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L3-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "WHEEL BODY",
    "action": "Adjusts the registration’s middle drawbars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "288",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L288"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "WHEEL DRIVE",
    "action": "Sets organ overdrive.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L292"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "GRAIN SIZE",
    "action": "Sets grain duration.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "441",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L441"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "GRAIN RANDOM",
    "action": "Adds random grain detuning and reversed grains.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "445",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L445"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 MOD GAIN",
    "action": "Offsets the level of the patch’s modulators.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "372",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L372"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "FM6 DETUNE",
    "action": "Spreads carrier pitches apart.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "376",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L376"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS BRIGHT",
    "action": "Sets the physical model’s brightness.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "269",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L269"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS SUSTAIN",
    "action": "Sets sustained excitation, or pitch bend in MEMB or buzz in SYMP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "273",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L273"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE FREQ",
    "action": "Sets noise filter frequency.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "265",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L265"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE DRIFT",
    "action": "Sets slow random movement in filter frequency and the noise clock.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "269",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L269"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "edit_lofi_wram",
    "gesture": "turn",
    "short_label": "LOFI TABLE",
    "action": "Chooses one of sixteen named wave tables instead of pulse duty.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phys_memb2",
    "gesture": "turn",
    "short_label": "PHYS BEND",
    "action": "Sets the downward pitch bend after the strike.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "18-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phys_symp2",
    "gesture": "turn",
    "short_label": "PHYS BUZZ",
    "action": "Sets the curved-bridge buzz of the sympathetic-string model.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "18-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L18-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_presets",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned browser action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "551-560",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L551-L560"
     }
    ]
   },
   {
    "mode": "page_user",
    "gesture": "turn",
    "short_label": "ERASE SOUND",
    "action": "Erases the selected occupied user sound slot in flash after two clockwise detents within about 1.5 seconds while stopped, without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "561-578",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L561-L578"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "294-324",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L294-L324"
     }
    ]
   },
   {
    "mode": "page_project",
    "gesture": "turn",
    "short_label": "LOAD SECTION",
    "action": "Replaces the working loop with the selected saved section after two clockwise detents within about 1.5 seconds while stopped, without an undo snapshot.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "593-620",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L593-L620"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "580-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L580-L615"
     }
    ]
   },
   {
    "mode": "page_tools",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L421"
     }
    ]
   },
   {
    "mode": "page_step",
    "gesture": "turn",
    "short_label": "STEP LENGTH",
    "action": "Adjusts a sounding note’s step length with a pattern undo snapshot, or cycles an empty step through note, tie and rest timing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "475-491",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L475-L491"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "turn",
    "short_label": "SONG BARS",
    "action": "Sets the current song entry to one through 64 bars while stopped and leaves the order in memory until it is saved.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "77-79",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L77-L79"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "turn",
    "short_label": "GRID HIT",
    "action": "Adds a normal hit clockwise or removes this sound’s hit counterclockwise with pattern undo, except during song playback, and can later autosave the change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "541-553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L541-L553"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "turn",
    "short_label": "DRUM REVERB",
    "action": "Sets the drum reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "555-559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L555-L559"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "turn",
    "short_label": "LIGHT REPEAT",
    "action": "Chooses one animation per press to the left or repeated animation while a key stays held to the right, previews the change and schedules its save when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "264-276",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L264-L276"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "recorder_arm",
    "gesture": "turn",
    "action": "Does nothing while recording is armed.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "996-1025",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L996-L1025"
     }
    ]
   },
   {
    "mode": "recorder_take",
    "gesture": "turn",
    "action": "Does nothing during the free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1223-1227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1223-L1227"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "turn",
    "action": "Does nothing during the free take or count-in.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1223-1227",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1223-L1227"
     }
    ]
   },
   {
    "mode": "tapes",
    "gesture": "turn",
    "action": "Does nothing in TAPES.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "287-335",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L335"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "turn",
    "action": "Change the selected track reverb send.",
    "short_label": "REVERB SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_space",
    "gesture": "turn",
    "action": "Change shared reverb damping.",
    "short_label": "REVERB DAMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_master",
    "gesture": "turn",
    "action": "Change the loop tempo.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_party",
    "gesture": "turn",
    "action": "Choose KEEP to hold the lead while companions change, or YOYO to move the group back and forth.",
    "short_label": "STYLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "172-199",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L172-L199"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     }
    ]
   },
   {
    "mode": "effects_track",
    "gesture": "turn",
    "action": "Change swing for all tracks.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5397-5451",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5397-L5451"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "155-163",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L155-L163"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "421-450",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L421-L450"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "TRACK FILTER",
    "action": "Changes the selected track’s filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "493-502",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L493-L502"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "-",
    "action": "Does nothing in the held EDIT layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "50-106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "503-510",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L503-L510"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "-",
    "action": "Does nothing in the held EDIT layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "50-106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L50-L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "503-510",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L503-L510"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Does nothing in the held ARP layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "511-514",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L511-L514"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "STEP COUNT",
    "action": "Changes the selected pattern’s length from one to 64 steps and keeps the visible page in range.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "515-536",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L515-L536"
     }
    ]
   },
   {
    "mode": "held_seq_steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "NUDGE",
    "action": "Moves held steps from half a step early to just under half a step late in sixty-fourth-step increments, without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "180-247",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L180-L247"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "515-520",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L515-L520"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "KEY SHIFT",
    "action": "Transposes live synth key pitches by up to two octaves each way and does nothing on drums.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "538-552",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L538-L552"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "LEVEL 4",
    "action": "Changes track 4’s level without toggling its mute flag.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "554-557",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L554-L557"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "486-562",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L486-L562"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "short_label": "RELEASE",
    "action": "Sets the selected synth track’s release time, or its tempo value when ENV SYNC is on; FM6 uses its patch envelopes instead.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "388",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L388"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "78",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L78"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "short_label": "ENV SYNC",
    "action": "Switches the selected synth track’s attack, decay and release between free time and tempo values; FM6 ignores ENV DEST.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "389",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L389"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "135",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L135"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "short_label": "LFO FADE",
    "action": "Sets how gradually the selected synth track’s LFO reaches its depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "391",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L391"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L86"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_lfo2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "392",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L392"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "short_label": "LFO AMP",
    "action": "Sets LFO amplitude depth for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "393",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L393"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "90",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L90"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "short_label": "REVERB SEND",
    "action": "Sets the selected synth track’s reverb send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "110",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L110"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "short_label": "SLICE DEPTH",
    "action": "Sets the selected track’s slicer depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "122",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L122"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_delay",
    "gesture": "turn",
    "short_label": "DELAY MIX",
    "action": "Sets the shared delay return level.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "160",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L160"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_reverb_chorus",
    "gesture": "turn",
    "short_label": "CHORUS DEPTH",
    "action": "Sets shared chorus depth.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "164",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L164"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_filter_mix",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "turn",
    "short_label": "CHORD TYPE",
    "action": "Chooses OFF, TRIAD, 7TH, 9TH, SUS4 or POWER chords for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "123",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L123"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_sel2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_analog_filter",
    "gesture": "turn",
    "short_label": "ANALOG TRACK",
    "action": "Sets how strongly ANALOG filter cutoff follows pitch, also available as EDIT 2 KNOB 4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "161-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L161-L174"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "short_label": "PRIORITY",
    "action": "Chooses last, lowest or highest note priority for the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "114",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L114"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_voice2",
    "gesture": "turn",
    "short_label": "MUTE",
    "action": "Mutes or unmutes the selected synth track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "118",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L118"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "short_label": "FINE TUNE",
    "action": "Sets shared fine tuning from minus 50 to plus 50 cents.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "156",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L156"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "short_label": "REPEAT RATE",
    "action": "Sets the note-repeat division used while ARP is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "183",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L183"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "short_label": "-",
    "action": "Shows CPU use without an editable value.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "168",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L168"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_drum_settings",
    "gesture": "turn",
    "short_label": "DRUM DELAY",
    "action": "Sets the drum delay send.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "185",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L185"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_midi",
    "gesture": "turn",
    "short_label": "DRUM CHANNEL",
    "action": "Sets the drum track’s MIDI channel or OFF, skipping occupied channels; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "177",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L177"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "76-87",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L76-L87"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2127-2143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2127-L2143"
     }
    ]
   },
   {
    "mode": "page_midi2",
    "gesture": "turn",
    "short_label": "BEND RANGE",
    "action": "Sets MIDI pitch-bend range from one to twelve semitones; the setting is saved later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "197",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L197"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1073-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1073-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "138-180",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L138-L180"
     }
    ]
   },
   {
    "mode": "page_texture",
    "gesture": "turn",
    "short_label": "TEXTURE MOVE",
    "action": "Sets how strongly the background texture’s level and tone change over its movement cycle.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "193",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L193"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_texture2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "short_label": "ARP GATE",
    "action": "Sets the selected synth track’s arpeggio note length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "94",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L94"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_arp2",
    "gesture": "turn",
    "short_label": "ARP ORDER",
    "action": "Chooses pitch order or played order for the selected synth track’s arpeggio input.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "98",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L98"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "short_label": "STEP GATE",
    "action": "Sets the selected track’s default sequenced note length.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "106",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L106"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_off",
    "gesture": "turn",
    "short_label": "INSERT C",
    "action": "Changes the stored third insert value while the insert is OFF.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_drive",
    "gesture": "turn",
    "short_label": "INSERT GAIN",
    "action": "Sets output level for the selected track’s distortion insert.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_crush",
    "gesture": "turn",
    "short_label": "CRUSH FILTER",
    "action": "Sets the selected track’s crusher low-pass cutoff.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_insert_sweep",
    "gesture": "turn",
    "short_label": "INSERT FEED",
    "action": "Sets the selected track’s swept insert feedback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "short_label": "ANALOG NOISE",
    "action": "Adds ANALOG oscillator noise.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "167",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L167"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "39-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L39-L45"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "short_label": "ANALOG TRACK",
    "action": "Sets how strongly ANALOG filter cutoff follows pitch, also available as FILTER KNOB 4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "171",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L171"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "39-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L39-L45"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "short_label": "DIGITAL R4",
    "action": "Sets FM operator 4’s frequency ratio.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "151",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L151"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "30-43",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L30-L43"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "155",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L155"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "30-43",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L30-L43"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "short_label": "PHASE ENV",
    "action": "Sets envelope depth on phase distortion.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "191",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L191"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "195",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L195"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "3-11",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L3-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "short_label": "LOFI CRUSH",
    "action": "Sets crushing, or selects a constant, decaying or looping envelope when CHIP is STEP.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "224",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L224"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "3-10",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L3-L10"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "short_label": "LOFI TONE",
    "action": "Sets LOFI tone filtering.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "228",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L228"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "3-10",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L3-L10"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "short_label": "SAMPLE LOOP",
    "action": "Enables or disables sample looping where the sample supplies a loop.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "210",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L210"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "141-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L141-L174"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned parameter on this tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "214",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L214"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "141-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L141-L174"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "short_label": "VOICE SHIFT",
    "action": "Moves the formants up or down by up to twelve semitones.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "233",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L233"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "97-146",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L97-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "short_label": "VOICE RANDOM",
    "action": "Sets random variation of the vowel for each note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "237",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L237"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "97-146",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L97-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "short_label": "TRIO DETUNE",
    "action": "Detunes TRIO oscillator 2 upward and oscillator 3 downward.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "386",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L386"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "3-25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L3-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "short_label": "TRIO WIDTH",
    "action": "Sets TRIO pulse width.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "390",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L390"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "3-25",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L3-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "short_label": "WHEEL TOP",
    "action": "Adjusts the registration’s upper drawbars.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "289",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "short_label": "WHEEL ROTOR",
    "action": "Chooses rotary speaker OFF, SLOW or FAST.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "293",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L293"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "12-28",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L12-L28"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "short_label": "GRAIN RATE",
    "action": "Sets how often grains are started.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "442",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L442"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "short_label": "GRAIN TONE",
    "action": "Sets the grains’ low-pass tone filter.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "446",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L446"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "21-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L21-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "turn",
    "short_label": "FM6 RATIO",
    "action": "Offsets the coarse frequency ratios of ratio-mode modulators.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "373",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L373"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "turn",
    "short_label": "FM6 PATCH",
    "action": "Loads factory patch F1–F8 or bank patch B1–B27, replacing any unbanked editor patch on this track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L377"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "13-24",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L13-L24"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "208-218",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L208-L218"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "turn",
    "short_label": "PHYS DAMPING",
    "action": "Sets the physical model’s decay.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "turn",
    "short_label": "PHYS EXCITER",
    "action": "Mixes the direct exciter sound into the model’s output.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "274",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L274"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "7-27",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L7-L27"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "54-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L54-L69"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "turn",
    "short_label": "NOISE RES",
    "action": "Sets noise filter resonance from low-pass toward band-pass.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "266",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L266"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "turn",
    "short_label": "NOISE CRUSH",
    "action": "Sets crushing in ANLG or DUST, or clock pitch above the key in LFSR or META.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "222-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L222-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "5-14",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L5-L14"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     }
    ]
   },
   {
    "mode": "edit_lofi_step",
    "gesture": "turn",
    "short_label": "LOFI DECAY",
    "action": "Chooses constant volume, a one-shot stepped decay or a repeating stepped envelope instead of crushing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "42-56",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L42-L56"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_noise_lfsr",
    "gesture": "turn",
    "short_label": "NOISE CLOCK",
    "action": "Sets the register clock’s pitch above the played note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "edit_noise_meta",
    "gesture": "turn",
    "short_label": "NOISE CLOCK",
    "action": "Sets the register clock’s pitch above the played note.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "20-52",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L20-L52"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "534-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L534-L615"
     }
    ]
   },
   {
    "mode": "page_presets",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned browser action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "551-560",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L551-L560"
     }
    ]
   },
   {
    "mode": "page_user",
    "gesture": "turn",
    "short_label": "SAVE SOUND",
    "action": "After two clockwise detents within about 1.5 seconds while stopped, save the selected synth sound and its reduced sixteen-step sketch by rewriting its whole sixteen-sound bank, retaining untouched records only from a recognised bank and providing no undo for overwritten work.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "561-578",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L561-L578"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "3-12",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L3-L12"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "294-324",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L294-L324"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "85-103",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L85-L103"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "205-233",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L205-L233"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "47-53",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L47-L53"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/upreset.c",
      "lines": "173-195",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L173-L195"
     }
    ]
   },
   {
    "mode": "page_project",
    "gesture": "turn",
    "short_label": "SAVE SECTION",
    "action": "Writes the whole working project over the selected section in flash after two clockwise detents within about 1.5 seconds while stopped, without undo for its previous saved project.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "593-624",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L593-L624"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "531-545",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L531-L545"
     }
    ]
   },
   {
    "mode": "page_tools",
    "gesture": "turn",
    "short_label": "NEW PROJECT",
    "action": "Resets every working track, its pattern, sounds and most loop settings after two clockwise detents within about 1.5 seconds, keeps section slots and device MIDI settings, offers only the drum track’s pattern undo and can later autosave the reset.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "502-532",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L502-L532"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "639-648",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L639-L648"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "page_step",
    "gesture": "turn",
    "short_label": "STEP FLAGS",
    "action": "Chooses no flag, accent, slide or accent and slide for the current synth step.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "493-498",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L493-L498"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "turn",
    "short_label": "SONG SIZE",
    "action": "Changes the song order’s entry count while stopped and leaves the order in memory until it is saved.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "77-83",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L77-L83"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "turn",
    "short_label": "HIT LEVEL",
    "action": "Changes an existing hit between ghost, soft, normal and hard with pattern undo, except during song playback, and can later autosave the change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "439-441",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L439-L441"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "541-553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L541-L553"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "turn",
    "short_label": "DRUM PAN",
    "action": "Pans the drum track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "555-559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L555-L559"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no assigned setting on this screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "264-276",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L264-L276"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "tapes",
    "gesture": "turn",
    "action": "Choose a preview sound, hearing its phrase after the knob rests for 450 milliseconds when TAPES AUTOPLAY is on, with track 3 also offering 32 individual sounds from BRASIL and BRASIL 2.",
    "short_label": "BROWSE TAPES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "287-312",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L312"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "111-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L111-L130"
     }
    ]
   },
   {
    "mode": "player_playlist",
    "gesture": "turn",
    "action": "On EFFECTS choose SEND, SPACE, MASTER, PARTY or TRACK without wraparound; from PLAYLIST the first turn opens EFFECTS without changing the group.",
    "short_label": "FX GROUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5413-5417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5413-L5417"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "turn",
    "action": "On EFFECTS choose SEND, SPACE, MASTER, PARTY or TRACK without wraparound; from PLAYLIST the first turn opens EFFECTS without changing the group.",
    "short_label": "FX GROUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5413-5417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5413-L5417"
     }
    ]
   },
   {
    "mode": "effects_space",
    "gesture": "turn",
    "action": "On EFFECTS choose SEND, SPACE, MASTER, PARTY or TRACK without wraparound; from PLAYLIST the first turn opens EFFECTS without changing the group.",
    "short_label": "FX GROUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5413-5417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5413-L5417"
     }
    ]
   },
   {
    "mode": "effects_master",
    "gesture": "turn",
    "action": "On EFFECTS choose SEND, SPACE, MASTER, PARTY or TRACK without wraparound; from PLAYLIST the first turn opens EFFECTS without changing the group.",
    "short_label": "FX GROUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5413-5417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5413-L5417"
     }
    ]
   },
   {
    "mode": "effects_party",
    "gesture": "turn",
    "action": "On EFFECTS choose SEND, SPACE, MASTER, PARTY or TRACK without wraparound; from PLAYLIST the first turn opens EFFECTS without changing the group.",
    "short_label": "FX GROUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5413-5417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5413-L5417"
     }
    ]
   },
   {
    "mode": "effects_track",
    "gesture": "turn",
    "action": "On EFFECTS choose SEND, SPACE, MASTER, PARTY or TRACK without wraparound; from PLAYLIST the first turn opens EFFECTS without changing the group.",
    "short_label": "FX GROUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5413-5417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5413-L5417"
     }
    ]
   },
   {
    "mode": "visual_window",
    "gesture": "turn",
    "action": "Choose one of seven visualizer styles with wraparound.",
    "short_label": "WINDOW STYLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "102-103",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L102-L103"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5404-5408",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5404-L5408"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "turn",
    "action": "Choose one of 28 full-screen visualizer styles with wraparound.",
    "short_label": "FULL STYLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1245",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1245"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5409-5412",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5409-L5412"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "LAYER TEMPO",
    "action": "Changes the tempo while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "LAYER TEMPO",
    "action": "Changes the tempo while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "LAYER TEMPO",
    "action": "Changes the tempo while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "LAYER TEMPO",
    "action": "Changes the tempo while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "LAYER TEMPO",
    "action": "Changes the tempo while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "LAYER TEMPO",
    "action": "Changes the tempo while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "turn_while_holding:button_save",
    "short_label": "LAYER TEMPO",
    "action": "Changes the tempo while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "turn",
    "short_label": "PAGE",
    "action": "Moves one tab per turn within the current family and wraps at either end, skipping the ANALOG-only FILTER tab on other engines.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "80-104",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L80-L104"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no action on the SONG screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "85-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L85-L86"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "turn",
    "short_label": "GRID OR KIT",
    "action": "Selects GRID to the left and KIT to the right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "513-517",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L513-L517"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "turn",
    "short_label": "GRID OR KIT",
    "action": "Selects GRID to the left and KIT to the right.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "513-517",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L513-L517"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "turn",
    "short_label": "KEY LIGHT FX",
    "action": "Cycles the six key-light animations, previews the selection and schedules its save when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "264-276",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L264-L276"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "tapes",
    "gesture": "turn",
    "action": "Choose a preview sound, hearing its phrase after the knob rests for 450 milliseconds when TAPES AUTOPLAY is on, with track 3 also offering 32 individual sounds from BRASIL and BRASIL 2.",
    "short_label": "BROWSE TAPES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "287-312",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L312"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "111-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L111-L130"
     }
    ]
   },
   {
    "mode": "player_playlist",
    "gesture": "turn",
    "action": "Choose a factory or saved user sound for the selected synth track with wraparound, or a drum kit without wraparound, preserving the current pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "363-394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L363-L394"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "turn",
    "action": "Choose a factory or saved user sound for the selected synth track with wraparound, or a drum kit without wraparound, preserving the current pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "363-394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L363-L394"
     }
    ]
   },
   {
    "mode": "effects_space",
    "gesture": "turn",
    "action": "Choose a factory or saved user sound for the selected synth track with wraparound, or a drum kit without wraparound, preserving the current pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "363-394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L363-L394"
     }
    ]
   },
   {
    "mode": "effects_master",
    "gesture": "turn",
    "action": "Choose a factory or saved user sound for the selected synth track with wraparound, or a drum kit without wraparound, preserving the current pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "363-394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L363-L394"
     }
    ]
   },
   {
    "mode": "effects_party",
    "gesture": "turn",
    "action": "Choose a factory or saved user sound for the selected synth track with wraparound, or a drum kit without wraparound, preserving the current pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "363-394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L363-L394"
     }
    ]
   },
   {
    "mode": "effects_track",
    "gesture": "turn",
    "action": "Choose a factory or saved user sound for the selected synth track with wraparound, or a drum kit without wraparound, preserving the current pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "363-394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L363-L394"
     }
    ]
   },
   {
    "mode": "visual_window",
    "gesture": "turn",
    "action": "Choose a factory or saved user sound for the selected synth track with wraparound, or a drum kit without wraparound, preserving the current pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "363-394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L363-L394"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "turn",
    "action": "Choose a factory or saved user sound for the selected synth track with wraparound, or a drum kit without wraparound, preserving the current pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "363-394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L363-L394"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Does nothing on parameter pages other than PRESETS, preventing an accidental sound replacement.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1294",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1294"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_seq_steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "LOCK VALUE",
    "action": "Edits the chosen parameter’s lock on every held step from its track value and keeps edited steps on release; new locks fail with a message once all 24 track lock slots are used, and lock edits cannot be undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "183-208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L183-L208"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "475-480",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L475-L480"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/core.h",
      "lines": "200-207",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/core.h#L200-L207"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "748-771",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L748-L771"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing unless a step key is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "475-485",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L475-L485"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1207-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1207-L1208"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "turn",
    "short_label": "-",
    "action": "Changes no sound on parameter tabs other than PRESETS.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1295",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1295"
     }
    ]
   },
   {
    "mode": "page_presets",
    "gesture": "turn",
    "short_label": "BROWSE SOUND",
    "action": "Browses and immediately loads synth sounds across the engines and occupied user sound slots, replacing current unsaved sound edits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1286-1295",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1286-L1295"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no action on the SONG screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "85-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L85-L86"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "turn",
    "short_label": "DRUM KIT",
    "action": "Selects the drum kit, stopping at either end of the kit list.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "525",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L525"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "turn",
    "short_label": "DRUM KIT",
    "action": "Selects the drum kit, stopping at either end of the kit list.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "525",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L525"
     }
    ]
   },
   {
    "mode": "preferences",
    "gesture": "turn",
    "short_label": "MENU ITEM",
    "action": "Moves to the next or previous visible menu item, wrapping and skipping BRIGHTNESS.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "337-339",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L337-L339"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "turn",
    "short_label": "KEY LIGHT FX",
    "action": "Cycles the six key-light animations, previews the selection and schedules its save when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "264-276",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L264-L276"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_importer",
    "gesture": "turn",
    "short_label": "SAMPLE SLOT",
    "action": "Selects the previous or next uploaded sample slot, wrapping between USR1 and USR4.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "67-82",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L67-L82"
     }
    ]
   },
   {
    "mode": "pref_about_memory",
    "gesture": "turn",
    "short_label": "ABOUT VIEW",
    "action": "Flips between memory usage and credits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "251-257",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L251-L257"
     }
    ]
   },
   {
    "mode": "pref_about_credits",
    "gesture": "turn",
    "short_label": "ABOUT VIEW",
    "action": "Flips between memory usage and credits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "251-257",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L251-L257"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "tapes",
    "gesture": "turn",
    "action": "Choose tracks 1, 2, 3 or D with wraparound, restoring an unkept preview before changing tracks.",
    "short_label": "TAPE TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "295-299",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L295-L299"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "168-179",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L168-L179"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Outside menus, held layers, SONG, DRUM and a free take, choose tracks 1, 2, 3 or D without wraparound, with recording following the chosen track.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1296-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1296-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "673-687",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L673-L687"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "turn_while_holding:button_fx",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "turn_while_holding:button_edit",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "turn_while_holding:button_arp",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "turn_while_holding:button_sel",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "turn_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "turn_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing while this layer is held or locked.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1202-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1202-L1208"
     }
    ]
   },
   {
    "mode": "held_seq_steps",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "LOCK CHOICE",
    "action": "Cycles usable lock parameters, initially using the last sound parameter touched.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "249-260",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L249-L260"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "475-484",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L475-L484"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "600",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L600"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "turn_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing unless a step key is held.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "475-485",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L475-L485"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1207-1208",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1207-L1208"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects another track unless a free take owns the controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1296-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1296-L1297"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "turn",
    "short_label": "-",
    "action": "Has no action on the SONG screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "85-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L85-L86"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects another track and returns to the player when the drum track is left, except during a free take.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "518-523",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L518-L523"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "turn",
    "short_label": "TRACK",
    "action": "Selects another track and returns to the player when the drum track is left, except during a free take.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "518-523",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L518-L523"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "tapes",
    "gesture": "press",
    "action": "Replace the selected track sound and pattern with the preview and its 32-step synth phrase or 16-step drum beat without a question or a new undo point, then start playback and later autosave the working project.",
    "short_label": "COPY TAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "314-328",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L314-L328"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "6420-6449",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L6420-L6449"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "621-653",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L621-L653"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "SEL LAYER",
    "action": "Gives keys and knobs this button’s layer jobs while held, showing the layer after 140 ms or a key or knob use.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-952",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L952"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "SEL PAGES",
    "action": "Opens the scale pages after an untouched press shorter than 450 ms, unless a menu or confirmation is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L31-L32"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-843",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L843"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "894-899",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L894-L899"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "release",
    "short_label": "SCALE PAGES",
    "action": "Opens the remembered SEL tab, or advances to the next tab when that family is already open, after a brief tap without using its held layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-846",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L846"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-900",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L900"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   },
   {
    "mode": "preferences",
    "gesture": "press",
    "short_label": "MENU ENTER",
    "action": "Opens the selected information, importer or keyboard-lighting screen, or toggles the selected setting or clears learned MIDI assignments.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "340-399",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L340-L399"
     }
    ]
   },
   {
    "mode": "pref_lowcut",
    "gesture": "press",
    "short_label": "LOWCUT MODE",
    "action": "Toggles LOWCUT without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "341-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L341-L347"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_usb_audio",
    "gesture": "press",
    "short_label": "TOGGLE USB",
    "action": "Toggles USB AUDIO without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "348-351",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L348-L351"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_boot_sound",
    "gesture": "press",
    "short_label": "TOGGLE SOUND",
    "action": "Toggles BOOT SOUND without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "352-356",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L352-L356"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_tape_auto",
    "gesture": "press",
    "short_label": "AUTO PREVIEW",
    "action": "Toggles TAPES AUTOPLAY without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "366-370",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L366-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_usb_serial",
    "gesture": "press",
    "short_label": "SERIAL MODE",
    "action": "Toggles USB SERIAL without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "357-361",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L357-L361"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_clear_learn",
    "gesture": "press",
    "short_label": "CLEAR LEARNS",
    "action": "Forgets every learned MIDI CC assignment immediately without another confirmation or undo, then saves the changed device settings later when stopped and quiet or at menu close.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "362-365",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L362-L365"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "727-734",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L727-L734"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "tapes",
    "gesture": "press",
    "action": "Leave TAPES and restore the unkept preview sound, solo state and paused playback.",
    "short_label": "CANCEL TAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "136-179",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L136-L179"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "237-241",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L237-L241"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press",
    "action": "On synth tracks without a held layer or special screen, shift the playable range one octave down within three octaves of the centre.",
    "short_label": "OCTAVE DOWN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1262-1270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1262-L1270"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "On a synth track, press both octave buttons to return the keyboard to its middle octave.",
    "short_label": "CENTRE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1262-1270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1262-L1270"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "On a synth track, hold both octave buttons for 0.8 seconds to restore its four effect sends to that sound’s defaults without a question, with no dedicated undo and a later working-project autosave.",
    "short_label": "FX RESET .8s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1039-1051",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1039-L1051"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "435-445",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L435-L445"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "621-653",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L621-L653"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_with:button_oct_up",
    "action": "While stopped, hold both octave buttons beyond five seconds to enter USB update mode and flush pending work, remembering that on synth tracks outside menus the earlier 0.8-second hold already resets the four sends and that releasing before update mode leaves that reset in place.",
    "short_label": "UPDATE 5s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/main.c",
      "lines": "243-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L243-L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1039-1051",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1039-L1051"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "435-446",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L435-L446"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1048-1057",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1048-L1057"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "REVERB THROW",
    "action": "Feeds the mix into the reverb while held with FX.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "953-962",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L953-L962"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "THROW END",
    "action": "Stops feeding this throw on release, leaving its tail.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "953-962",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L953-L962"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "UNDO",
    "action": "Restores the last marked track’s notes or drum hits and length, leaving locks, nudge and fill conditions unchanged; stored sections, project loads and live lane mutes cannot be undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "964-975",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L964-L975"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "443-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/core.h",
      "lines": "194-242",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/core.h#L194-L242"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "PREV PAGE",
    "action": "Moves to the previous sixteen-step page, wrapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "977-991",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L977-L991"
     }
    ]
   },
   {
    "mode": "held_seq_steps",
    "gesture": "press_while_holding:button_seq",
    "short_label": "CLEAR EXTRAS",
    "action": "Clears nudge, parameter locks and fill conditions from every held step immediately without asking or undo, keeping its notes and allowing the changed working project to autosave later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "261-280",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L261-L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "977-988",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L977-L988"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "press",
    "short_label": "SONG OR LOOP",
    "action": "Switches between song playback and repeating the working loop while stopped.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "37-45",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L37-L45"
     }
    ]
   },
   {
    "mode": "preferences",
    "gesture": "press",
    "short_label": "CLOSE MENU",
    "action": "Close the menu and save settings immediately while stopped or later when stopped and quiet, with the first close able to write defaults without an edit when previous settings were unreadable and no overwrite question.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "243-249",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L243-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "730-754",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L730-L754"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "896-911",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L896-L911"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "press",
    "short_label": "MENU BACK",
    "action": "Returns to the preferences list without another confirmation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "243-249",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L243-L249"
     }
    ]
   },
   {
    "mode": "pref_importer",
    "gesture": "press",
    "short_label": "MENU BACK",
    "action": "Returns to the preferences list without another confirmation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "243-249",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L243-L249"
     }
    ]
   },
   {
    "mode": "pref_about_memory",
    "gesture": "press",
    "short_label": "MENU BACK",
    "action": "Returns to the preferences list without another confirmation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "243-249",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L243-L249"
     }
    ]
   },
   {
    "mode": "pref_about_credits",
    "gesture": "press",
    "short_label": "MENU BACK",
    "action": "Returns to the preferences list without another confirmation.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "243-249",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L243-L249"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "On synth tracks without a held layer or special screen, shift the playable range one octave up within three octaves of the centre.",
    "short_label": "OCTAVE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1262-1270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1262-L1270"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "ECHO THROW",
    "action": "Feeds the mix into the echo while held with FX.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "953-962",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L953-L962"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "THROW END",
    "action": "Stops feeding this throw on release, leaving its tail.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "953-962",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L953-L962"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "REDO",
    "action": "Reapplies the last marked track’s notes or drum hits and length, leaving locks, nudge and fill conditions unchanged; stored sections, project loads and live lane mutes cannot be undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "964-975",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L964-L975"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "443-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/core.h",
      "lines": "194-242",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/core.h#L194-L242"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "NEXT PAGE",
    "action": "Moves to the next sixteen-step page, wrapping.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "977-991",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L977-L991"
     }
    ]
   },
   {
    "mode": "held_seq_steps",
    "gesture": "press_while_holding:button_seq",
    "short_label": "FILL RULE",
    "action": "Cycles held steps together through normal, fill only and no fill using the first held step’s next setting, without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "282-302",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L282-L302"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "977-988",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L977-L988"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "press",
    "short_label": "RECALL SONG",
    "action": "Loads the cursor entry’s saved section into the working loop after two presses within three seconds while stopped, replacing unsaved loop changes without an undo snapshot.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "46-55",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L46-L55"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "580-615",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L580-L615"
     }
    ]
   },
   {
    "mode": "preferences",
    "gesture": "press",
    "short_label": "MENU ENTER",
    "action": "Opens the selected information, importer or keyboard-lighting screen, or toggles the selected setting or clears learned MIDI assignments.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "340-399",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L340-L399"
     }
    ]
   },
   {
    "mode": "pref_lowcut",
    "gesture": "press",
    "short_label": "LOWCUT MODE",
    "action": "Toggles LOWCUT without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "341-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L341-L347"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_usb_audio",
    "gesture": "press",
    "short_label": "TOGGLE USB",
    "action": "Toggles USB AUDIO without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "348-351",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L348-L351"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_boot_sound",
    "gesture": "press",
    "short_label": "TOGGLE SOUND",
    "action": "Toggles BOOT SOUND without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "352-356",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L352-L356"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_tape_auto",
    "gesture": "press",
    "short_label": "AUTO PREVIEW",
    "action": "Toggles TAPES AUTOPLAY without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "366-370",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L366-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_usb_serial",
    "gesture": "press",
    "short_label": "SERIAL MODE",
    "action": "Toggles USB SERIAL without another confirmation, saving the setting at menu close when stopped or later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "357-361",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L357-L361"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "pref_clear_learn",
    "gesture": "press",
    "short_label": "CLEAR LEARNS",
    "action": "Forgets every learned MIDI CC assignment immediately without another confirmation or undo, then saves the changed device settings later when stopped and quiet or at menu close.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "362-365",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L362-L365"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "727-734",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L727-L734"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "235-236",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L235-L236"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "90-99",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L90-L99"
     }
    ]
   }
  ],
  "switch_power": [
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down",
    "action": "Switch on while holding physical OCT- alone to enter USB rescue without normal startup cleanup or project loading, which can also happen automatically after two failed starts tracked across resets.",
    "short_label": "USB RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/bootguard.h",
      "lines": "27-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/bootguard.h#L27-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/recovery.c",
      "lines": "41-69",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/recovery.c#L41-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/bootguard.h",
      "lines": "15-29",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/bootguard.h#L15-L29"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/main.c",
      "lines": "335-358",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L335-L358"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Change the audio output volume; USB recording follows it in USB AUDIO MASTER and stays full-level in USB AUDIO FULL.",
    "short_label": "MASTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/main.c",
      "lines": "234-241",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L234-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/fx.c",
      "lines": "1118-1130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/fx.c#L1118-L1130"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "player_playlist",
    "gesture": "shows",
    "action": "Shows the player with transport, spectrum, selected sound and track status above the sound list.",
    "short_label": "PLAYLIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5165-5205",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5165-L5205"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "shows",
    "action": "Shows the player with transport, spectrum, selected sound and track status above the SEND controls.",
    "short_label": "SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5165-5205",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5165-L5205"
     }
    ]
   },
   {
    "mode": "effects_space",
    "gesture": "shows",
    "action": "Shows the player with transport, spectrum, selected sound and track status above the SPACE controls.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5165-5205",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5165-L5205"
     }
    ]
   },
   {
    "mode": "effects_master",
    "gesture": "shows",
    "action": "Shows the player with transport, spectrum, selected sound and track status above the MASTER controls.",
    "short_label": "MASTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5165-5205",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5165-L5205"
     }
    ]
   },
   {
    "mode": "effects_party",
    "gesture": "shows",
    "action": "Shows the player with transport, spectrum, selected sound and track status above the PARTY controls.",
    "short_label": "PARTY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5165-5205",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5165-L5205"
     }
    ]
   },
   {
    "mode": "effects_track",
    "gesture": "shows",
    "action": "Shows the player with transport, spectrum, selected sound and track status above the TRACK controls.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5165-5205",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5165-L5205"
     }
    ]
   },
   {
    "mode": "visual_window",
    "gesture": "shows",
    "action": "Shows the selected small visualizer beneath the player.",
    "short_label": "VIS WINDOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "101-105",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L101-L105"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5198-5205",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5198-L5205"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen SCOPE scene selected with SELECT.",
    "short_label": "SCOPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen BARS scene selected with SELECT.",
    "short_label": "BARS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen MILK scene selected with SELECT.",
    "short_label": "MILK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen RAYS scene selected with SELECT.",
    "short_label": "RAYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen SHIP scene selected with SELECT.",
    "short_label": "SHIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen RACER scene selected with SELECT.",
    "short_label": "RACER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen DRIVE scene selected with SELECT.",
    "short_label": "DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen SYNTH scene selected with SELECT.",
    "short_label": "SYNTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen WATERFALL scene selected with SELECT.",
    "short_label": "WATERFALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen CURVES scene selected with SELECT.",
    "short_label": "CURVES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen FLOW scene selected with SELECT.",
    "short_label": "FLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen TARGET scene selected with SELECT.",
    "short_label": "TARGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen HOUND scene selected with SELECT.",
    "short_label": "HOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen BOXER scene selected with SELECT.",
    "short_label": "BOXER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen CHORDS scene selected with SELECT.",
    "short_label": "CHORDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen ORB scene selected with SELECT.",
    "short_label": "ORB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen DANCE scene selected with SELECT.",
    "short_label": "DANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen BLUEPRINT scene selected with SELECT.",
    "short_label": "BLUEPRINT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen PATCH scene selected with SELECT.",
    "short_label": "PATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen TAPE scene selected with SELECT.",
    "short_label": "TAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen NEO scene selected with SELECT.",
    "short_label": "NEO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen SMOKE scene selected with SELECT.",
    "short_label": "SMOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen DOOMSCROLL scene selected with SELECT.",
    "short_label": "DOOMSCROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen ROOM scene selected with SELECT.",
    "short_label": "ROOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen FLOAT scene selected with SELECT.",
    "short_label": "FLOAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen DUEL scene selected with SELECT.",
    "short_label": "DUEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen LOFI STUDY scene selected with SELECT.",
    "short_label": "LOFI STUDY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "visual_full",
    "gesture": "shows",
    "action": "Shows the full-screen RACCOON scene selected with SELECT.",
    "short_label": "RACCOON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "1234-1248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L1234-L1248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4574-4610",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4574-L4610"
     }
    ]
   },
   {
    "mode": "tapes",
    "gesture": "shows",
    "action": "Shows the chosen sound as a cassette, its preview state and copy controls.",
    "short_label": "TAPES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "6393-6408",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L6393-L6408"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "287-335",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L287-L335"
     }
    ]
   },
   {
    "mode": "recorder_arm",
    "gesture": "shows",
    "action": "Shows the armed recorder with mode, length and start options.",
    "short_label": "RECORDER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5198-5200",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5198-L5200"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "996-1025",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L996-L1025"
     }
    ]
   },
   {
    "mode": "recorder_take",
    "gesture": "shows",
    "action": "Shows the running tape recorder, input activity and captured take progress.",
    "short_label": "FREE TAKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5198-5200",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5198-L5200"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "118-140",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L118-L140"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "shows",
    "action": "Shows the recorder count before tempo recording begins.",
    "short_label": "COUNT IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2434-2448",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2434-L2448"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5198-5200",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5198-L5200"
     }
    ]
   },
   {
    "mode": "usb_rescue",
    "gesture": "shows",
    "action": "Shows SLOOP USB RESCUE and asks for the USB installer, with audio stopped.",
    "short_label": "USB RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/recovery.c",
      "lines": "52-68",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/recovery.c#L52-L68"
     }
    ]
   },
   {
    "mode": "update_mode",
    "gesture": "shows",
    "action": "Shows UBOOT after pending saves have been flushed.",
    "short_label": "UBOOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/main.c",
      "lines": "260-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L260-L270"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "shows",
    "short_label": "ENV",
    "action": "Shows the ENV parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "388",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L388"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "shows",
    "short_label": "ENV DEST",
    "action": "Shows the ENV DEST parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "389",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L389"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "shows",
    "short_label": "LFO",
    "action": "Shows the LFO parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "391",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L391"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_lfo2",
    "gesture": "shows",
    "short_label": "LFO 2",
    "action": "Shows the LFO 2 parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "392",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L392"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "shows",
    "short_label": "LFO DEST",
    "action": "Shows the LFO DEST parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "393",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L393"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "shows",
    "short_label": "FX",
    "action": "Shows the FX parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "394",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L394"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "shows",
    "short_label": "SLICER",
    "action": "Shows the SLICER parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_delay",
    "gesture": "shows",
    "short_label": "DLY",
    "action": "Shows the DLY parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "397",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L397"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_reverb_chorus",
    "gesture": "shows",
    "short_label": "REV/CHO",
    "action": "Shows the REV/CHO parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_filter_mix",
    "gesture": "shows",
    "short_label": "FILT/MIX",
    "action": "Shows the FILT/MIX parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_sel",
    "gesture": "shows",
    "short_label": "SEL",
    "action": "Shows the SEL parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_sel2",
    "gesture": "shows",
    "short_label": "SEL 2",
    "action": "Shows the SEL 2 parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_analog_filter",
    "gesture": "shows",
    "short_label": "FILTER",
    "action": "Shows the FILTER (ANALOG) parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "shows",
    "short_label": "VOICE",
    "action": "Shows the VOICE parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_voice2",
    "gesture": "shows",
    "short_label": "VOICE 2",
    "action": "Shows the VOICE 2 parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "shows",
    "short_label": "GLOBAL",
    "action": "Shows the GLOBAL parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "shows",
    "short_label": "MASTER",
    "action": "Shows the MASTER parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "shows",
    "short_label": "SYSTEM",
    "action": "Shows the SYSTEM parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_drum_settings",
    "gesture": "shows",
    "short_label": "DRUMS",
    "action": "Shows the DRUMS settings parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "411",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L411"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_midi",
    "gesture": "shows",
    "short_label": "MIDI",
    "action": "Shows the MIDI parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "76-87",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L76-L87"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "2127-2143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2127-L2143"
     }
    ]
   },
   {
    "mode": "page_midi2",
    "gesture": "shows",
    "short_label": "MIDI 2",
    "action": "Shows the MIDI 2 parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_texture",
    "gesture": "shows",
    "short_label": "TEXTURE",
    "action": "Shows the TEXTURE parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_texture2",
    "gesture": "shows",
    "short_label": "TEXTURE 2",
    "action": "Shows the TEXTURE 2 parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "shows",
    "short_label": "ARP",
    "action": "Shows the ARP parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "422",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L422"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_arp2",
    "gesture": "shows",
    "short_label": "ARP 2",
    "action": "Shows the ARP 2 parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "423",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L423"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "shows",
    "short_label": "PATTERN",
    "action": "Shows the PATTERN parameter tab in the player’s lower window.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_insert_off",
    "gesture": "shows",
    "short_label": "INSERT",
    "action": "Shows insert type and its three type-dependent controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_insert_drive",
    "gesture": "shows",
    "short_label": "INSERT",
    "action": "Shows insert type and its three type-dependent controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_insert_crush",
    "gesture": "shows",
    "short_label": "INSERT",
    "action": "Shows insert type and its three type-dependent controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_insert_sweep",
    "gesture": "shows",
    "short_label": "INSERT",
    "action": "Shows insert type and its three type-dependent controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "200-226",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L200-L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four ANALOG controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "164-167",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L164-L167"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four ANALOG controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_analog.c",
      "lines": "168-171",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_analog.c#L168-L171"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four DIGITAL controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "148-151",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L148-L151"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four DIGITAL controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_digital.c",
      "lines": "152-155",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_digital.c#L152-L155"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four PHASE controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "188-191",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L188-L191"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four PHASE controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phase.c",
      "lines": "192-195",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phase.c#L192-L195"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four LOFI controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "221-224",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L221-L224"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four LOFI controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_lofi.c",
      "lines": "225-228",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_lofi.c#L225-L228"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four SAMPLE controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "207-210",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L207-L210"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four SAMPLE controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_sample.c",
      "lines": "211-214",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_sample.c#L211-L214"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four VOICE controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "230-233",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L230-L233"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four VOICE controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_formant.c",
      "lines": "234-237",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_formant.c#L234-L237"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four TRIO controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "383-386",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L383-L386"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four TRIO controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_trio.c",
      "lines": "387-390",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_trio.c#L387-L390"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four WHEEL controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "286-289",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L286-L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four WHEEL controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_drawbar.c",
      "lines": "290-293",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_drawbar.c#L290-L293"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four GRAIN controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "439-442",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L439-L442"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four GRAIN controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_grain.c",
      "lines": "443-446",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_grain.c#L443-L446"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_fm6_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four FM6 controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "370-373",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L370-L373"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_fm6_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four FM6 controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_fm6.c",
      "lines": "374-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_fm6.c#L374-L377"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_phys_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four PHYS controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "267-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L267-L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_phys_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four PHYS controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_phys.c",
      "lines": "271-274",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_phys.c#L271-L274"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_noise_1",
    "gesture": "shows",
    "short_label": "EDIT 1",
    "action": "Shows the four NOISE controls on EDIT 1.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "263-266",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L263-L266"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "edit_noise_2",
    "gesture": "shows",
    "short_label": "EDIT 2",
    "action": "Shows the four NOISE controls on EDIT 2.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "402-403",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L402-L403"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/eng_noise.c",
      "lines": "267-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/eng_noise.c#L267-L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_presets",
    "gesture": "shows",
    "short_label": "PRESETS",
    "action": "Shows the selected synth track’s preset browser as a playlist.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5178-5181",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5178-L5181"
     }
    ]
   },
   {
    "mode": "page_user",
    "gesture": "shows",
    "short_label": "USER",
    "action": "Shows user sound slot names and the LOAD, ERASE and SAVE knob positions.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5014-5040",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5014-L5040"
     }
    ]
   },
   {
    "mode": "page_project",
    "gesture": "shows",
    "short_label": "PROJECT",
    "action": "Shows the selected section slot with erase, load and save controls.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_tools",
    "gesture": "shows",
    "short_label": "TOOLS",
    "action": "Shows tools to clear the selected pattern, initialize the synth sound and start a new working project.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4630-4704",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4630-L4704"
     }
    ]
   },
   {
    "mode": "page_step",
    "gesture": "shows",
    "short_label": "STEP",
    "action": "Shows the synth step editor, its selected step and the step’s notes, length or timing and flags.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4901-4935",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4901-L4935"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "453-498",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L453-L498"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "shows",
    "short_label": "SONG",
    "action": "Shows the section order as a playlist, its bar counts, empty sections and current playback progress.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4860-4898",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4860-L4898"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "shows",
    "short_label": "DRUM GRID",
    "action": "Shows eight drum lanes around the selected sound and sixteen steps of the current bank, with level colours, playback and cursor markers.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4987-5008",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4987-L5008"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "shows",
    "short_label": "DRUM KIT",
    "action": "Shows the sixteen named drum pads with hit and selection marks plus kit, level, reverb and pan values.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "4955-4985",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L4955-L4985"
     }
    ]
   },
   {
    "mode": "preferences",
    "gesture": "shows",
    "short_label": "PREFERENCES",
    "action": "Shows the settings list and current values, with BRIGHTNESS hidden and SKINS marked SOON.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5503-5541",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5503-L5541"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "pref_keyboard_led",
    "gesture": "shows",
    "short_label": "KEYBOARD LED",
    "action": "Shows WAVES, FADE, EXPLOSION, RAIN, COMET or FIREWORKS plus speed, fade and ONCE or HOLD.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5571-5594",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5571-L5594"
     }
    ]
   },
   {
    "mode": "pref_importer",
    "gesture": "shows",
    "short_label": "IMPORTER",
    "action": "Shows uploaded sample slot names and sizes, total usage and REC’s erase progress.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5596-5629",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5596-L5629"
     }
    ]
   },
   {
    "mode": "pref_about_memory",
    "gesture": "shows",
    "short_label": "ABOUT MEMORY",
    "action": "Shows firmware, RAM, pool and sample usage.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5631-5651",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5631-L5651"
     }
    ]
   },
   {
    "mode": "pref_about_credits",
    "gesture": "shows",
    "short_label": "CREDITS",
    "action": "Shows firmware, interface, engine, community and licence credits.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5652-5660",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5652-L5660"
     }
    ]
   },
   {
    "mode": "midi_program_change",
    "gesture": "shows",
    "short_label": "MIDI PROGRAM",
    "action": "Shows the destination track and zero-based program number after an accepted MIDI Program Change.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "611-635",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L611-L635"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "FX LAYER",
    "action": "Gives keys and knobs this button’s layer jobs while held, showing the layer after 140 ms or a key or knob use.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-952",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L952"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "FX PAGES",
    "action": "Opens the effects pages after an untouched press shorter than 450 ms, unless a menu or confirmation is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L31-L32"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-843",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L843"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "894-899",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L894-L899"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "release",
    "short_label": "FX PAGES",
    "action": "Opens the remembered FX tab, or advances to the next tab when that family is already open, after a brief tap without using its held layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-846",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L846"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-900",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L900"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "EDIT LAYER",
    "action": "Gives keys and knobs this button’s layer jobs while held, showing the layer after 140 ms or a key or knob use.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-952",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L952"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "EDIT PAGES",
    "action": "Opens edit pages, switches drum GRID and KIT, opens drum editing from drum TRACKS, or clears and advances the cursor during synth STEP entry after an untouched press shorter than 450 ms, unless a menu or confirmation is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L31-L32"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-843",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L843"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "894-899",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L894-L899"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "release",
    "short_label": "EDIT PAGES",
    "action": "Opens the remembered EDIT tab or its next tab after a brief tap, except STEP clears and advances the current step and DRUMS switches GRID and KIT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-846",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L846"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-900",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L900"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   },
   {
    "mode": "page_step",
    "gesture": "release",
    "short_label": "CLEAR STEP",
    "action": "Clears the cursor step and advances after a brief tap, with EDIT plus OCT- able to undo the pattern and later autosave able to persist it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "816-820",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L816-L820"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "964-975",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L964-L975"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "release",
    "short_label": "GRID OR KIT",
    "action": "Switches between GRID and KIT after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "805-810",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L805-L810"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "release",
    "short_label": "GRID OR KIT",
    "action": "Switches between GRID and KIT after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "805-810",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L805-L810"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "ARP LAYER",
    "action": "Gives keys and knobs this button’s layer jobs while held, showing the layer after 140 ms or a key or knob use.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-952",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L952"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "ARP PAGES",
    "action": "Opens the arpeggiator pages after an untouched press shorter than 450 ms, unless a menu or confirmation is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L31-L32"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-843",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L843"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "894-899",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L894-L899"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "release",
    "short_label": "ARP PAGES",
    "action": "Opens the remembered ARP tab, or advances to the next tab when that family is already open, after a brief tap without using its held layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-846",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L846"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-900",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L900"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "SEQ LAYER",
    "action": "Gives keys and knobs this button’s layer jobs while held, showing the layer after 140 ms or a key or knob use.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-952",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L952"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "SEQ PAGES",
    "action": "Opens sequencer pages, switches drum GRID and KIT, or opens drum editing from drum TRACKS after an untouched press shorter than 450 ms, unless a menu or confirmation is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L31-L32"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-843",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L843"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "894-899",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L894-L899"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "release",
    "short_label": "SEQ PAGES",
    "action": "Opens the remembered SEQ tab or its next tab after a brief tap, except DRUMS switches GRID and KIT.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-846",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L846"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-900",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L900"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "release",
    "short_label": "STEP PAGE",
    "action": "Returns from SONG to the STEP tab after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "823-824",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L823-L824"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/params.c",
      "lines": "424-426",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L424-L426"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "release",
    "short_label": "GRID OR KIT",
    "action": "Switches between GRID and KIT after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "805-810",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L805-L810"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "release",
    "short_label": "GRID OR KIT",
    "action": "Switches between GRID and KIT after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "805-810",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L805-L810"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "GLO LAYER",
    "action": "Gives keys and knobs this button’s layer jobs while held, showing the layer after 140 ms or a key or knob use.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-952",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L952"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "GLO PAGES",
    "action": "Opens global pages after an untouched press shorter than 450 ms, unless a menu or confirmation is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L31-L32"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-843",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L843"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "894-899",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L894-L899"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "release",
    "short_label": "GLOBAL PAGES",
    "action": "Opens the remembered GLO tab, or advances to the next tab when that family is already open, after a brief tap without using its held layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-846",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L846"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-900",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L900"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "hold",
    "short_label": "SAVE LAYER",
    "action": "Gives keys and knobs this button’s layer jobs while held, showing the layer after 140 ms or a key or knob use.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-952",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L952"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "short_label": "SAVE PAGES",
    "action": "Opens save pages, opens SONG from TRACKS or drum pages, or saves the song from SONG when stopped after an untouched press shorter than 450 ms, unless a menu or confirmation is open.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "31-32",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L31-L32"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-843",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L843"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "894-899",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L894-L899"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "release",
    "short_label": "START CHAIN",
    "action": "After two or more valid section taps during this hold while a loop plays, repeats their order as a temporary chain of up to eight entries, each lasting the bars of its longest pattern.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "441-455",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L441-L455"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1724-1730",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1724-L1730"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "release",
    "short_label": "SAVE PAGES",
    "action": "Opens the remembered SAVE tab or its next tab after a brief tap, except DRUMS opens SONG and SONG saves the song order.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "798-846",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L798-L846"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "888-900",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L900"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "release",
    "short_label": "SAVE ORDER",
    "action": "Writes the song order and device settings to flash after a brief tap while stopped, without another confirmation and without saving the working loop into a section.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "834-836",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L836"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "998-1008",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L998-L1008"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "release",
    "short_label": "SONG EDITOR",
    "action": "Opens SONG after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "834-840",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L840"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "release",
    "short_label": "SONG EDITOR",
    "action": "Opens SONG after a brief tap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "834-840",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L840"
     }
    ]
   },
   {
    "mode": "effects_send",
    "gesture": "release",
    "short_label": "OPEN SONG",
    "action": "A short untouched tap from the player opens SONG.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "834-842",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L842"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "press",
    "short_label": "ENV PAGES",
    "action": "Opens the remembered ENV tab or advances to its next tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1273-1278",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1273-L1278"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no press action on the SONG screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "26-67",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L26-L67"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no press action on the drum screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "498-511",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L498-L511"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no press action on the drum screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "498-511",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L498-L511"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "layer_locked",
    "gesture": "press",
    "short_label": "UNLOCK",
    "action": "Closes the locked layer and consumes this button press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "878-885",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L878-L885"
     }
    ]
   },
   {
    "mode": "page_tabs",
    "gesture": "press",
    "short_label": "LFO PAGES",
    "action": "Opens the remembered LFO tab or advances to its next tab.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "1273-1278",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1273-L1278"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "276-292",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L276-L292"
     }
    ]
   },
   {
    "mode": "song_editor",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no press action on the SONG screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_song.c",
      "lines": "26-67",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_song.c#L26-L67"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no press action on the drum screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "498-511",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L498-L511"
     }
    ]
   },
   {
    "mode": "drum_kit",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no press action on the drum screen.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "498-511",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L498-L511"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "F3",
    "action": "Plays F3 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 4 scale steps below C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the kick lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the kick lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the kick lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "LOOP 4",
    "action": "Loops a quarter-note span of the recent mix capped by the short capture buffer while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L65-L86"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the kick lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the kick lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the kick lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 1",
    "action": "Selects step 1 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY F",
    "action": "Sets F as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "MUTE 1",
    "action": "Toggles mute for track 1 immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "RECALL A",
    "action": "Loads section A into the current loop while stopped, replacing the working project without asking or undo; during loop playback it queues the section for the next bar and adds it to up to eight chain taps in this SAVE hold, refusing empty sections and song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1023-1028",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1023-L1028"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "441-455",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L441-L455"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 1",
    "action": "Toggles step 1 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "F#3",
    "action": "Plays F#3 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "THIRD SWAP",
    "action": "While held, switches the chord third between major and minor for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the kick lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the kick lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the kick lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "KILL LOW",
    "action": "Cuts bass from the mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "280-289",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L280-L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the kick lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "PAGE 1",
    "action": "Opens step page 1 if the pattern reaches it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY F#",
    "action": "Sets F# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "MIDI LEARN",
    "action": "Switches MIDI learn on or off.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "BANK 1",
    "action": "Selects steps 1–16 when the pattern reaches that bank, keeping the cursor’s position within it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "G3",
    "action": "Plays G3 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 3 scale steps below C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the second kick lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the second kick lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the second kick lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "LOOP 8",
    "action": "Loops an eighth-note span of the recent mix capped by the short capture buffer while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L65-L86"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the second kick lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the second kick lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the second kick lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 2",
    "action": "Selects step 2 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY G",
    "action": "Sets G as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "MUTE 2",
    "action": "Toggles mute for track 2 immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "RECALL B",
    "action": "Loads section B into the current loop while stopped, replacing the working project without asking or undo; during loop playback it queues the section for the next bar and adds it to up to eight chain taps in this SAVE hold, refusing empty sections and song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1023-1028",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1023-L1028"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "441-455",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L441-L455"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 2",
    "action": "Toggles step 2 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "G#3",
    "action": "Plays G#3 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "ADD SEVENTH",
    "action": "While held, adds a scale seventh when the chord has room for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the second kick lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the second kick lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the second kick lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "KILL MID",
    "action": "Cuts the middle band from the mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "280-289",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L280-L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the second kick lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "PAGE 2",
    "action": "Opens step page 2 if the pattern reaches it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY G#",
    "action": "Sets G# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "BANK 2",
    "action": "Selects steps 17–32 when the pattern reaches that bank, keeping the cursor’s position within it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "A3",
    "action": "Plays A3 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 2 scale steps below C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the snare lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the snare lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the snare lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "LOOP 16",
    "action": "Loops a sixteenth-note span of the recent mix capped by the short capture buffer while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L65-L86"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the snare lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the snare lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the snare lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 3",
    "action": "Selects step 3 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY A",
    "action": "Sets A as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "MUTE 3",
    "action": "Toggles mute for track 3 immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "RECALL C",
    "action": "Loads section C into the current loop while stopped, replacing the working project without asking or undo; during loop playback it queues the section for the next bar and adds it to up to eight chain taps in this SAVE hold, refusing empty sections and song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1023-1028",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1023-L1028"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "441-455",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L441-L455"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 3",
    "action": "Toggles step 3 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "A#3",
    "action": "Plays A#3 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "SUSPEND",
    "action": "While held, replaces the chord third with the fourth for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the snare lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the snare lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the snare lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "KILL HIGH",
    "action": "Cuts treble from the mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "280-289",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L280-L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the snare lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "PAGE 3",
    "action": "Opens step page 3 if the pattern reaches it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY A#",
    "action": "Sets A# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "BANK 3",
    "action": "Selects steps 33–48 when the pattern reaches that bank, keeping the cursor’s position within it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "B3",
    "action": "Plays B3 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 1 scale steps below C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the clap lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the clap lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the clap lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "LOOP 32",
    "action": "Loops a thirty-second-note span of the recent mix capped by the short capture buffer while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L65-L86"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the clap lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the clap lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the clap lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 4",
    "action": "Selects step 4 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY B",
    "action": "Sets B as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "MUTE 4",
    "action": "Toggles mute for track 4 immediately.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "RECALL D",
    "action": "Loads section D into the current loop while stopped, replacing the working project without asking or undo; during loop playback it queues the section for the next bar and adds it to up to eight chain taps in this SAVE hold, refusing empty sections and song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1023-1028",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1023-L1028"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "441-455",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L441-L455"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 4",
    "action": "Toggles step 4 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "C4",
    "action": "Plays C4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord at C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the closed hi-hat lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the closed hi-hat lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the closed hi-hat lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "STUTTER",
    "action": "Repeats a one-sixth-beat span of the recent mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L65-L86"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the closed hi-hat lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the closed hi-hat lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the closed hi-hat lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 5",
    "action": "Selects step 5 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY C",
    "action": "Sets C as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "SOLO 1",
    "action": "Toggles solo for track 1, allowing several tracks to be soloed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE A",
    "action": "Captures the working project into section A in memory at once, requiring the same key again within three seconds before replacing a used section; it writes automatically once stopped and quiet after inactivity, without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1011-1022",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1011-L1022"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1104",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1104"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 5",
    "action": "Toggles step 5 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "C#4",
    "action": "Plays C#4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "ADD NINTH",
    "action": "While held, adds a scale ninth, replacing the fifth if four notes are already used for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the closed hi-hat lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the closed hi-hat lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the closed hi-hat lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "REWIND",
    "action": "Slows the recent mix then accelerates backwards until its stored audio runs out while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "345-358",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L345-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the closed hi-hat lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "PAGE 4",
    "action": "Opens step page 4 if the pattern reaches it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY C#",
    "action": "Sets C# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "BANK 4",
    "action": "Selects steps 49–64 when the pattern reaches that bank, keeping the cursor’s position within it.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "D4",
    "action": "Plays D4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 1 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the open hi-hat lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the open hi-hat lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the open hi-hat lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "REVERSE",
    "action": "Replays the recent mix backwards while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "108-133",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L108-L133"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the open hi-hat lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the open hi-hat lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the open hi-hat lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 6",
    "action": "Selects step 6 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY D",
    "action": "Sets D as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "SOLO 2",
    "action": "Toggles solo for track 2, allowing several tracks to be soloed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE B",
    "action": "Captures the working project into section B in memory at once, requiring the same key again within three seconds before replacing a used section; it writes automatically once stopped and quiet after inactivity, without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1011-1022",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1011-L1022"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1104",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1104"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 6",
    "action": "Toggles step 6 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "D#4",
    "action": "Plays D#4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "INVERT",
    "action": "While held, moves the lowest chord tone up an octave for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the open hi-hat lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the open hi-hat lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the open hi-hat lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "OCT UP",
    "action": "Raises the recent mix by an octave while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "359-366",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L359-L366"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the open hi-hat lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing in the held SEQ layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY D#",
    "action": "Sets D# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no grid-step action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "E4",
    "action": "Plays E4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 2 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the pedal hi-hat lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the pedal hi-hat lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the pedal hi-hat lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "STOP",
    "action": "Slows the recent mix to a stop over one beat while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "108-133",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L108-L133"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the pedal hi-hat lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the pedal hi-hat lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the pedal hi-hat lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 7",
    "action": "Selects step 7 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY E",
    "action": "Sets E as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "SOLO 3",
    "action": "Toggles solo for track 3, allowing several tracks to be soloed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE C",
    "action": "Captures the working project into section C in memory at once, requiring the same key again within three seconds before replacing a used section; it writes automatically once stopped and quiet after inactivity, without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1011-1022",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1011-L1022"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1104",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1104"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 7",
    "action": "Toggles step 7 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "F4",
    "action": "Plays F4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 3 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the rim lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the rim lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the rim lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "HALF",
    "action": "Replays the captured mix at half speed while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "108-133",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L108-L133"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the rim lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the rim lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the rim lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 8",
    "action": "Selects step 8 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY F",
    "action": "Sets F as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "SOLO 4",
    "action": "Toggles solo for track 4, allowing several tracks to be soloed.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "STORE D",
    "action": "Captures the working project into section D in memory at once, requiring the same key again within three seconds before replacing a used section; it writes automatically once stopped and quiet after inactivity, without undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1011-1022",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1011-L1022"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1104",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1104"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 8",
    "action": "Toggles step 8 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "F#4",
    "action": "Plays F#4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "THIRD SWAP",
    "action": "While held, switches the chord third between major and minor for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the rim lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the rim lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the rim lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "FLANGER",
    "action": "Sweeps a short stereo delay over the mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "367-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L367-L377"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the rim lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing in the held SEQ layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY F#",
    "action": "Sets F# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no grid-step action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "G4",
    "action": "Plays G4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 4 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the second snare lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the second snare lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the second snare lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "LOW",
    "action": "Sweeps a low-pass filter over the mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "274-291",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L274-L291"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the second snare lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the second snare lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the second snare lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 9",
    "action": "Selects step 9 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY G",
    "action": "Sets G as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "HELD FILL",
    "action": "Enables a fill while held, making fill-only steps play and no-fill steps stay silent.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "release",
    "short_label": "FILL END",
    "action": "Ends the held fill.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "331-337",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L331-L337"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 9",
    "action": "Toggles step 9 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "G#4",
    "action": "Plays G#4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "ADD SEVENTH",
    "action": "While held, adds a scale seventh when the chord has room for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the second snare lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the second snare lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the second snare lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "AUTO-PAN",
    "action": "Moves the mono mix across stereo once per beat while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "378-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L378-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the second snare lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing in the held SEQ layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY G#",
    "action": "Sets G# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no grid-step action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "A4",
    "action": "Plays A4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 5 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the low tom lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the low tom lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the low tom lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "HIGH",
    "action": "Sweeps a high-pass filter over the mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "274-291",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L274-L291"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the low tom lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the low tom lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the low tom lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 10",
    "action": "Selects step 10 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY A",
    "action": "Sets A as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "NEXT FILL",
    "action": "Arms a fill for the next bar, or cancels the pending fill on another press.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 10",
    "action": "Toggles step 10 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "A#4",
    "action": "Plays A#4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "SUSPEND",
    "action": "While held, replaces the chord third with the fourth for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the low tom lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the low tom lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the low tom lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "FREEZE",
    "action": "Holds the reverb and fades the direct mix beneath it while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "386-392",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L386-L392"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the low tom lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing in the held SEQ layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY A#",
    "action": "Sets A# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no grid-step action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "B4",
    "action": "Plays B4 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 6 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the high tom lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the high tom lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the high tom lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "PHONE",
    "action": "Gives the mix a narrow telephone tone while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "310-315",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L310-L315"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the high tom lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the high tom lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the high tom lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 11",
    "action": "Selects step 11 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY B",
    "action": "Sets B as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 11",
    "action": "Toggles step 11 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "C5",
    "action": "Plays C5 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 7 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the crash lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the crash lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the crash lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "CRUSH",
    "action": "Reduces the mix bit depth while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "316-319",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L316-L319"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the crash lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the crash lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the crash lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 12",
    "action": "Selects step 12 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY C",
    "action": "Sets C as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 12",
    "action": "Toggles step 12 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "C#5",
    "action": "Plays C#5 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "ADD NINTH",
    "action": "While held, adds a scale ninth, replacing the fifth if four notes are already used for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the crash lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the crash lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the crash lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "LOOP 8T",
    "action": "Loops an eighth-note-triplet span of the recent mix capped by the short capture buffer while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "65-86",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L65-L86"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the crash lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing in the held SEQ layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY C#",
    "action": "Sets C# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no grid-step action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "D5",
    "action": "Plays D5 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 8 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the ride lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the ride lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the ride lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "ALIAS",
    "action": "Reduces the mix sample rate while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "320-328",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L320-L328"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the ride lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the ride lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the ride lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 13",
    "action": "Selects step 13 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY D",
    "action": "Sets D as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "LOOP / SONG",
    "action": "Switches between loop and song playback unless song recording is active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 13",
    "action": "Toggles step 13 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "D#5",
    "action": "Plays D#5 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "INVERT",
    "action": "While held, moves the lowest chord tone up an octave for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the ride lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the ride lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the ride lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "MONO",
    "action": "Combines the mix into mono while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "393-395",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L393-L395"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the ride lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing in the held SEQ layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY D#",
    "action": "Sets D# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no grid-step action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "E5",
    "action": "Plays E5 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 9 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the shaker lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the shaker lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the shaker lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "GATE",
    "action": "Chops the mix on a sixteenth-note grid while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "329-338",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L329-L338"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the shaker lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the shaker lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the shaker lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 14",
    "action": "Selects step 14 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY E",
    "action": "Sets E as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "SONG RECORD",
    "action": "Arms recording of section order for the next bar, or finishes it on another press, replacing the old song when any bars were recorded and saving automatically once stopped and quiet without confirmation or undo.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1737-1771",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1737-L1771"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1059-1071",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1059-L1071"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "1094-1102",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1094-L1102"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 14",
    "action": "Toggles step 14 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "F5",
    "action": "Plays F5 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 10 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the conga lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the conga lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the conga lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "ECHO",
    "action": "Adds a dotted-eighth echo to the mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "403-410",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L403-L410"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the conga lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the conga lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the conga lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 15",
    "action": "Selects step 15 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY F",
    "action": "Sets F as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 15",
    "action": "Toggles step 15 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "F#5",
    "action": "Plays F#5 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and stays silent in WHITE; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "hold",
    "short_label": "THIRD SWAP",
    "action": "While held, switches the chord third between major and minor for current and new white-key chords, with only inversion affecting POWER chords.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "284-298",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L284-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "321-385",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L321-L385"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1547-1553",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1547-L1553"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "MODIFIER OFF",
    "action": "Removes this modifier from chords still held on the original track.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1607",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1607"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1429-1460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1429-L1460"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the conga lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the conga lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the conga lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "FADE OUT",
    "action": "Fades the mix to silence over two beats while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "396-402",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L396-L402"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE / MUTE",
    "action": "On drums, switches between erasing and temporary lane mutes; on synths, erases this key’s mapped note from current and following steps while held during playback, or from the whole stopped pattern, while WHITE and chord modes leave this key silent; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE MODE",
    "action": "Returns white keys to erasing drum hits while EDIT stays active.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the conga lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "-",
    "action": "Does nothing in the held SEQ layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-347",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L347"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY F#",
    "action": "Sets F# as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "-",
    "action": "Does nothing in the held GLO layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "-",
    "action": "Does nothing in the held SAVE layer.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "-",
    "action": "Has no grid-step action.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "448-460",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L448-L460"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "keys_synth",
    "gesture": "press",
    "short_label": "G5",
    "action": "Plays G5 shifted by octave and transpose when mapping is off, rounds down to the scale in SNAP, and follows the white-key scale in WHITE with C4 at the root; a GM kit instead uses consecutive sounds beginning at C2 before octave shift.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "179-248",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L179-L248"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1586"
     }
    ]
   },
   {
    "mode": "keys_synth",
    "gesture": "release",
    "short_label": "TONE OFF",
    "action": "Releases this key’s notes on their original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1590-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1590-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "press",
    "short_label": "CHORD",
    "action": "Plays a chord 11 scale steps above C4’s root, shifted by octave and transpose and shaped by active black-key modifiers and voice leading, remembering up to four tones for step entry.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "209-234",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L209-L234"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "250-281",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L250-L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1562-1586",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1562-L1586"
     }
    ]
   },
   {
    "mode": "keys_chord",
    "gesture": "release",
    "short_label": "CHORD OFF",
    "action": "Releases this key’s chord on its original track, subject to arp hold or the sustain pedal.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1626",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1626"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1248-1267",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1248-L1267"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press",
    "short_label": "DRUM HIT",
    "action": "Plays the cowbell lane in the selected kit and remembers it for step editing, recording the hit when the drum track is armed and playing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "60-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L60-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1270-1283",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1270-L1283"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_down",
    "short_label": "GHOST HIT",
    "action": "Plays the cowbell lane quietly and records that hit level during recording.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "press_while_holding:button_oct_up",
    "short_label": "HARD HIT",
    "action": "Plays the cowbell lane strongly and records that hit level during recording, unless OCT- is also held and takes priority.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/drums.c",
      "lines": "95-108",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/drums.c#L95-L108"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1412-1418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1412-L1418"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1544",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1544"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "release",
    "short_label": "DRUM OFF",
    "action": "Ends this key’s MIDI note and its free-take hold without cutting off the drum sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1627-1632",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1627-L1632"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "press",
    "short_label": "ENTER TONES",
    "action": "Adds this key’s mapped note or chord to the cursor step, keeping up to four tones in poly mode or the last root in every other voice mode; silent scale keys add nothing.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "730-773",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L730-L773"
     }
    ]
   },
   {
    "mode": "keys_step_entry",
    "gesture": "release",
    "short_label": "NEXT STEP",
    "action": "Advances the cursor once all panel keys and MIDI notes are released after entering notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "774-775",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L774-L775"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "press_while_holding:button_fx",
    "short_label": "WOBBLE",
    "action": "Adds pitch wobble to the recent mix while this key stays down, replacing the previous punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "440-459",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L440-L459"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/punch.c",
      "lines": "121-124",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/punch.c#L121-L124"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1472-1479",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1472-L1479"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "release",
    "short_label": "PUNCH OFF",
    "action": "Restores the unpunched mix if this key started the current punch effect.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1595-1601",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1595-L1601"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "press_while_holding:button_edit",
    "short_label": "ERASE",
    "action": "On drums, erases the cowbell lane unless mute mode is on; on synths, erases this key’s mapped note or chord from the current and following steps while held during playback, or from the whole stopped pattern, without asking; undo can restore removed notes or hits, and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "959-1017",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L959-L1017"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1489-1521",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1489-L1521"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "release",
    "short_label": "ERASE END",
    "action": "Stops erasing the notes or lane assigned when this key went down, leaving erased notes removed until undo restores them.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1608-1614",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1608-L1614"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     }
    ]
   },
   {
    "mode": "held_edit_mute",
    "gesture": "press_while_holding:button_edit",
    "short_label": "LANE MUTE",
    "action": "Toggles the cowbell lane in sequencer playback immediately without asking, while live keys still play it; this temporary state is neither saved nor undone.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "964-969",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L964-L969"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1494-1496",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1494-L1496"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "press_while_holding:button_arp",
    "short_label": "REPEAT HIT",
    "action": "Repeats the cowbell lane on drums or this key’s mapped single synth note at the roll rate, with at most four rolls; black synth keys are silent in WHITE and chord modes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1285-1297",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1285-L1297"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1345-1367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1345-L1367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1531-1559",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1531-L1559"
     }
    ]
   },
   {
    "mode": "held_arp",
    "gesture": "release",
    "short_label": "REPEAT END",
    "action": "Ends the repeat started by this key.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1615-1619",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1615-L1619"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "press_while_holding:button_seq",
    "short_label": "STEP 16",
    "action": "Selects step 16 of this page within the pattern and fills an empty step with the chosen drum lane or remembered notes; an occupied step waits for release before removal, and the press does nothing during song playback.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "117-147",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L117-L147"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "342-350",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L342-L350"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "release",
    "short_label": "REMOVE STEP",
    "action": "Removes an occupied step on release unless edited while held, clearing its locks, nudge and fill condition if no notes remain; undo restores notes and length but not those three extras and the changed working project autosaves later when stopped and quiet.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "149-170",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L149-L170"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "191-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L191-L192"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "453-463",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L453-L463"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui.c",
      "lines": "229-252",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-654",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L654"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "press_while_holding:button_sel",
    "short_label": "KEY G",
    "action": "Sets G as root for all three synth tracks without transposing their saved notes.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "352-357",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L352-L357"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "press_while_holding:button_glo",
    "short_label": "TAP TEMPO",
    "action": "Sets tempo from repeated taps between 40 and 240 BPM, restarting the count after a two-second gap.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "306-322",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L306-L322"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "420-435",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L420-L435"
     }
    ]
   },
   {
    "mode": "held_save",
    "gesture": "press_while_holding:button_save",
    "short_label": "SONG PAGE",
    "action": "Opens the song arrangement page.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_layers.c",
      "lines": "359-418",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L359-L418"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "press",
    "short_label": "STEP 16",
    "action": "Toggles step 16 of the visible bank for the selected drum sound with pattern undo, auditions added hits and clears locks, nudge and fill condition when the step becomes empty, except during song playback; the edited loop can later autosave.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_studio.c",
      "lines": "443-487",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_studio.c#L443-L487"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/project.c",
      "lines": "618-652",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L618-L652"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "press",
    "short_label": "ONE DRUM",
    "action": "Trigger the single percussion sound selected for track 3, provided the current key mapping allows this key to sound.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1546-1579",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1546-L1579"
     }
    ]
   },
   {
    "mode": "keys_percussion",
    "gesture": "release",
    "short_label": "PERC RELEASE",
    "action": "Release this key’s MIDI note while the percussion hit continues to ring.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/seq.c",
      "lines": "1620-1628",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L1620-L1628"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/voice.c",
      "lines": "411-413",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/voice.c#L411-L413"
     }
    ]
   }
  ]
 },
 "lights": {
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks when its layer is locked open and its button is released.",
    "short_label": "LOCKED LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Joins a fading chase driven by the selected track notes, with dim beat pulses during silence.",
    "short_label": "LOOP CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "256-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L256-L270"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks when its layer is locked open and its button is released.",
    "short_label": "LOCKED LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "tapes",
    "gesture": "lit",
    "action": "Marks SEL as the tape-copy button.",
    "short_label": "COPY READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "272",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L272"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Joins a fading chase driven by the selected track notes, with dim beat pulses during silence.",
    "short_label": "LOOP CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "256-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L256-L270"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Joins a fading chase driven by the selected track notes, with dim beat pulses during silence.",
    "short_label": "LOOP CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "256-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L256-L270"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Joins a fading chase driven by the selected track notes, with dim beat pulses during silence.",
    "short_label": "LOOP CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "256-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L256-L270"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks when its layer is locked open and its button is released.",
    "short_label": "LOCKED LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Joins a fading chase driven by the selected track notes, with dim beat pulses during silence.",
    "short_label": "LOOP CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "256-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L256-L270"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks when its layer is locked open and its button is released.",
    "short_label": "LOCKED LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Joins a fading chase driven by the selected track notes, with dim beat pulses during silence.",
    "short_label": "LOOP CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "256-270",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L256-L270"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks when its layer is locked open and its button is released.",
    "short_label": "LOCKED LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks when its layer is locked open and its button is released.",
    "short_label": "LOCKED LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks the current page family or held layer; SONG uses SAVE and DRUM uses SEQ.",
    "short_label": "PAGE / LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks when its layer is locked open and its button is released.",
    "short_label": "LOCKED LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "252-253",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L252-L253"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Flashes with the running beat or count-in, and stays lit for playback during a free take without recording.",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "41-48",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L41-L48"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "254-255",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L254-L255"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Marks active recording or a free take.",
    "short_label": "RECORDING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "273-274",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L273-L274"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Blinks while recording is armed and flashes faster while the track-clear hold fills.",
    "short_label": "ARM / CLEAR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "273-274",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L273-L274"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Shows a lower synth-keyboard octave.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "281-284",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L281-L284"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "lit",
    "action": "Lights while its drum ghost or hard-hit modifier is held.",
    "short_label": "HIT LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "278-280",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L278-L280"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "lit",
    "action": "Lights while its reverb or echo throw is held.",
    "short_label": "THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "275-277",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L275-L277"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Shows a higher synth-keyboard octave.",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "281-284",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L281-L284"
     }
    ]
   },
   {
    "mode": "keys_drums",
    "gesture": "lit",
    "action": "Lights while its drum ghost or hard-hit modifier is held.",
    "short_label": "HIT LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "278-280",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L278-L280"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "lit",
    "action": "Lights while its reverb or echo throw is held.",
    "short_label": "THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "275-277",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L275-L277"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows if the button-backlight preference was inherited from SLOOP or restored, since this version has no LIGHTS menu item.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "397-405",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L397-L405"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Can join the keyboard’s selected light animation.",
    "short_label": "LED EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "369-377",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L369-L377"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Shows pressed keys and drum hits, adding sounding synth notes if NOTES was inherited from SLOOP or restored, since this version has no NOTES menu item.",
    "short_label": "KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "176-196",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L176-L196"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "held_fx",
    "gesture": "lit",
    "action": "Lights the currently requested performance-effect key.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "141-143",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L141-L143"
     }
    ]
   },
   {
    "mode": "held_seq",
    "gesture": "lit",
    "action": "Shows active steps in the current 16-step window, with the playhead blinking.",
    "short_label": "STEP HITS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "144-156",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L144-L156"
     }
    ]
   },
   {
    "mode": "held_sel",
    "gesture": "lit",
    "action": "Shows the scale and blinking root, or dims the scale under played notes if NOTES was inherited or restored, since this version cannot change NOTES on the panel.",
    "short_label": "SCALE / ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "158-161",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L158-L161"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "held_glo",
    "gesture": "lit",
    "action": "Shows audible tracks, active and armed fills, and the tap-tempo beat.",
    "short_label": "MIX STATUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "162-173",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L162-L173"
     }
    ]
   },
   {
    "mode": "held_edit",
    "gesture": "lit",
    "action": "On drums, marks lanes containing hits, dimming them under sounding hits if NOTES was inherited or restored, since this version has no NOTES menu item.",
    "short_label": "ERASE LANES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "174-175",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L174-L175"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Dims the first white key in each four-key group on held layers and the drum track, with any C, white-key or all-key backlight inherited from SLOOP or restored rather than chosen in this version’s menu.",
    "short_label": "LANDMARKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "220-239",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L220-L239"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "390-395",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L390-L395"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/panel.c",
      "lines": "115-130",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L115-L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "5-7",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "Adds FADE, WAVES, EXPLOSION, RAIN, COMET or FIREWORKS animation with the chosen speed, fade and one-shot or held triggering.",
    "short_label": "ANIMATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "286-367",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L286-L367"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_menu.c",
      "lines": "264-275",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L264-L275"
     },
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_winamp.c",
      "lines": "5571-5574",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L5571-L5574"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "flash",
    "action": "At startup, a wave travels along the keys before all keys and buttons fade together.",
    "short_label": "STARTUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/main.c",
      "lines": "132-174",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L132-L174"
     }
    ]
   },
   {
    "mode": "drum_grid",
    "gesture": "lit",
    "short_label": "DRUM GRID",
    "action": "Shows the selected drum sound’s hits in the visible sixteen-step bank, with the playhead blinking and pressed keys added.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "179-192",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L179-L192"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_f3",
   "led_fs3",
   "led_g3",
   "led_gs3",
   "led_a3",
   "led_as3",
   "led_b3",
   "led_c4",
   "led_cs4",
   "led_d4",
   "led_ds4",
   "led_e4",
   "led_f4",
   "led_fs4",
   "led_g4",
   "led_gs4",
   "led_a4",
   "led_as4",
   "led_b4",
   "led_c5",
   "led_cs5",
   "led_d5",
   "led_ds5",
   "led_e5",
   "led_f5",
   "led_fs5",
   "led_g5"
  ]
 },
 "jack_notes": [
  {
   "part": "jack_usb",
   "note": "USB-C carries USB MIDI, the editor protocol, firmware installation and stereo audio recording; USB AUDIO selects whether that recording follows MASTER, and USB SERIAL changes after restarting.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/felucca.c",
     "lines": "35-51",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/felucca.c#L35-L51"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/main.c",
     "lines": "207-210",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L207-L210"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "348-360",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L348-L360"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/fx.c",
     "lines": "1118-1141",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/fx.c#L1118-L1141"
    }
   ]
  },
  {
   "part": "jack_midi_in",
   "note": "The TRS MIDI input can play tracks by channel and supply clock; GLO MIDI chooses channels, routing and pitch bend, and GLO SYSTEM chooses synchronization.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "2551-2608",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2551-L2608"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/params.c",
     "lines": "430-434",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/params.c#L430-L434"
    }
   ]
  },
  {
   "part": "jack_midi_in",
   "note": "MIDI Program Change selects a synth sound by its zero-based sound-list index or a drum kit by its zero-based kit index, ignoring an out-of-range request; IN CLOCK ignores these messages, IN CH routes the chosen channel to the selected track, and normal input routes by track channel.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "2554-2597",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L2554-L2597"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui.c",
     "lines": "611-635",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L611-L635"
    }
   ]
  }
 ],
 "switching_note": {
  "kept_on_unit": "winampFM keeps four whole sections, the music in progress, thirty-two user sounds, twenty-seven FM6 bank patches, four user sample sets, the song order, four edited SYN kits and its preferences. Before removing power, stop playback, cancel an armed REC or running free take, close the menu and release all sounding notes, then leave the unit untouched and quiet for at least twenty seconds. Saves need working flash and no pending transport request. A section stores an FM6 patch choice, so keep its shared FM6 bank and sample audio too. From the flash atlas: install (own update loader): Replace differing program sectors and verify; retain flash head 0..3FFF. Open USER projects/preferences and sample header overlap. Replacing Open’s sample header leaves its whole sample bank unreadable. The same program writes can also leave PIGEON’s whole sample bank unreadable (Accepted package, key checks and known 1 MiB flash. The previous running firmware controls its own staging writes). install (record cleanup): Conditional update-record cleanup only; no projects, sounds or samples are at risk from this cleanup. It is detail-only (After an install, erase only a 4 KiB sector whose last 256 bytes hold a valid update record (marker 0x5441 at +6 and a matching nonzero CRC16 over bytes 2..79): in practice the family's staging-record sector 0xE4000 and, on a first install from stock, stock's record sector 0xE8000. Saved music does not hold that record. This loader does not skip 0x97000-0xDFFFF). normal startup conditional cleanup: Erase all five staging sectors if first 4 at E0000 or first 8 at E4F00 contains non-FF (Known flash; nonblank probe. Rescue bypasses cleanup). first stopped idle session: Unreadable autosave leaves hash 0; initialized music can autosave with no edit. Later changed music uses the same copies (Recognised flash; playback stopped, no pending transport request, recording unarmed, no free take running and menu closed; no sounding voices; at least 2.5 seconds without input, 20 seconds since startup or the previous autosave attempt, and one second since the previous eligibility check; the captured project hash must differ from the last saved hash). first menu close/preference trigger: Unreadable settings leave persist_saved 0; first menu close can write defaults without an edit (No settings write from cold startup itself; queued writes wait for stop/quiet). intentional reset/update flush: Flush dirty RAM sections/song and changed working project before update/reset; holding both octave buttons on a synth track outside menus has already restored its four effect sends after 0.8 seconds, so the five-second update flush can persist that reset (Only pending sections/settings; working project flush skipped during arrangement clock. No save question). outgoing update: Erase/stage recognized incoming loader, then resume record; failure clears staging too (Host upgrade. Normal mode flushes first; rescue skips persistence). warm-reset recovery: Surviving valid RAM sections differing from flash queue a quiet write (Requires valid surviving RAM; no cold-start blanket write). web installer: Normal install does not export a backup or ask a general overwrite question. Matches model FM-1; refuses recognized Melodee identity. Stock return requires backup acknowledgement/confirmation (Click handler does not pass melodeeAck, so source comment that another click proceeds is inaccurate. No bundled complete editor/backup UI). What winampFM Synth writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over winampFM Synth's is in when_you_leave.",
  "install_and_first_start": "Back up with the firmware that made the work before installing or first starting winampFM Synth. See the switching advice in this section for the affected saved work. A normal start checks just the beginning of the update area and the beginning of its update record; if either small check finds data, it erases the entire update area without a question. Data elsewhere alone does not cause this cleanup, so an X0X or Polly restore journal alone does not trigger it. USB rescue skips this startup cleanup. The installer also clears data sectors containing a recognised, valid update record; saved music does not hold those records and is not erased by this cleanup.",
  "idle_autosave": "After about twenty seconds, a stopped, unarmed, quiet first session can autosave without an edit once the menu is closed and input has been idle for 2.5 seconds. The same space is used by every later working-project save, including the flush before an update. See the switching advice in this section for the affected saved work. SLOOP 2.7’s imported working music is rewritten at the first eligible quiet save even without an edit, dropping newer hold and drum-tuning information. No overwrite question is asked.",
  "preferences": "The first menu close can save even without a preference edit when the previous settings were unreadable; later preference changes, saved song orders, SYN-kit stores and settings restores write the same space without a question about foreign work. See the switching advice in this section for the affected saved work. There is no new calibration workflow in winampFM.",
  "projects_and_user_sounds": "Storing sections A–D, saving or restoring a project, or flushing a section already changed in memory writes its saved section. See the switching advice in this section for the affected saved work. Saving or erasing a USER sound on the panel, or sending, storing or restoring user sounds from an editor, rewrites a whole sixteen-sound bank. A panel USER action requires a second clockwise detent, but it does not check for foreign saved work; an incompatible bank begins empty in memory and its former records are not retained. Editor commands have no device-side overwrite question. Shared recognised banks retain untouched records until their chosen sounds are overwritten.",
  "fm6_and_sample_uploads": "Storing or restoring the FM6 bank writes the saved bank. See the switching advice in this section for the affected saved work. Sending, replacing, restoring or erasing samples writes the selected sample space. A sample upload erases its old header at once, so an interrupted transfer has no second sample copy. IMPORTER erases the entire selected recognised sample set after REC is held for 1.3 seconds, without an extra question or undo; incompatible foreign data alone is not offered as a sample to erase. Sample sets saved by other firmwares can be offered too. Uploading or erasing USR4 with a MIDI tool can erase these separate imported voice banks: Felucca’s, JIANT’s and GHOULBOX’s FM6 voice bank B1–B32, DUELL beta’s FM6 bank B01–B32, Jangada’s FM6 voices B17–B32 and all twelve DX7 banks in SLOOP DX7 Banks. Holding REC in IMPORTER on USR4 also erases Jangada’s FM6 voices B17–B32 and all twelve DX7 banks in SLOOP DX7 Banks, whichever firmware saved that sample. Holding REC in IMPORTER on a recognised USR1, USR2, USR3 or USR4 sample can also erase or damage other saved work in that slot; see the switching advice in this section for every affected item. The Felucca, JIANT, GHOULBOX and DUELL banks each have one stored copy and are excluded from their backups; keep the original .syx files. Jangada has two copies of those voices, but USR4 can erase both; its own editor backup includes them. SLOOP DX7 Banks has one copy of each DX7 bank; its own full backup includes all twelve. Saving, erasing, sending or restoring user sounds can erase Polly’s QY70 style bank, and storing, erasing or restoring FM6 patches or uploading or erasing USR2, USR3 or USR4 with a MIDI tool can damage it. Holding REC in IMPORTER on a recognised USR2, USR3 or USR4 sample can also damage Polly’s QY70 style bank. It has one stored copy and is excluded from Polly backups; keep your QY70 ROM.",
  "back_up_first": "A compatible editor can read working music, sections, user sounds, the FM6 bank, sample sets, preferences, SYN kits and nondefault MIDI preferences through the backup protocol. No working browser backup editor is included at this tag, so the site alone is not a verified backup route. Restoring replaces only the objects sent; omitted objects stay on the unit. After any KEYBOARD LED or BOOT SOUND edit, the firmware rejects restoration of its saved preferences. TAPES AUTOPLAY OFF also makes those preferences fail restoration; switching autoplay back on removes that cause only if no LED or boot-sound options were saved. Retain separate sound, sample and project files and verify the backup route before switching.",
  "going_back": "Back up before switching in either direction. See the switching advice in this section. Older winampFM readers were not inspected, so v0.12 reading older projects does not prove that v0.11 or v0.1 can read v0.12 work. Once incompatible writes replace the usable copies, the original firmware can ignore that work or show defaults or empty slots on return; it can then write over remaining data itself. Other firmwares can overwrite winampFM work at startup or during ordinary use before a save is pressed. winampFM’s section saves, erases and restores, SONG REC writes and automatic writes of pending sections after a warm reset or before updates or restarts, user-sound saves, sends to the FM-1, erases and restores, and USR1 sample uploads and erases, including holding REC in IMPORTER, can also replace ChoralRoot’s legacy sounds 1–32, VA patches, FM6 patches 1–32, CZ patches 1–32 and FM TONE patches, kept for returning to ChoralRoot 0.21 or older.",
  "compatible_carryover": "SLOOP’s matching projects, user-sound banks, FM6 bank and sample sets can be read, but newer SLOOP options and musical meanings are not a lossless round trip. Hortator’s older preferences can supply their shared prefix. sloopDX’s shared preferences prefix can load, while its current project and user-record formats are not understood. Some other shared user-sound banks keep their raw records, but winampFM only plays the older record version it knows. No hardware playback comparison was performed.",
  "table_status": "Back up with the firmware that made the work before installing or first starting a different firmware. See the switching advice in this section.",
  "lost": "Removing power before a pending quiet save can lose recent work; a user-sound slot does not preserve a full project, its sample audio or a separately edited FM6 patch. Undo history, the chosen visualizer and PARTY group controls are temporary. From the flash atlas: Other firmwares reading winampFM Synth's data: Felucca lists winampFM Synth's user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); Rainbow Mode lists winampFM Synth's user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); Felucca [Salt] lists winampFM Synth's user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3, but plays them differently (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt; Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); WaveLoop FM-1 lists winampFM Synth's user sounds 1-16; user sounds 17-32; sample USR1; sample USR2, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different); WaveLoop FM-1 reads and uses winampFM Synth's sample USR1; sample USR2 (Saved samples may have no slice positions set by you); SLOOP reads and uses winampFM Synth's settings, panel calibration, song order, SYN kits and MIDI; section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; FM6 bank B1-B27; sample USR1; sample USR2; sample USR3; sample USR4 (Newer display and MIDI options use this firmware’s meanings; defaults fill fields the older settings did not save; The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine; Audio loads only if it fits this slot. Sending to or erasing this slot replaces it); SLOOP lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); sloopDX takes over winampFM Synth's settings, panel calibration, song order, SYN kits and MIDI, converting them (A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things); sloopDX lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them); SLOOP DX7 Banks takes over winampFM Synth's settings, panel calibration, song order, SYN kits and MIDI, converting them (A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up); SLOOP DX7 Banks lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP DX7 Banks reads and uses winampFM Synth's FM6 bank B1-B27; sample USR1; sample USR2; sample USR3; sample USR4 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP Floyd FM takes over winampFM Synth's settings, panel calibration, song order, SYN kits and MIDI, converting them (Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options); SLOOP Floyd FM lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound); SLOOP Floyd FM reads and uses winampFM Synth's sample USR1; sample USR2; sample USR3 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); FM1 Quest takes over winampFM Synth's settings, panel calibration, song order, SYN kits and MIDI, converting them (A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress); FM1 Quest lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); FM1 Quest reads and uses winampFM Synth's sample USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); JIANT takes over winampFM Synth's user sounds 1-16; user sounds 17-32, converting them (JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept); ChoralRoot lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from); GHOULBOX lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently; GHOULBOX reads and uses winampFM Synth's sample USR1; sample USR2; sample USR3; fm1-chord takes over winampFM Synth's user sounds 1-16; user sounds 17-32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses winampFM Synth's sample USR1; sample USR2; sample USR3 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); MAKU reads and uses winampFM Synth's user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3 (MAKU leaves these sample bytes in place, but its controls use built-in material; these uploaded samples are not available to play here); Jangada reads and uses winampFM Synth's sample USR1; sample USR2; sample USR3; Skiff lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (The same saved sound format does not guarantee the same sound or pattern playback); Skiff reads and uses winampFM Synth's sample USR1; sample USR2; sample USR3 (Skiff uses its own sound engines, so saved loops or slices can play differently); Hortator lists winampFM Synth's sample USR1; sample USR2; sample USR3, but plays them differently (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); ORBIT takes over winampFM Synth's user sounds 1-16; user sounds 17-32, converting them (Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play); ORBIT reads and uses winampFM Synth's FM6 bank B1-B27; sample USR1; sample USR2; sample USR3; sample USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); PIGEON reads and uses winampFM Synth's sample USR1; sample USR2; sample USR3 (Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same); FM1 Move lists winampFM Synth's user sounds 1-16; user sounds 17-32; working music kept by autosave, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things; Only the working project is imported. It may play differently. Saved SLOOP sections are not imported); FM1 Move reads and uses winampFM Synth's FM6 bank B1-B27; sample USR1; sample USR2; sample USR3; sample USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); X0X lists winampFM Synth's sample USR1; sample USR2; sample USR3, but plays them differently (Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used); Jangada converts only older version 1 sounds in this group. Newer sound versions look empty, and saving anywhere in the group drops them from the rewritten group.; ORBIT reads shared settings and calibration; the next settings write can discard preferences or music setup it does not retain.. What winampFM Synth reads of other firmwares' data: winampFM Synth reads and uses Felucca's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth lists SLOOP's song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project); user sounds U01-U16; user sounds U17-U32; music in progress (autosave), but plays them differently (Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different; Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses SLOOP's FM6 patch bank B1-B27; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sample slot USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses X0X's break loops slot 1; break loops slot 2; break loops slot 3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses GHOULBOX's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth takes over Hortator's settings and panel calibration, converting them (Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings); winampFM Synth reads and uses Hortator's user samples USR1; user samples USR2; user samples USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses Skiff's user sample USR1; user sample USR2; user sample USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses Rainbow Mode's User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses MAKU's inherited user sample 1; inherited user sample 2; inherited user sample 3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth takes over SLOOP DX7 Banks's section A; section B; section C; section D; working loop, converting them (Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); winampFM Synth lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses SLOOP DX7 Banks's FM6 patches B1–B27; user sample USR1; user sample USR2; user sample USR3; user sample USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses Jangada's user samples USR1; user samples USR2; user samples USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses WaveLoop FM-1's user sample USR1; user sample USR2 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses ORBIT's FM6 bank B1-B27; sample slot USR1; sample slot USR2; sample slot USR3; sample slot USR4 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth takes over SLOOP Floyd FM's settings, panel calibration and song order; song section A; song section B; song section C; song section D; working loop kept by autosave, converting them (Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings; Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); winampFM Synth lists SLOOP Floyd FM's user sounds U01–U16; user sounds U17–U32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses SLOOP Floyd FM's user sample slot USR1; user sample slot USR2; user sample slot USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth takes over Felucca [Salt]'s project 1; project 2; project 3; project 4, converting them (Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); winampFM Synth lists Felucca [Salt]'s user sounds U01-U16; user sounds U17-U32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses Felucca [Salt]'s user sample USR1; user sample USR2; user sample USR3 (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth reads and uses PIGEON's user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format (Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses FM1 Move's FM6 bank B1–B27; sample slot USR1; sample slot USR2; sample slot USR3 (The FM6 patch bank is shared. The project and its links to user sounds are not transferred; Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules); winampFM Synth takes over FM1 Quest's settings, panel mapping, song order and Quest preferences/progress; song section A; song section B; song section C; song section D; working music (autosave), converting them (Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings; Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); winampFM Synth lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses FM1 Quest's sample USR1 (Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots); winampFM Synth reads shared settings and calibration; the next settings write can discard preferences or music setup it does not retain.. Everything else of another firmware's looks empty or foreign to the reader.",
  "source": [
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/storage.c",
    "lines": "52-69",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/storage.c#L52-L69"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/project.c",
    "lines": "639-680",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L639-L680"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/project.c",
    "lines": "730-778",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L730-L778"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/project.c",
    "lines": "860-910",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L860-L910"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/project.c",
    "lines": "937-994",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L937-L994"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/project.c",
    "lines": "1029-1104",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L1029-L1104"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/editor.c",
    "lines": "411-452",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/editor.c#L411-L452"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/editor.c",
    "lines": "465-527",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/editor.c#L465-L527"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/editor.c",
    "lines": "762-801",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/editor.c#L762-L801"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/ota.c",
    "lines": "393-407",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ota.c#L393-L407"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/loader/ldr_core.c",
    "lines": "91-102",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/loader/ldr_core.c#L91-L102"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/loader/ldr_core.c",
    "lines": "105-175",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/loader/ldr_core.c#L105-L175"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/upreset.c",
    "lines": "85-103",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L85-L103"
   },
   {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/ui_winamp.c",
    "lines": "142-199",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_winamp.c#L142-L199"
   }
  ],
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)",
     "stock Bluetooth data",
     "stock presets (128, banks A-D)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns); stock Bluetooth data; stock presets (128, banks A-D).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Baud Girl presets (128)",
     "Baud Girl patterns (16, with locks)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches of the FM6 user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the autosave (the music as you left it)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user presets 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show user presets 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user presets 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: FM6 patches of the FM6 user presets; settings, button calibration, favourites, MIDI LEARN map. At risk by itself, under a condition: project slot A; project slot B; project slot C; project slot D. At risk when you act: the autosave (the music as you left it); FM6 voice bank B1-B32; user sample slot USR1; user sample slot USR2; user sample slot USR3; user presets 1-16; user presets 17-32. winampFM Synth reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show user presets 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user presets 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the music in progress (autosave)",
      "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section A (asks first)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section B (asks first)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section C (asks first)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section D (asks first)",
        "effect": "changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "FM6 patch bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sounds U01-U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds U17-U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads FM6 patch bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "winampFM Synth reads user sample slot USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: the music in progress (autosave) (changed to the new format: the next project save can lose newer settings for keyboard hold, drum tuning or the arpeggiator; SLOOP can still read the shared basic project format. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk by itself, under a condition: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project). At risk when you act: user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds U01-U16; user sounds U17-U32; FM6 patch bank B1-B27; user sample slot USR4. winampFM Synth reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sounds U01-U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds U17-U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads FM6 patch bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. winampFM Synth reads user sample slot USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads break loops slot 1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads break loops slot 2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads break loops slot 3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration; break loops slot 1; break loops slot 2; break loops slot 3. winampFM Synth reads break loops slot 1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads break loops slot 2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads break loops slot 3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches for the FM6 user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "partly lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth keeps stored but does not show user sounds U01-U16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user sounds U17-U32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: FM6 patches for the FM6 user sounds; settings, calibration, favourites, MENU options. At risk by itself, under a condition: song 1 section A (a whole project); song 1 section B (a whole project); song 1 section C (a whole project); song 1 section D (a whole project). At risk when you act: song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects) (partly lost); song 5: four sections (whole projects); song 6: four sections (whole projects); song 7: four sections (whole projects); song 8: four sections (whole projects); which song is current, every song's rows and scenes; music in progress (RESTORE LAST); FM6 voice bank B1-B32; user sounds U01-U16; user sounds U17-U32. winampFM Synth keeps stored but does not show user sounds U01-U16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user sounds U17-U32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "partly lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "partly lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "partly lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U145-U288",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U037-U054",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U055-U072",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U127-U144",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: shared user presets U109-U126; settings, factory favourites, calibration, saved template. At risk by itself, under a condition: shared user presets U289-U378 (partly lost); shared user presets U379-U384. At risk when you act: project A: patterns, song, sounds, motion, recordings; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; shared user presets U145-U288; shared user presets U073-U090; shared user presets U091-U108; shared user presets U001-U018; shared user presets U019-U036; shared user presets U037-U054; shared user presets U055-U072; shared user presets U127-U144.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights). At risk when you act: FoMni button calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: AMB-1 pieces and setup. At risk when you act: AMB-1 panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank B (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank C (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank D (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank E (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank F (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank G (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank H (16 tones)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved with a global save",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "favourite marks, chord/bass type and filter",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "128 saved sounds with their complete engine patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: 32 imported DX7 voices; options, playing setup and panel calibration. At risk when you act: CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last session saved with a global save; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches; recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches for user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "music in progress (RESTORE LAST)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voice bank B1–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show user sounds 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user sounds 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: FM6 patches for user sounds; settings and panel calibration. At risk by itself, under a condition: project A; project B; project C; project D. At risk when you act: music in progress (RESTORE LAST); FM6 voice bank B1–B32; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds 1–16; user sounds 17–32. winampFM Synth reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show user sounds 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user sounds 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "automatically, only if leftover data is found in the checked spots where firmware updates are prepared",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you start a firmware update",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing winampFM replaces Open’s sixteen USER projects, preferences and the information needed to read its sample bank, including the start of its sample storage, before the first start. Export with Open first."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing winampFM replaces Open’s sixteen USER projects, preferences and the information needed to read its sample bank, including the start of its sample storage, before the first start. Export with Open first.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: octave, last selected preset and MIDI preferences. At risk by itself, under a condition: older stored user bank, if present (Beta4 does not store new edits).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: the next settings save uses this firmware's format; if you switch back, your previous firmware's extra preferences may be lost or its settings may be unreadable. Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed to the new format: the next settings save uses this firmware's format; if you switch back, your previous firmware's extra preferences may be lost or its settings may be unreadable. Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next settings save uses this firmware's format; if you switch back, your previous firmware's extra preferences may be lost or its settings may be unreadable. Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "changed to the new format: the next settings save uses this firmware's format; if you switch back, your previous firmware's extra preferences may be lost or its settings may be unreadable. Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: the next settings save uses this firmware's format; if you switch back, your previous firmware's extra preferences may be lost or its settings may be unreadable. Only some settings are changed to the new format. Your songs are not stored in these settings. Switching back may lose settings"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: settings and panel calibration. At risk by itself, under a condition: project A; project B; project C; project D. At risk when you act: user samples USR1; user samples USR2; user samples USR3. winampFM Synth reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "pattern 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "pattern 7",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
     },
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 2 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 3 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain; other writes can also erase it); saved programs and global settings; pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Polly shared memory 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Polly shared memory 4; Polly setup and channel sounds. At risk by itself, under a condition: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3. At risk when you act: Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Optional QY70 style bank; Polly button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sound bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its shared pattern pool]",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared 64-pattern pool",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show user sound bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user sound bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: user sounds’ own FM6 patches; settings, calibration and favourites; user sound bank 1 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sound bank 2 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it). At risk by itself, under a condition: project A; project B; project C; project D. At risk when you act: last session; shared 64-pattern pool; user sample USR1; user sample USR2; user sample USR3. winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show user sound bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user sound bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopdx",
    "name": "sloopDX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its saved DX7 voices and drum kit]",
        "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     },
     {
      "object": "user presets 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth keeps stored but does not show user presets 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user presets 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: section A; section B; section C; section D. At risk when you act: DX7 bank 1 voices 1–16; DX7 bank 1 voices 17–32; DX7 bank 2 voices 1–16; DX7 bank 2 voices 17–32; DX7 bank 3 voices 1–16; DX7 bank 3 voices 17–32; DX7 bank 4 voices 1–16; DX7 bank 4 voices 17–32; DX7 bank 5 voices 1–16; DX7 bank 5 voices 17–32; DX7 bank 6 voices 1–16; DX7 bank 6 voices 17–32; DX7 bank 7 voices 1–16; DX7 bank 7 voices 17–32; DX7 bank 8 voices 1–16; DX7 bank 8 voices 17–32; selected DX7 bank; MY KIT; user presets 1–16 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it). winampFM Synth keeps stored but does not show user presets 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user presets 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the FM6 patches used by the thirty-two user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "your old FM6 bank (B1–B27)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "user sounds U17–U32, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ],
      "first_way_effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "Project A: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project B: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project C: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project D: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "the last session in the full version of Felucca",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR1 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR2 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR3 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user samples USR1, USR2 and USR3 until you write over them. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show user sounds U01–U16, names and sixteen-step patterns without automation until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user sounds U17–U32, names and sixteen-step patterns without automation until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: the FM6 patches used by the thirty-two user sounds; your old FM6 bank (B1–B27); Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes; user sounds U01–U16, names and sixteen-step patterns without automation (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sounds U17–U32, names and sixteen-step patterns without automation (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it). At risk by itself, under a condition: Project A: four tracks and their sounds, notes, automation, song chain and name; Project B: four tracks and their sounds, notes, automation, song chain and name; Project C: four tracks and their sounds, notes, automation, song chain and name; Project D: four tracks and their sounds, notes, automation, song chain and name. At risk when you act: the last session in the full version of Felucca; User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE. winampFM Synth reads user samples USR1, USR2 and USR3 until you write over them. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show user sounds U01–U16, names and sixteen-step patterns without automation until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user sounds U17–U32, names and sixteen-step patterns without automation until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "duell",
    "name": "DUELL beta",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved patches",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M01–M02",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M03–M04",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M05–M06",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M07–M08",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M09–M10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M11–M12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M13–M14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M15–M16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P01–P06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P07–P12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P13–P16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last working music",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B01–B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved patches; settings and panel setup. At risk by itself, under a condition: multis M01–M02; multis M03–M04; multis M05–M06; multis M07–M08. At risk when you act: user wavetable USR1; user wavetable USR2; user wavetable USR3; multis M09–M10; multis M11–M12; multis M13–M14; multis M15–M16; patterns P01–P06; patterns P07–P12; patterns P13–P16; last working music; FM6 bank B01–B32.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fimba",
    "name": "FiMba-1 beta",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "maku",
    "name": "MAKU",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "inherited FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "up to sixteen liked worlds",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "inherited user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads inherited user sample 1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads inherited user sample 2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads inherited user sample 3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show inherited user preset bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show inherited user preset bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: inherited FM6 patches for user presets; settings and calibration. At risk by itself, under a condition: inherited project A; inherited project B; inherited project C; inherited project D. At risk when you act: up to sixteen liked worlds; inherited user sample 1; inherited user sample 2; inherited user sample 3; inherited user preset bank 1; inherited user preset bank 2. winampFM Synth reads inherited user sample 1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads inherited user sample 2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads inherited user sample 3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show inherited user preset bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show inherited user preset bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "learned button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: learned button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "chord",
    "name": "fm1-chord",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show user sounds 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user sounds 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project. At risk when you act: uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. winampFM Synth reads uploaded sample USR1 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads uploaded sample USR2 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads uploaded sample USR3 and optional SLICE markers until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show user sounds 1-16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user sounds 17-32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites this firmware cannot use can be lost at the next settings save"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section A (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section B (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section C (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section D (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "DX7 bank 1 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 9 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 10 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 11 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 12 (32 voices)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "FM6 patches B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After winampFM Synth saves settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking. It can erase up to banks 1–11 if winampFM Synth’s MIDI IN is set to one channel from 4–15. The settings save can happen automatically if DX7 Banks’ KEY VELOCITY was 110, 120 or 127. Back up all your DX banks.",
     "winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sounds 1–16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds 17–32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "winampFM Synth reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: working loop (changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk by itself, under a condition: section A; section B; section C; section D. At risk when you act: DX7 bank 1 (32 voices); DX7 bank 2 (32 voices); DX7 bank 3 (32 voices); DX7 bank 4 (32 voices); DX7 bank 5 (32 voices); DX7 bank 6 (32 voices); DX7 bank 7 (32 voices); DX7 bank 8 (32 voices); DX7 bank 9 (32 voices); DX7 bank 10 (32 voices); DX7 bank 11 (32 voices); DX7 bank 12 (32 voices); user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32; FM6 patches B1–B27; user sample USR4. After winampFM Synth saves settings, returning to DX7 Banks erases DX banks 1–8 at its first start without asking. It can erase up to banks 1–11 if winampFM Synth’s MIDI IN is set to one channel from 4–15. The settings save can happen automatically if DX7 Banks’ KEY VELOCITY was 110, 120 or 127. Back up all your DX banks. winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sounds 1–16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds 17–32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads FM6 patches B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. winampFM Synth reads user sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fumi",
    "name": "FuMi-1",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FuMi-1 sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FuMi-1 button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FuMi-1 sound and playing setup. At risk when you act: FuMi-1 button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jangada",
    "name": "Jangada",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B1-B16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 voices B17-B32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: project 1; project 2; project 3; project 4. At risk when you act: user sounds U01-U16; user sounds U17-U32; FM6 voices B1-B16; FM6 voices B17-B32; user samples USR1; user samples USR2; user samples USR3. winampFM Synth reads user samples USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user samples USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user samples USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches and controls for each drum in user sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved for the next start",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song order and selection",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show user sounds 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user sounds 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: FM6 patches and controls for each drum in user sounds; settings, calibration and favourites. At risk by itself, under a condition: song 1; song 2; song 3; last session saved for the next start. At risk when you act: slice positions you set for USR1; slice positions you set for USR2; song 4; song 5; song 6; song 7; song 8; song 9; song 10; song 11; song 12; song order and selection; user sample USR1; user sample USR2; user sounds 1–16; user sounds 17–32. winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show user sounds 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user sounds 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "orbit",
    "name": "ORBIT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "saved section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       }
      ]
     },
     {
      "object": "USER sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "USER sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "winampFM Synth reads sample slot USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: saved section A (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section B (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section C (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); saved section D (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); working music kept by autosave; settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences. At risk when you act: USER sounds U01-U16 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); USER sounds U17-U32 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); sample slot USR1; sample slot USR2; sample slot USR3; FM6 bank B1-B27; sample slot USR4. winampFM Synth reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. winampFM Synth reads sample slot USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the working loop kept by autosave",
      "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "settings, panel calibration and song order",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section A (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section B (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section C (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section D (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things."
    ],
    "owner_text": "At risk by itself: the working loop kept by autosave (changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); settings, panel calibration and song order. At risk by itself, under a condition: song section A; song section B; song section C; song section D. At risk when you act: user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds U01–U16; user sounds U17–U32. winampFM Synth reads user sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sixteen six-track patterns",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "some or all lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "some or all lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "song order and four scenes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "some or all lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "some or all lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "eight saved sampler takes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "twelve uploaded sounds or DX7 banks",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "screen language pack",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "system preferences and last pattern",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: sixteen six-track patterns (some or all lost); song order and four scenes (some or all lost). At risk when you act: eight saved sampler takes (some or all lost); twelve uploaded sounds or DX7 banks (some or all lost); screen language pack; system preferences and last pattern.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "salt",
    "name": "Felucca [Salt]",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "screen preferences, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section A (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section B (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section C (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section D (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sounds U01-U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds U17-U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things."
    ],
    "owner_text": "At risk by itself: screen preferences, calibration and favourites. At risk by itself, under a condition: project 1; project 2; project 3; project 4. At risk when you act: user sample USR1; user sample USR2; user sample USR3; user sounds U01-U16; user sounds U17-U32. winampFM Synth reads user sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sounds U01-U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds U17-U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "pigeon",
    "name": "PIGEON",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the older FM6 patch bank PIGEON no longer uses",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, MIDI LEARN and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared song and drum sample bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install winampFM Synth",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions set by hand in the older format",
      "effect": "partly lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "chops, drum-pad and performance edits",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last working session",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "older user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "If your PIGEON sample bank is large enough to reach the flash that installing winampFM Synth writes, PIGEON then rejects the whole bank, both songs and the kit. Export the PIGEON session and audio bank before switching.",
     "winampFM Synth reads user sample USR1 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR2 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sample USR3 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth keeps stored but does not show older user preset bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show older user preset bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: the older FM6 patch bank PIGEON no longer uses; older FM6 patches for user presets; preferences, MIDI LEARN and panel calibration. At risk by itself, under a condition: saved pattern A; saved pattern B; saved pattern C; saved pattern D. At risk when you act: shared song and drum sample bank; slice positions set by hand in the older format (partly lost); chops, drum-pad and performance edits; last working session; user sample USR1 in the older format; user sample USR2 in the older format; user sample USR3 in the older format; older user preset bank 1; older user preset bank 2. If your PIGEON sample bank is large enough to reach the flash that installing winampFM Synth writes, PIGEON then rejects the whole bank, both songs and the kit. Export the PIGEON session and audio bank before switching. winampFM Synth reads user sample USR1 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR2 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sample USR3 in the older format until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth keeps stored but does not show older user preset bank 1 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show older user preset bank 2 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1move",
    "name": "FM1 Move",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "the working project kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you save the song order (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you upload or erase USR4 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "FM6 bank B1–B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you store, erase or restore FM6 patches directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads FM6 bank B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred."
    ],
    "owner_text": "At risk by itself: project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain; other writes can also erase it); settings, calibration, SYN kits and stored MIDI mappings. At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32; FM6 bank B1–B27. winampFM Synth reads sample slot USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads sample slot USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads sample slot USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads FM6 bank B1–B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section A (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section B (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section C (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section D (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots.",
     "winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things."
    ],
    "owner_text": "At risk by itself: working music (autosave) (changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: song section A; song section B; song section C; song section D. At risk when you act: sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; sample USR1; user sounds U01–U16; user sounds U17–U32. winampFM Synth reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots. winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "Groove project slot 1",
     "Groove project slot 2",
     "Groove project slot 3",
     "Groove resume autosave",
     "Groove sound bank A",
     "Groove sound bank B",
     "Groove sound bank C",
     "Groove sound bank D",
     "Groove custom drum sounds and kits",
     "Groove device preferences",
     "Groove crash reports"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Groove OS does not publish where or how it stores saved work, so data may be lost even where we cannot confirm shared storage. Before switching, use export all on its Projects page to save every project and the autosave. Use Save a backup on Your own sounds too: project exports remember the sounds but leave out the audio. Use Save a safety copy on Your FM-1 for the banks, songs, autosave and samples. Keep these files on your computer. Sound banks, custom sounds, settings and crash reports may be lost."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Groove project slot 1; Groove project slot 2; Groove project slot 3; Groove resume autosave; Groove sound bank A; Groove sound bank B; Groove sound bank C; Groove sound bank D; Groove custom drum sounds and kits; Groove device preferences; Groove crash reports. Groove OS does not publish where or how it stores saved work, so data may be lost even where we cannot confirm shared storage. Before switching, use export all on its Projects page to save every project and the autosave. Use Save a backup on Your own sounds too: project exports remember the sounds but leave out the audio. Use Save a safety copy on Your FM-1 for the banks, songs, autosave and samples. Keep these files on your computer. Sound banks, custom sounds, settings and crash reports may be lost.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "section A (whole project)",
     "section B (whole project)",
     "section C (whole project)",
     "section D (whole project)",
     "working music kept by autosave",
     "sample USR1",
     "sample USR2",
     "sample USR3",
     "user sounds 1-16",
     "user sounds 17-32",
     "FM6 bank B1-B27",
     "sample USR4"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27; sample USR4.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "section A (whole project)",
     "section B (whole project)",
     "section C (whole project)",
     "section D (whole project)",
     "working music kept by autosave",
     "sample USR1",
     "sample USR2",
     "sample USR3",
     "user sounds 1-16",
     "user sounds 17-32",
     "FM6 bank B1-B27",
     "sample USR4"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27; sample USR4.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a compatible voice bank sent earlier remains and the saved voice bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca may start with RESTORE LAST ON after winampFM, even if you turned it OFF before. winampFM saves its own settings at several points, replacing the earlier settings with ones Felucca cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "Felucca may start with beta 2ND CORE ON or OFF after winampFM. Do not rely on your earlier choice: winampFM can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save.",
     "Felucca reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca reads sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca reads sample USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: sample USR4. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3. Felucca may start with RESTORE LAST ON after winampFM, even if you turned it OFF before. winampFM saves its own settings at several points, replacing the earlier settings with ones Felucca cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. Felucca may start with beta 2ND CORE ON or OFF after winampFM. Do not rely on your earlier choice: winampFM can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save. Felucca reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca reads sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca reads sample USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start an update or enter UPDATE MODE",
        "effect": "kept: SLOOP can read it"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "automatically, only when saved settings contain only basic settings and drum kits, and SLOOP can read an older working loop whose drum MIDI channel differs from those settings",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking)",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking)",
        "effect": "kept: SLOOP can read it"
       },
       {
        "way": "when you send the song from the web editor (without asking)",
        "effect": "kept: SLOOP can read it"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP reads section A (whole project) until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine.",
     "SLOOP reads section B (whole project) until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine.",
     "SLOOP reads section C (whole project) until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine.",
     "SLOOP reads section D (whole project) until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine.",
     "SLOOP reads working music kept by autosave until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine.",
     "SLOOP reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP reads FM6 bank B1-B27 until you write over the saved data.",
     "SLOOP reads sample USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads settings, panel calibration, song order, SYN kits and MIDI until you write over the saved data. Newer display and MIDI options use this firmware’s meanings; defaults fill fields the older settings did not save."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27; sample USR4. SLOOP reads section A (whole project) until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine. SLOOP reads section B (whole project) until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine. SLOOP reads section C (whole project) until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine. SLOOP reads section D (whole project) until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine. SLOOP reads working music kept by autosave until you write over the saved data. The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine. SLOOP reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP reads FM6 bank B1-B27 until you write over the saved data. SLOOP reads sample USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads settings, panel calibration, song order, SYN kits and MIDI until you write over the saved data. Newer display and MIDI options use this firmware’s meanings; defaults fill fields the older settings did not save.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed.",
     "X0X reads sample USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads sample USR2 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
     "X0X reads sample USR3 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used."
    ],
    "owner_text": "At risk by itself: section A (whole project); section B (whole project); section C (whole project); section D (whole project); user sounds 17-32; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: user sounds 1-16; sample USR1; sample USR2; sample USR3. After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed. X0X reads sample USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads sample USR2 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. X0X reads sample USR3 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you select a song using MIDI PROGRAM CHANGE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds survives and a compatible old FM6 bank is present",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if its RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this firmware ran on your FM-1 before and the voice bank sent to it then is still stored",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "JIANT may start with RESTORE LAST ON or OFF after winampFM, even if you turned it OFF before. winampFM saves its own settings at several points, replacing the earlier settings with ones JIANT cannot read; an older choice saved by another firmware can also mean the opposite here. While ON, JIANT can save by itself about 10 seconds after start-up once stopped and idle, even without edits, and again after later edits and a pause. Check MENU > SYSTEM > RESTORE LAST straight after start-up. Hold SAVE once MENU is open to keep that idle wait reset while you check; the open menu alone does not stop it. OFF stops that autosave."
    ],
    "owner_text": "At risk by itself: sample USR3; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: working music kept by autosave; FM6 bank B1-B27; sample USR4. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR1; sample USR2; user sounds 1-16; user sounds 17-32. JIANT may start with RESTORE LAST ON or OFF after winampFM, even if you turned it OFF before. winampFM saves its own settings at several points, replacing the earlier settings with ones JIANT cannot read; an older choice saved by another firmware can also mean the opposite here. While ON, JIANT can save by itself about 10 seconds after start-up once stopped and idle, even without edits, and again after later edits and a pause. Check MENU > SYSTEM > RESTORE LAST straight after start-up. Hold SAVE once MENU is open to keep that idle wait reset while you check; the open menu alone does not stop it. OFF stops that autosave.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: working music kept by autosave; user sounds 1-16; user sounds 17-32; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR3; FM6 bank B1-B27; sample USR4. At risk when you act: sample USR1; sample USR2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup",
        "effect": "lost"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "ChoralRoot reads user sounds 1-16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
     "ChoralRoot reads user sounds 17-32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from."
    ],
    "owner_text": "At risk by itself: sample USR2; sample USR3; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; sample USR1; user sounds 1-16; user sounds 17-32. ChoralRoot reads user sounds 1-16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from. ChoralRoot reads user sounds 17-32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds is left and a compatible older FM6 bank is still stored",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an earlier compatible bank sent to the FM-1 is still stored and is newer than the saved bank, or the saved bank is invalid",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset in the bank also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "GHOULBOX may start with RESTORE LAST ON after winampFM, even if you turned it OFF before. winampFM saves its own settings at several points, replacing the earlier settings with ones GHOULBOX cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "GHOULBOX reads sample USR1 until you write over the saved data.",
     "GHOULBOX reads sample USR2 until you write over the saved data.",
     "GHOULBOX reads sample USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: working music kept by autosave; sample USR4. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3. GHOULBOX may start with RESTORE LAST ON after winampFM, even if you turned it OFF before. winampFM saves its own settings at several points, replacing the earlier settings with ones GHOULBOX cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. GHOULBOX reads sample USR1 until you write over the saved data. GHOULBOX reads sample USR2 until you write over the saved data. GHOULBOX reads sample USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "by itself right after the Workbench installs Open",
        "effect": "lost"
       },
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Workbench adds Open's built-in samples right after installing it, without asking about samples. This replaces only the items marked 'by itself right after the Workbench installs Open', before you can save anything. This follows Open V12's source code; the downloaded Workbench has not been checked against it."
    ],
    "owner_text": "At risk by itself: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave. At risk when you act: sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27; sample USR4; settings, panel calibration, song order, SYN kits and MIDI. Workbench adds Open's built-in samples right after installing it, without asking about samples. This replaces only the items marked 'by itself right after the Workbench installs Open', before you can save anything. This follows Open V12's source code; the downloaded Workbench has not been checked against it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "sample USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "sample USR2 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)",
     "sample USR3 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project). Carried over: sample USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); sample USR2 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); sample USR3 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample USR4",
      "effect": "damaged (part written over)",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you request a copy into pattern 1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you request a copy into pattern 2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you request a copy into pattern 3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you request a copy into pattern 4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you request a copy into pattern 5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you request a copy into pattern 6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you request a copy into pattern 7 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you tap SAVE in the sequencer (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: sample USR4 (damaged (part written over)); settings, panel calibration, song order, SYN kits and MIDI.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed."
    ],
    "owner_text": "At risk by itself: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; sample USR1; sample USR2; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27; sample USR4. After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a readable old autosave needs conversion and its patterns fit",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if an older project can be read and its patterns need a new format",
        "effect": "lost"
       },
       {
        "way": "when you confirm clearing a pattern or song entry (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you copy or change an entry’s pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 patch bank is still stored and no current set of FM6 patches can be loaded",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Unreadable settings use Skiff’s default RESTORE LAST ON.",
     "Skiff reads sample USR1 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads sample USR2 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
     "Skiff reads sample USR3 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; sample USR4; settings, panel calibration, song order, SYN kits and MIDI; sample USR1; sample USR2; sample USR3. At risk by itself, under a condition: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave. At risk when you act: user sounds 1-16; user sounds 17-32. Unreadable settings use Skiff’s default RESTORE LAST ON. Skiff reads sample USR1 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads sample USR2 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently. Skiff reads sample USR3 until you write over the saved data. Skiff uses its own sound engines, so saved loops or slices can play differently.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopdx",
    "name": "sloopDX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update or enter UPDATE MODE",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: A settings save drops the source firmware’s synthesized drum kits and any saved MIDI controls stored after them. Favourite and display-option numbers can also mean different things"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "sloopDX reads user sounds 1-16 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them.",
     "sloopDX reads user sounds 17-32 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; sample USR2; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: sample USR1. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); user sounds 1-16; user sounds 17-32. sloopDX reads user sounds 1-16 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them. sloopDX reads user sounds 17-32 until you write over the saved data. Only sounds in the first engine appear. They play as DX7 sounds. Other sounds stay hidden. Saving other slots keeps them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer",
        "effect": "lost"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or a name from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if you open the full version of Felucca by holding HOME + SAVE for 3 seconds and its RESTORE LAST is on (the default)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The full Felucca in Rainbow Mode may start with RESTORE LAST ON after winampFM, even if you turned it OFF before. winampFM saves its own settings at several points, replacing the earlier settings with ones the full Felucca in Rainbow Mode cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST in the full Felucca layer before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave.",
     "Rainbow Mode reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Rainbow Mode reads sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Rainbow Mode reads sample USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: FM6 bank B1-B27. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3. The full Felucca in Rainbow Mode may start with RESTORE LAST ON after winampFM, even if you turned it OFF before. winampFM saves its own settings at several points, replacing the earlier settings with ones the full Felucca in Rainbow Mode cannot read; an older choice saved by another firmware can also mean the opposite here. Check MENU > SYSTEM > RESTORE LAST in the full Felucca layer before you edit. ON allows automatic saving after edits and a pause with playback stopped, keys and buttons released, and no sound; OFF stops that autosave. Rainbow Mode reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Rainbow Mode reads sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Rainbow Mode reads sample USR3 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "duell",
    "name": "DUELL beta",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its RESTORE LAST is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only if loading M01 at first start changes the music and RESTORE LAST is on",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change MIDI LEARN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you change preferences from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an earlier compatible bank upload is still stored and the saved bank is missing or older",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 voice bank directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: sample USR4. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32. The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "maku",
    "name": "MAKU",
    "flags": "CS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 bank is still stored and no valid set of FM6 patches for your sounds is stored",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC for about two seconds to clear every like (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you tap REC to like the current world (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself, under a condition: working music kept by autosave. At risk when you act: FM6 bank B1-B27; settings, panel calibration, song order, SYN kits and MIDI.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate."
    ],
    "owner_text": "At risk when you act: user sounds 1-16. Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "chord",
    "name": "fm1-chord",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
     "fm1-chord reads sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3. fm1-chord reads sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample USR2 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored. fm1-chord reads sample USR3 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (when the web editor connects or refreshes, this bank has no usable voices and factory auto-fill is on by default)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 2",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 3",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when DX7 Banks’ saved count of banks already set up is below 4",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a DX7 bank from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you move a voice between DX7 banks from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you put the factory voices back from the editor",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank from the editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you use the editor to load several DX7 files into banks that look empty (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "changed to the new format: A settings save writes this beta’s drum kits and count of DX banks it has set up, dropping the source firmware’s MIDI controls or theme and favourites. Drum kits load only if the saved settings include the kits without an added MIDI-control block. DX7 Banks can mistake the saved MIDI-input channel for an older count of DX banks it has set up"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 bank patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send an FM6 bank patch from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads FM6 bank B1-B27 until you write over the saved data.",
     "SLOOP DX7 Banks reads sample USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; sample USR4; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27. SLOOP DX7 Banks reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads FM6 bank B1-B27 until you write over the saved data. SLOOP DX7 Banks reads sample USR4 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jangada",
    "name": "Jangada",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you store a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. winampFM Synth cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a DX7 bank being sent to the FM-1 (asks first which bank to replace)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase FM6 sounds in Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads sample USR1 until you write over the saved data.",
     "Jangada reads sample USR2 until you write over the saved data.",
     "Jangada reads sample USR3 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); user sounds 1-16; user sounds 17-32; FM6 bank B1-B27; sample USR4; sample USR1; sample USR2; sample USR3. Jangada reads sample USR1 until you write over the saved data. Jangada reads sample USR2 until you write over the saved data. Jangada reads sample USR3 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use, from its second start, after five seconds with playback stopped, no sound and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at its first start, after five seconds with playback stopped, no sound and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 or DRUM user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 or DRUM sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "WaveLoop FM-1 reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you.",
     "WaveLoop FM-1 reads sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you."
    ],
    "owner_text": "At risk by itself: section A (whole project); section D (whole project); settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: section B (whole project); section C (whole project); sample USR3. At risk when you act: working music kept by autosave; user sounds 1-16; user sounds 17-32; sample USR1; sample USR2. WaveLoop FM-1 reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you. WaveLoop FM-1 reads sample USR2 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Saved samples may have no slice positions set by you.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "orbit",
    "name": "ORBIT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed automatically: an automatic settings save can replace shared settings with this firmware's song, kit, MIDI and other settings. Calibration and shared preferences can load, but choices have different meanings. Song, kit, MIDI, theme or favourites settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a used FM6 patch from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send, erase or restore FM6 patches with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 patch from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 cartridge voices from the web editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "ORBIT reads sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "ORBIT reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "ORBIT reads sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: section A (whole project); section B (whole project); section C (whole project); section D (whole project). At risk when you act: user sounds 1-16; user sounds 17-32; sample USR1; sample USR2; sample USR3; FM6 bank B1-B27; sample USR4. ORBIT reads sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. ORBIT reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. ORBIT reads sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking)",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking)",
        "effect": "changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a section (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds 1-16 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound)",
     "user sounds 17-32 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound)"
    ],
    "kept_unseen": [],
    "notes": [
     "SLOOP Floyd FM reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP Floyd FM reads sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; settings, panel calibration, song order, SYN kits and MIDI (changed to the new format: Saving settings keeps only the older colour, display, calibration and song-order choices. The saved copy lacks newer light options, drum kits, MIDI controls and separately saved options). At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR1; sample USR2; sample USR3. Carried over: user sounds 1-16 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound); user sounds 17-32 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. A saved FM6 sound in engine 9 becomes a FLOYD sound). SLOOP Floyd FM reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads sample USR2 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP Floyd FM reads sample USR3 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS?",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or with the computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a take from the control page or with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "at an unknown time (the chip maker's code that does this is not public)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "at an unknown time (the chip maker's code that does this is not public)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; sample USR1; sample USR2; user sounds 1-16; user sounds 17-32. At risk by itself, under a condition: sample USR3. At risk when you act: FM6 bank B1-B27; sample USR4.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds 1-16 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt)",
     "user sounds 17-32 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt)"
    ],
    "kept_unseen": [],
    "notes": [
     "Felucca [Salt] reads sample USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca [Salt] reads sample USR2 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
     "Felucca [Salt] reads sample USR3 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different."
    ],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR1; sample USR2; sample USR3. Carried over: user sounds 1-16 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt); user sounds 17-32 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt). Felucca [Salt] reads sample USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca [Salt] reads sample USR2 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Felucca [Salt] reads sample USR3 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "pigeon",
    "name": "PIGEON",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR4",
      "effect": "damaged (part written over)",
      "ways": [
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "PIGEON reads sample USR1 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON reads sample USR2 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON reads sample USR3 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same.",
     "PIGEON keeps stored but does not show user sounds 1-16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
     "PIGEON keeps stored but does not show user sounds 17-32 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: sample USR1. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); working music kept by autosave; sample USR2; sample USR3; sample USR4 (damaged (part written over)); user sounds 1-16; user sounds 17-32. PIGEON reads sample USR1 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON reads sample USR2 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON reads sample USR3 until you write over the saved data. Sample audio can be read. Loops and slices may play differently; we have not tested whether they sound the same. PIGEON keeps stored but does not show user sounds 1-16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them. PIGEON keeps stored but does not show user sounds 17-32 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1move",
    "name": "FM1 Move",
    "flags": "CSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample USR4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only at first start or on later autosaves after working music changes, unless a sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 3,824 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only when the device page's Projects tab shows a Working project size greater than 7,648 B and no sample remains in the old fourth slot",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you clear a project with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you import a project from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on PROJECT or choose Save here in the device page, after removing any old fourth sample (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase an FM6 sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear an FM6 bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store or erase an FM6 sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that patch)"
       },
       {
        "way": "when you store selected DX7 voices from the device page (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "working music kept by autosave (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported)"
    ],
    "kept_unseen": [],
    "notes": [
     "Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample.",
     "FM1 Move reads sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
     "FM1 Move reads user sounds 1-16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds 17-32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred.",
     "FM1 Move reads sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules."
    ],
    "owner_text": "At risk by itself, under a condition: sample USR4. At risk when you act: settings, panel calibration, song order, SYN kits and MIDI; sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32; FM6 bank B1-B27. Carried over: working music kept by autosave (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported). Move blocks ordinary project saves and autosaves while it still recognizes the old fourth sample. Direct project restores and clear commands can still erase it. Move's normal sample backup does not include that fourth sample. FM1 Move reads sample USR1 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads sample USR2 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads sample USR3 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules. FM1 Move reads user sounds 1-16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds 17-32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads FM6 bank B1-B27 until you write over the saved data. The FM6 patch bank is shared. The project and its links to user sounds are not transferred. FM1 Move reads sample USR4 until you write over the saved data. Slice marks set by hand are not loaded. Loop modes follow this firmware's playback rules.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "FM1 Quest reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FM1 Quest reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "settings, panel calibration, song order, SYN kits and MIDI",
     "section A (whole project)",
     "section B (whole project)",
     "section C (whole project)",
     "section D (whole project)",
     "user sounds 1-16",
     "user sounds 17-32",
     "working music kept by autosave",
     "FM6 bank B1-B27",
     "sample USR1",
     "sample USR2",
     "sample USR3",
     "sample USR4"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): settings, panel calibration, song order, SYN kits and MIDI; section A (whole project); section B (whole project); section C (whole project); section D (whole project); user sounds 1-16; user sounds 17-32; working music kept by autosave; FM6 bank B1-B27; sample USR1; sample USR2; sample USR3; sample USR4. The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "Screen brightness on the site",
   "docs_say": "The site still lists screen brightness in the HOME menu.",
   "source_says": "v0.12 hides BRIGHTNESS and keeps the backlight on because its earlier pulsing interfered with encoder scanning.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "index.html",
    "lines": "273-278",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/index.html#L273-L278"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/ui_menu.c",
    "lines": "5-7",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/main.c",
     "lines": "22-24",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/main.c#L22-L24"
    }
   ]
  }
 ],
 "firmware_limitations": [
  {
   "topic": "Undo scope",
   "fact": "Undo includes synth notes or drum hits and pattern length, but excludes locks, microtiming and fill conditions even though their editors mark an undo point.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "443-463",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L443-L463"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui.c",
     "lines": "229-252",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui.c#L229-L252"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/core.h",
     "lines": "194-242",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/core.h#L194-L242"
    }
   ]
  },
  {
   "topic": "Pattern extras stay in place",
   "fact": "Rotate and duplicate copy only step note or drum-hit records; nudge, locks and fill conditions stay on their old numbered steps.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "57-106",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L57-L106"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/core.h",
     "lines": "235-242",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/core.h#L235-L242"
    }
   ]
  },
  {
   "topic": "SAVE long hold inactive",
   "fact": "Holding SAVE opens its song layer rather than saving the working project, despite a source comment describing a hold-to-save ring.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_layers.c",
     "lines": "1014-1016",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_layers.c#L1014-L1016"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "1093",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L1093"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_input.c",
     "lines": "888-949",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L888-L949"
    }
   ]
  },
  {
   "topic": "Backup settings restore",
   "fact": "After a KEYBOARD LED or BOOT SOUND edit, restoring the saved preferences fails; TAPES AUTOPLAY OFF also causes failure, and setting autoplay ON removes only that latter cause.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "937-945",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L937-L945"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/panel.c",
     "lines": "79-84",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L79-L84"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/panel.c",
     "lines": "135-150",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L135-L150"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/panel.c",
     "lines": "147-151",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L147-L151"
    }
   ]
  },
  {
   "topic": "Free-take capacity",
   "fact": "A free take keeps at most 192 note events, omits later events when full, and closes automatically at 24 seconds.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "631-645",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L631-L645"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "855-873",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L855-L873"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/seq.c",
     "lines": "941-955",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/seq.c#L941-L955"
    }
   ]
  },
  {
   "topic": "User sounds and project backups",
   "fact": "A user-sound save includes only a reduced sixteen-step pattern, and loading it on the panel keeps the current pattern; use sections and a complete protocol export for project backups.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/upreset.c",
     "lines": "85-103",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L85-L103"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/upreset.c",
     "lines": "236-267",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/upreset.c#L236-L267"
    }
   ]
  },
  {
   "topic": "Calibration",
   "fact": "This version can reuse a saved compatible button and encoder assignment but has no reachable hardware-calibration workflow.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/panel.c",
     "lines": "18-31",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/panel.c#L18-L31"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/ui_menu.c",
     "lines": "5-7",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_menu.c#L5-L7"
    },
    {
     "kind": "source",
     "repo": "hericdk/winampFM",
     "ref": "v0.12",
     "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
     "path": "firmware/firmware/src/project.c",
     "lines": "738-743",
     "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/project.c#L738-L743"
    }
   ]
  }
 ],
 "not_mapped": [
  "No physical unit was tested; input timings, audio results and power-loss recovery are source readings.",
  "The tag contains no browser backup editor; host file contents, host confirmation screens and end-to-end restoration are unverified.",
  "Compatibility of an arbitrary older winampFM build cannot be established from this single tag; export data before downgrading.",
  "Compatible external browser backup UI/file format: No complete editor client bundled in pinned source; protocol facts verified only.",
  "Downgrade 0.11 / 0.1 compatibility: Those tagged sources/readers were not supplied or inspected. Export all objects before downgrade; current settings restore fault limits confidence.",
  "Closed earlier updater footprint: Own loader footprint proven; prior running firmware / closed updater may perform additional writes."
 ],
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "3 Update hold persists send reset",
   "fixed": "Named the earlier send reset and its persistence, including cancellation limits.",
   "at": "controls.button_oct_down[4]; modes[13]; storage.install_and_startup_writes[5]"
  },
  {
   "round": 1,
   "error": "4 Panel USER full-bank save",
   "fixed": "Named the full-bank panel write and its foreign-data risks.",
   "at": "controls.encoder_knob4[76]; switching_note.projects_and_user_sounds"
  },
  {
   "round": 1,
   "error": "1 Missing sample losses",
   "fixed": "Rebuilt owner lists from affected rows, including Polly memories 5–16 and single-copy FM6 banks.",
   "at": "switching_note.fm6_and_sample_uploads"
  },
  {
   "round": 1,
   "error": "2 Stock and Baud Girl ordinary writes",
   "fixed": "Included their reported/inferred work for every ordinary write group.",
   "at": "switching_note.idle_autosave; projects_and_user_sounds; fm6_and_sample_uploads"
  },
  {
   "round": 1,
   "error": "8 No-edit SLOOP working-loop rewrite",
   "fixed": "Named SLOOP’s imported working music and the automatic loss of newer meanings.",
   "at": "switching_note.idle_autosave; storage.reads_foreign"
  },
  {
   "round": 1,
   "error": "10 Autosave waiting conditions",
   "fixed": "Added armed recording, free take, quiet and pending-transport conditions.",
   "at": "switching_note.kept_on_unit; idle_autosave"
  },
  {
   "round": 1,
   "error": "12 Startup probe scope",
   "fixed": "Restricted cleanup to either small startup probe and clarified that a journal alone does not trigger it.",
   "at": "switching_note.install_and_first_start"
  },
  {
   "round": 1,
   "error": "5 IMPORTER erase path",
   "fixed": "Appended the readable-sample-gated panel erase trigger for all four allocations.",
   "at": "storage.objects[9-12].written_when"
  },
  {
   "round": 1,
   "error": "6 Unreachable light preferences",
   "fixed": "Distinguished inherited/restored NOTES, LIGHTS and KEYS from the reachable KEYBOARD LED controls.",
   "at": "lights.key_lights[0,3,5,6]; lights.button_*.BACKLIGHT"
  },
  {
   "round": 1,
   "error": "7 Track-3 percussion tapes",
   "fixed": "Appended its mode and all 27 press/release key jobs, identifying the extra 32 tapes and live-only choice.",
   "at": "modes[110]; controls.key_* appended; controls.encoder_select/encoder_presets.tapes; storage.objects[1-7].holds"
  },
  {
   "round": 1,
   "error": "9 Drum-grid lights",
   "fixed": "Appended the drum-grid hit and playhead lamp entry.",
   "at": "lights.key_lights[9]"
  },
  {
   "round": 1,
   "error": "11 Certain settings restore failure",
   "fixed": "Stated the exact conditions that force rejection instead of saying may fail.",
   "at": "switching_note.back_up_first; firmware_limitations[3]; storage.backup.fault"
  },
  {
   "round": 1,
   "error": "13 Automatic rescue",
   "fixed": "Added reset-retained failed-start entry and fresh-power-on counter behavior.",
   "at": "modes[12]; controls.switch_power[0]"
  },
  {
   "round": 1,
   "error": "14 MIDI Program Change",
   "fixed": "Added routed program and kit selection, its display response and MIDI connection note.",
   "at": "modes[111]; controls.screen appended; jack_notes[2]"
  },
  {
   "round": 1,
   "error": "15 FADE name",
   "fixed": "Replaced OFF with the on-screen effect name.",
   "at": "lights.key_lights[7]"
  },
  {
   "round": 1,
   "error": "16 Free-take wording",
   "fixed": "Replaced tuning off with the actual free-take condition.",
   "at": "storage.objects[7]; storage.install_and_startup_writes[3]"
  },
  {
   "round": 1,
   "error": "17 Registry pin",
   "fixed": "Pinned its documentation to v0.12 and the full commit.",
   "at": "registry.sources[0]"
  },
  {
   "round": 1,
   "error": "18 Owner draft status",
   "fixed": "Removed internal checker status from the guide introduction.",
   "at": "control-maps/winampfm.md introduction"
  },
  {
   "round": 1,
   "error": "19 Firmware spelling",
   "fixed": "Restored winampFM and the canonical names of other firmwares in owner text.",
   "at": "switching_note; control-maps/winampfm.md; storage.owner_switching"
  },
  {
   "round": 1,
   "error": "20 First menu close",
   "fixed": "Added the first no-edit write to every affected menu-close entry.",
   "at": "controls.button_home[9,22-26]; controls.button_oct_down[11]"
  },
  {
   "round": 1,
   "error": "Storage review User bank loader",
   "fixed": "Described clipped-prefix loading and removed rename as a separate SysEx command.",
   "at": "storage.objects[5-6].load_rule; written_when"
  },
  {
   "round": 2,
   "error": "1 First-idle-session menu condition",
   "fixed": "Replaced the garbled condition with explicit menu-closed and no-free-take requirements, retaining the source-proven autosave timing and other gates.",
   "at": "refresh/work/winampfm.storage.json: install_and_startup_writes[3].condition"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_f3[0].short_label",
   "old": "TONE",
   "new": "F3",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_fs3[0].short_label",
   "old": "TONE",
   "new": "F#3",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_g3[0].short_label",
   "old": "TONE",
   "new": "G3",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_gs3[0].short_label",
   "old": "TONE",
   "new": "G#3",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_a3[0].short_label",
   "old": "TONE",
   "new": "A3",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_as3[0].short_label",
   "old": "TONE",
   "new": "A#3",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_b3[0].short_label",
   "old": "TONE",
   "new": "B3",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_c4[0].short_label",
   "old": "TONE",
   "new": "C4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_cs4[0].short_label",
   "old": "TONE",
   "new": "C#4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_d4[0].short_label",
   "old": "TONE",
   "new": "D4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_ds4[0].short_label",
   "old": "TONE",
   "new": "D#4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_e4[0].short_label",
   "old": "TONE",
   "new": "E4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_f4[0].short_label",
   "old": "TONE",
   "new": "F4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_fs4[0].short_label",
   "old": "TONE",
   "new": "F#4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_g4[0].short_label",
   "old": "TONE",
   "new": "G4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_gs4[0].short_label",
   "old": "TONE",
   "new": "G#4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_a4[0].short_label",
   "old": "TONE",
   "new": "A4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_as4[0].short_label",
   "old": "TONE",
   "new": "A#4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_b4[0].short_label",
   "old": "TONE",
   "new": "B4",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_c5[0].short_label",
   "old": "TONE",
   "new": "C5",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_cs5[0].short_label",
   "old": "TONE",
   "new": "C#5",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_d5[0].short_label",
   "old": "TONE",
   "new": "D5",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_ds5[0].short_label",
   "old": "TONE",
   "new": "D#5",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_e5[0].short_label",
   "old": "TONE",
   "new": "E5",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_f5[0].short_label",
   "old": "TONE",
   "new": "F5",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_fs5[0].short_label",
   "old": "TONE",
   "new": "F#5",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.key_g5[0].short_label",
   "old": "TONE",
   "new": "G5",
   "why": "firmware/firmware/src/seq.c:179-248@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_save[8]",
   "old": null,
   "new": {
    "mode": "effects_send",
    "gesture": "release",
    "short_label": "OPEN SONG",
    "action": "A short untouched tap from the player opens SONG.",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/winampFM",
      "ref": "v0.12",
      "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
      "path": "firmware/firmware/src/ui_input.c",
      "lines": "834-842",
      "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L842"
     }
    ]
   },
   "why": "firmware/firmware/src/ui_input.c:834-842@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_down[3].gesture",
   "old": "long_press",
   "new": "press_with:button_oct_up",
   "why": "firmware/firmware/src/ui_input.c:1039-1051@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_down[3].short_label",
   "old": "SEND RESET",
   "new": "FX RESET .8s",
   "why": "firmware/firmware/src/ui_input.c:1039-1051@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_down[4].gesture",
   "old": "long_press",
   "new": "press_with:button_oct_up",
   "why": "firmware/firmware/src/main.c:243-270@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_down[4].short_label",
   "old": "USB UPDATE",
   "new": "UPDATE 5s",
   "why": "firmware/firmware/src/main.c:243-270@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "index-fix-r1",
   "at": "version_note",
   "old": null,
   "new": "The community hub marks v0.12 as beta in its 2026-10-22 catalogue; the site at the mapped commit warns that it is experimental and may be unstable.",
   "why": "https://thefirmwarehub.com/catalog.json, updated 2026-10-22 23:02 UTC; saved response: scratchpad/w34r/index-r1/web/catalog.json; https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/index.html#L663"
  },
  {
   "round": "index-fix-r1",
   "at": "control-maps/winampfm.md:3",
   "old": "Mapped v0.12 (54575a4), 2026-10-17. [Firmware site and installer](https://hericdk.github.io/winampFM/) · [Community hub](https://thefirmwarehub.com/).",
   "new": "Mapped v0.12 (beta; 54575a4), 2026-10-17. [Firmware site and installer](https://hericdk.github.io/winampFM/) · [Community hub](https://thefirmwarehub.com/).\n\nThe community hub marks v0.12 as beta in its 2026-10-22 catalogue; the site at the mapped commit warns that it is experimental and may be unstable.",
   "why": "https://thefirmwarehub.com/catalog.json, updated 2026-10-22 23:02 UTC; saved response: scratchpad/w34r/index-r1/web/catalog.json; https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/index.html#L663"
  },
  {
   "round": "overlay-fix-r2",
   "at": "controls.button_save[8].source[0]",
   "old": {
    "kind": "source",
    "repo": "https://github.com/hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/ui_input.c",
    "lines": "834-842",
    "url": "https://github.com/https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L842"
   },
   "new": {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/ui_input.c",
    "lines": "834-842",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L842"
   },
   "why": "firmware/firmware/src/ui_input.c:834-842@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  },
  {
   "round": "overlay-fix-r2",
   "at": "refresh_check_fixes[49].new.source[0]",
   "old": {
    "kind": "source",
    "repo": "https://github.com/hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/ui_input.c",
    "lines": "834-842",
    "url": "https://github.com/https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L842"
   },
   "new": {
    "kind": "source",
    "repo": "hericdk/winampFM",
    "ref": "v0.12",
    "commit": "54575a4bb81e2769bd3f4ae03d0af5e80785b7cf",
    "path": "firmware/firmware/src/ui_input.c",
    "lines": "834-842",
    "url": "https://github.com/hericdk/winampFM/blob/54575a4bb81e2769bd3f4ae03d0af5e80785b7cf/firmware/firmware/src/ui_input.c#L834-L842"
   },
   "why": "firmware/firmware/src/ui_input.c:834-842@54575a4bb81e2769bd3f4ae03d0af5e80785b7cf"
  }
 ],
 "checker_disputes_refresh": [],
 "version_note": "The community hub marks v0.12 as beta in its 2026-10-22 catalogue; the site at the mapped commit warns that it is experimental and may be unstable."
}