From d9c781c70166411ff54304f0e28780029ba28e3e Mon Sep 17 00:00:00 2001 From: clover caruso Date: Sun, 15 Mar 2026 15:50:57 -0700 Subject: [PATCH] initial stuff --- .gitignore | 1 + config/reaper.ts | 51 + config/reaper/insert_track.lua | 90 + config/reaper/register_scripts.lua | 70 + .../scripts/insert_addictive_drums_track.lua | 11 + config/reaper/scripts/insert_blank_track.lua | 11 + .../scripts/insert_komplete_kontrol_track.lua | 11 + docs/speed-editor.jpg | Bin 0 -> 68353 bytes examples/event-listener.ts | 24 + examples/toast.ts | 25 + package.json | 32 + pnpm-lock.yaml | 214 + pnpm-workspace.yaml | 2 + readme.md | 98 + src/Mac.ts | 911 +++ src/Mac/frontmost_app_helper.m | 42 + src/Mac/toast_helper.m | 98 + src/Reaper.ts | 873 +++ src/Reaper/CloverAutomation.ReaperOSC | 25 + src/Reaper/actions.ts | 6661 +++++++++++++++++ src/Reaper/enumerate_actions.lua | 69 + src/Reaper/generate-actions.ts | 183 + src/SpeedEditor.ts | 991 +++ src/config.ts | 292 + src/main.ts | 3 + 25 files changed, 10788 insertions(+) create mode 100644 .gitignore create mode 100644 config/reaper.ts create mode 100644 config/reaper/insert_track.lua create mode 100644 config/reaper/register_scripts.lua create mode 100644 config/reaper/scripts/insert_addictive_drums_track.lua create mode 100644 config/reaper/scripts/insert_blank_track.lua create mode 100644 config/reaper/scripts/insert_komplete_kontrol_track.lua create mode 100644 docs/speed-editor.jpg create mode 100644 examples/event-listener.ts create mode 100644 examples/toast.ts create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 readme.md create mode 100644 src/Mac.ts create mode 100644 src/Mac/frontmost_app_helper.m create mode 100644 src/Mac/toast_helper.m create mode 100644 src/Reaper.ts create mode 100644 src/Reaper/CloverAutomation.ReaperOSC create mode 100644 src/Reaper/actions.ts create mode 100644 src/Reaper/enumerate_actions.lua create mode 100644 src/Reaper/generate-actions.ts create mode 100644 src/SpeedEditor.ts create mode 100644 src/config.ts create mode 100644 src/main.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..3c3629e647f5ddf82548912e337bea9826b434af --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/config/reaper.ts b/config/reaper.ts new file mode 100644 index 0000000000000000000000000000000000000000..94ab0006f7e6992a8dfb2b5895a13a0f5576e53f --- /dev/null +++ b/config/reaper.ts @@ -0,0 +1,51 @@ +import { Reaper } from "@clo/creative-control/Reaper.ts"; +import { SpeedEditor } from "@clo/creative-control/SpeedEditor.ts"; +import * as config from "#config"; + +export default config.forApp("com.cockos.reaper", ({ speededitor: se, mac }) => { + const reaper = new Reaper(); + + // Sync state to LEDs + reaper.on("transport", (transport) => { + console.info(transport); + se.leds.audioOnly = transport.recording; + }); + + // Keyboard Actions + SpeedEditor.camNumbersToNumpad(se, mac); + se.onPress("stopPlay", () => { + if(reaper.transport.recording) { + reaper.runAction('transport-stop-save-all-recorded-media'); + } else { + reaper.runAction('transport-play-stop'); + } + }); + se.onPress("smartInsert", () => { + mac.toast("Add Komplete Kontrol") + reaper.runScript("insert_komplete_kontrol_track"); + }); + se.onPress("append", () => { + mac.toast("Add Addictive Drums") + reaper.runScript("insert_addictive_drums_track"); + }); + se.onPress("rippleOverwrite", () => { + mac.toast("Blank Track") + reaper.runScript("insert_blank_track"); + }); + se.onPress("audioOnly", () => { + if(reaper.transport.recording) { + reaper.runAction('transport-stop-delete-all-recorded-media'); + reaper.runAction('transport-record'); + } else { + reaper.runAction('transport-record'); + } + }); + se.onPress("videoOnly", () => { + reaper.runAction("track-view-fx-chain-for-current-last-touched-track"); + }); + + // TODO: stabilize / find a better use-case for the knob + se.on("jog", ({ value = 0 }) => { + reaper.scrub(value / 20); + }); +}); diff --git a/config/reaper/insert_track.lua b/config/reaper/insert_track.lua new file mode 100644 index 0000000000000000000000000000000000000000..a33c4101daf12eeda697be2c05582ae807179c3a --- /dev/null +++ b/config/reaper/insert_track.lua @@ -0,0 +1,90 @@ +local function get_insert_index() + local selected = reaper.GetSelectedTrack(0, 0) + if not selected then + return reaper.CountTracks(0) + end + + local track_number = reaper.GetMediaTrackInfo_Value(selected, "IP_TRACKNUMBER") + return math.floor(track_number) +end + +local function focus_new_track(track) + reaper.SetOnlyTrackSelected(track) + reaper.SetMixerScroll(track) + reaper.Main_OnCommand(40913, 0) -- Vertical scroll selected tracks into view. +end + +local function set_track_name(track, name) + reaper.GetSetMediaTrackInfo_String(track, "P_NAME", name, true) +end + +local function get_action_name(options) + if options.action_name and options.action_name ~= "" then + return options.action_name + end + + if options.track_name and options.track_name ~= "" then + return "Add " .. options.track_name + end + + return "Add track" +end + +local function insert_track(options) + local action_name = get_action_name(options) + local fx_name = options.fx_name + local needs_midi_input = options.needs_midi_input + + if needs_midi_input == nil then + needs_midi_input = fx_name ~= nil and fx_name ~= "" + end + + reaper.Undo_BeginBlock() + reaper.PreventUIRefresh(1) + + local insert_index = get_insert_index() + reaper.InsertTrackAtIndex(insert_index, true) + + local track = reaper.GetTrack(0, insert_index) + local fx_index = -1 + local requested_fx = fx_name ~= nil and fx_name ~= "" + + if track then + reaper.SetMediaTrackInfo_Value(track, "I_RECMON", 1) + + if needs_midi_input then + reaper.SetMediaTrackInfo_Value(track, "I_RECINPUT", 4096 + 63) + end + + if options.track_name and options.track_name ~= "" then + set_track_name(track, options.track_name) + end + + if requested_fx then + fx_index = reaper.TrackFX_AddByName(track, fx_name, false, -1000) + if fx_index >= 0 then + reaper.TrackFX_Show(track, fx_index, 1) + end + end + + focus_new_track(track) + reaper.TrackList_AdjustWindows(false) + reaper.UpdateArrange() + end + + reaper.PreventUIRefresh(-1) + + if requested_fx and fx_index < 0 then + reaper.Undo_EndBlock(action_name .. " (FX not found)", -1) + reaper.ShowMessageBox( + 'Could not find FX named "' .. fx_name .. '". The track was still created.', + action_name, + 0 + ) + return + end + + reaper.Undo_EndBlock(action_name, -1) +end + +return insert_track diff --git a/config/reaper/register_scripts.lua b/config/reaper/register_scripts.lua new file mode 100644 index 0000000000000000000000000000000000000000..44e0701056d9e44983c90ce1b930597dce9f32a3 --- /dev/null +++ b/config/reaper/register_scripts.lua @@ -0,0 +1,70 @@ +local function current_script_dir() + local source = debug.getinfo(1, "S").source + local script_path = source:match("^@(.+)$") + return script_path:match("^(.*)[/\\].-$") +end + +local function list_action_scripts(path) + local files = {} + local index = 0 + + while true do + local file_name = reaper.EnumerateFiles(path, index) + if file_name == nil then + break + end + + if file_name:match("%.lua$") then + files[#files + 1] = file_name + end + + index = index + 1 + end + + table.sort(files) + return files +end + +local function add_script(path, commit) + local command_id = reaper.AddRemoveReaScript(true, 0, path, commit) + if command_id == 0 then + error("failed to register " .. path) + end + + local named = reaper.ReverseNamedCommandLookup(command_id) + if named ~= nil and named ~= "" then + return "_" .. named + end + + return tostring(command_id) +end + +local function remove_script(path, commit) + reaper.AddRemoveReaScript(false, 0, path, commit) +end + +local function ext_state_key_for_file(file_name) + local stem = file_name:match("^(.*)%.lua$") + if stem == nil or stem == "" then + error("invalid action file name: " .. file_name) + end + + return stem .. "_command_id" +end + +local script_dir = current_script_dir() +local actions_dir = script_dir .. "/scripts" +local files = list_action_scripts(actions_dir) + +if #files == 0 then + error("no action scripts found in " .. actions_dir) +end + +for _, file_name in ipairs(files) do + remove_script(actions_dir .. "/" .. file_name, false) +end + +for index, file_name in ipairs(files) do + local command_id = add_script(actions_dir .. "/" .. file_name, index == #files) + reaper.SetExtState("meow", ext_state_key_for_file(file_name), command_id, true) +end diff --git a/config/reaper/scripts/insert_addictive_drums_track.lua b/config/reaper/scripts/insert_addictive_drums_track.lua new file mode 100644 index 0000000000000000000000000000000000000000..34822ffdd091c85ba9838e56e996cfe5ba907e65 --- /dev/null +++ b/config/reaper/scripts/insert_addictive_drums_track.lua @@ -0,0 +1,11 @@ +local source = debug.getinfo(1, "S").source +local script_path = source:match("^@(.+)$") +local script_dir = script_path:match("^(.*)[/\\].-$") +local reaper_dir = script_dir:match("^(.*)[/\\].-$") + +local insert_track = dofile(reaper_dir .. "/insert_track.lua") + +insert_track({ + fx_name = "AUi: Addictive Drums 2 (XLN Audio)", + track_name = "Addictive Drums 2", +}) diff --git a/config/reaper/scripts/insert_blank_track.lua b/config/reaper/scripts/insert_blank_track.lua new file mode 100644 index 0000000000000000000000000000000000000000..7cd3811d90736addbdd69c1f247b910f084b52f5 --- /dev/null +++ b/config/reaper/scripts/insert_blank_track.lua @@ -0,0 +1,11 @@ +local source = debug.getinfo(1, "S").source +local script_path = source:match("^@(.+)$") +local script_dir = script_path:match("^(.*)[/\\].-$") +local reaper_dir = script_dir:match("^(.*)[/\\].-$") + +local insert_track = dofile(reaper_dir .. "/insert_track.lua") + +insert_track({ + action_name = "Add blank track", + needs_midi_input = false, +}) diff --git a/config/reaper/scripts/insert_komplete_kontrol_track.lua b/config/reaper/scripts/insert_komplete_kontrol_track.lua new file mode 100644 index 0000000000000000000000000000000000000000..414028daa9a333d4d3c0bc71283100b6f3f3e719 --- /dev/null +++ b/config/reaper/scripts/insert_komplete_kontrol_track.lua @@ -0,0 +1,11 @@ +local source = debug.getinfo(1, "S").source +local script_path = source:match("^@(.+)$") +local script_dir = script_path:match("^(.*)[/\\].-$") +local reaper_dir = script_dir:match("^(.*)[/\\].-$") + +local insert_track = dofile(reaper_dir .. "/insert_track.lua") + +insert_track({ + fx_name = "AUi: Komplete Kontrol (Native Instruments)", + track_name = "Komplete Kontrol", +}) diff --git a/docs/speed-editor.jpg b/docs/speed-editor.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fa69cc0395e7c58a57b03d6396f8d9bb34d5966 GIT binary patch literal 68353 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 NpS$G$X$SqC{2$v?4e { + console.info(ev); +}); +editor.on("keypress", (key) => { + console.info(`Press ${key}`); + + if (key === "smartInsert") { + mac.focusApp("com.google.Chrome"); + } +}); +editor.onDoublePress("transition", () => { + console.info('(double press) "Title"'); +}); + +console.info("init"); +mac.on("app-change", (bundle) => { + console.info(`Switch to ${bundle}`); +}); diff --git a/examples/toast.ts b/examples/toast.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c62eb714ddd77192fe9c60dd4e5a356ce1c0bdd --- /dev/null +++ b/examples/toast.ts @@ -0,0 +1,25 @@ +import { Mac } from "../src/Mac.ts"; + +const mac = await Mac.open(); +mac.on("error", (error) => { + console.error(error); +}); + +mac.toast("Insert AD2 Track", { + detail: "Loading Addictive Drums 2...", + durationMs: 900, +}); + +await new Promise((resolve) => { + setTimeout(resolve, 1300); +}); + +mac.toast("Insert Blank Track", { + durationMs: 800, +}); + +await new Promise((resolve) => { + setTimeout(resolve, 1200); +}); + +mac.close(); diff --git a/package.json b/package.json new file mode 100644 index 0000000000000000000000000000000000000000..ea002ce071af2c22b9b95c001798c85e537a054e --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "@clo/creative-control", + "version": "1.0.0", + "type": "module", + "license": "ISC", + "packageManager": "pnpm@10.26.1", + "scripts": { + "start": "node --watch src/main.ts", + "generate:reaper-actions": "node src/Reaper/generate-actions.ts" + }, + "dependencies": { + "@clo/lib": "jsr:^3.0.0", + "@types/node": "^25.5.0", + "node-hid": "^3.3.0", + "usb": "^2.17.0" + }, + "imports": { + "#config": "./src/config.ts" + }, + "exports": { + "./Mac.ts": "./src/Mac.ts", + "./SpeedEditor.ts": "./src/SpeedEditor.ts", + "./Reaper.ts": "./src/Reaper.ts", + "./Reaper/actions.ts": "./src/Reaper/actions.ts" + }, + "pnpm": { + "onlyBuiltDependencies": [ + "node-hid", + "usb" + ] + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0712975392a1930bfc9952ec40ed6e110d35ac9b --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,214 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@clo/lib': + specifier: jsr:^3.0.0 + version: '@jsr/clo__lib@3.0.0' + '@types/node': + specifier: ^25.5.0 + version: 25.5.0 + node-hid: + specifier: ^3.3.0 + version: 3.3.0 + usb: + specifier: ^2.17.0 + version: 2.17.0 + +packages: + + '@jsr/clo__lib@3.0.0': + resolution: {integrity: sha512-oseZwHCAcXNPbqnGZ37l7+wAoj6ikIXE1VM0s6eD6fz4DcgM030Slf0T7Lgtn7fIdas5hlfx4JF54TR+vo4THw==, tarball: https://npm.jsr.io/~/11/@jsr/clo__lib/3.0.0.tgz} + + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} + + '@types/w3c-web-usb@1.0.13': + resolution: {integrity: sha512-N2nSl3Xsx8mRHZBvMSdNGtzMyeleTvtlEw+ujujgXalPqOjIA6UtrqcB6OzyUjkTbDm3J7P1RNK1lgoO7jxtsw==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + + node-addon-api@8.6.0: + resolution: {integrity: sha512-gBVjCaqDlRUk0EwoPNKzIr9KkS9041G/q31IBShPs1Xz6UTA+EXdZADbzqAJQrpDRq71CIMnOP5VMut3SL0z5Q==} + engines: {node: ^18 || ^20 || >= 21} + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-hid@3.3.0: + resolution: {integrity: sha512-j+dFgJLRAE0nufQKXk3IfS6T6YuHhCgMvz4TrG0sgtb6DSCdYpfJ1etcdmeCmPQjUgO+yo32ktVrRliNs/+fmg==} + engines: {node: '>=10.16'} + hasBin: true + + pkg-prebuilds@1.0.0: + resolution: {integrity: sha512-D9wlkXZCmjxj2kBHTw3fGSyjoahr33breGBoJcoezpi7ouYS59DJVOHMZ+dgqacSrZiJo4qtkXxLQTE+BqXJmQ==} + engines: {node: '>= 14.15.0'} + hasBin: true + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + usb@2.17.0: + resolution: {integrity: sha512-UuFgrlglgDn5ll6d5l7kl3nDb2Yx43qLUGcDq+7UNLZLtbNug0HZBb2Xodhgx2JZB1LqvU+dOGqLEeYUeZqsHg==} + engines: {node: '>=12.22.0 <13.0 || >=14.17.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + +snapshots: + + '@jsr/clo__lib@3.0.0': {} + + '@types/node@25.5.0': + dependencies: + undici-types: 7.18.2 + + '@types/w3c-web-usb@1.0.13': {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + emoji-regex@8.0.0: {} + + escalade@3.2.0: {} + + get-caller-file@2.0.5: {} + + is-fullwidth-code-point@3.0.0: {} + + node-addon-api@3.2.1: {} + + node-addon-api@8.6.0: {} + + node-gyp-build@4.8.4: {} + + node-hid@3.3.0: + dependencies: + node-addon-api: 3.2.1 + pkg-prebuilds: 1.0.0 + + pkg-prebuilds@1.0.0: + dependencies: + yargs: 17.7.2 + + require-directory@2.1.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + undici-types@7.18.2: {} + + usb@2.17.0: + dependencies: + '@types/w3c-web-usb': 1.0.13 + node-addon-api: 8.6.0 + node-gyp-build: 4.8.4 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + y18n@5.0.8: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000000000000000000000000000000000000..538282ada29c55163e5ec29fe05f31f008a61b84 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +onlyBuiltDependencies: + - node-hid diff --git a/readme.md b/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..501565a4b684b6e76e01b53aa9ac4141d728c886 --- /dev/null +++ b/readme.md @@ -0,0 +1,98 @@ +# Clover's Creative Control + +This is a set of tools to let additional hardware surfaces integrate with +creative applications on a Mac device. In addition to the primary keybinding +system, this project can be used as a library to use the control primitves +directly (either to build your own hardware integrations, or to control the +software). + +These tools only work on macOS. I don't have interest in maintaining other configurations. + +## Hardware + +TODO: +- generic keyboard / karabiner elements integration? +- custom trackpad integration? + +### DaVinci Resolve Speed Editor + +A $300 bundle containing Fusion Studio and the control surface, it's a great deal. There is a large, high resolution knob, as well as many keys with some having lights. This repo includes an SDK to reprogram it to be useful in any program. + +![DaVinci Resolve Speed Editor](docs/speed-editor.jpg) + +## Software + +TODO: + +- Fusion +- Blender? +- Krita? +- The Finder +- QuickTime player + +### macOS (`Mac.ts`) + +Bind to the Mac desktop interface. + +```ts +const mac = await Mac.open(); + +mac.on() +``` + +### REAPER + +With the help of an OSC extension, REAPER can be controlled with TypeScript. + +```ts +import { Reaper } from "@clo/creative-control/Reaper.ts"; + +const reaper = new Reaper(); + +``` + +Setup: + +- Start up Clover Creative Control / `new Reaper()` +- Navigate to REAPER Settings (`Cmd+,`) +- Click `Control/OSC/web` on the left side panel +- Press `Add` + - Control surface mode: `OSC (Open Sound Control)` + - Device name: `Clover Automation` + - Pattern config: `CloverAutomation` + - Mode: `Configure device IP+local port` + - Device port: `58001` + - Device IP: `127.0.0.1` + - Local listen port: `58000` + - Local IP: (default) + - Allow binding messages to REAPER actions and FX learn + +## Config Format + +The main entrypoint loads config files from `./config`, which each apply to one +application. In this example, it configures Reaper to integrate with the Speed +Editor. The provided instance of hardware devices are wrapper objects that apply +the binds only when the program is active. This way, there aren't situations +with multiple readers conflicting. + +```ts +import * as config from "#config"; +import { Reaper } from "@clo/creative-control/Reaper.ts"; + +export default config.forApp("com.cockos.reaper", ({ speededitor, mac }) => { + const reaper = new Reaper(); + + // Sync state to LEDs + reaper.on("transport", (transport) => { + speededitor.leds.audioOnly = transport.recording; + }); + + // Keyboard Actions + speededitor.onPress("stopPlay", () => { + reaper.runAction("transport-play-stop"); + }); + speededitor.onPress("audioOnly", () => { + reaper.runAction("transport-record"); + }); +}); +``` diff --git a/src/Mac.ts b/src/Mac.ts new file mode 100644 index 0000000000000000000000000000000000000000..9dea64babeef44e18c82e437fe7c2b1d6530bf9f --- /dev/null +++ b/src/Mac.ts @@ -0,0 +1,911 @@ +import { Events } from "@clo/lib/Events.ts"; +import type { ChildProcessWithoutNullStreams } from "node:child_process"; +import { execFile, spawn } from "node:child_process"; +import { mkdir, stat } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; +import { promisify } from "node:util"; + +const execFileAsync = promisify(execFile); + +const APP_MONITOR_START_TIMEOUT_MS = 1000; +const FRONT_ASN_PATTERN = /ASN:[^\]\s]+/; +const BUNDLE_ID_PATTERN = /\b[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+\b/; +const MODULE_DIR = dirname(fileURLToPath(import.meta.url)); +const FRONTMOST_APP_HELPER_SOURCE_PATH = join( + MODULE_DIR, + "Mac/frontmost_app_helper.m", +); +const HELPER_BUILD_DIR = join(tmpdir(), "meow"); +const FRONTMOST_APP_HELPER_BINARY_PATH = join( + HELPER_BUILD_DIR, + "mac-frontmost-app-helper", +); +const TOAST_HELPER_SOURCE_PATH = join(MODULE_DIR, "Mac/toast_helper.m"); +const TOAST_HELPER_BINARY_PATH = join(HELPER_BUILD_DIR, "mac-toast-helper"); +const FRONTMOST_APP_SCRIPT = [ + 'ObjC.import("AppKit");', + "const app = $.NSWorkspace.sharedWorkspace.frontmostApplication;", + "if (!app || ObjC.unwrap(app) === null) {", + ' console.log("");', + "} else {", + " const bundleId = ObjC.unwrap(app.bundleIdentifier);", + ' console.log(bundleId ?? "");', + "}", +].join("\n"); +const KEYBOARD_EVENT_SCRIPT = [ + 'ObjC.import("ApplicationServices");', + "function run(argv) {", + " const payload = JSON.parse(argv[0] ?? '{}');", + " const actions = Array.isArray(payload.actions) ? payload.actions : [];", + " for (const action of actions) {", + " if (!Number.isInteger(action.keyCode)) {", + ' throw new Error(`Invalid key code: ${JSON.stringify(action)}`);', + " }", + " const event = $.CGEventCreateKeyboardEvent(", + " null,", + " action.keyCode,", + " Boolean(action.isDown),", + " );", + " if (!event) {", + ' throw new Error(`Failed to create keyboard event for key code ${action.keyCode}`);', + " }", + " $.CGEventPost($.kCGHIDEventTap, event);", + " $.CFRelease(event);", + " }", + ' return "";', + "}", +].join("\n"); +let frontmostAppHelperBinaryPromise: Promise | null = null; +let toastHelperBinaryPromise: Promise | null = null; + +// Key codes from Carbon/HIToolbox Events.h (virtual key codes on ANSI/US layouts). +const KEY_CODES = Object.freeze({ + a: 0x00, + s: 0x01, + d: 0x02, + f: 0x03, + h: 0x04, + g: 0x05, + z: 0x06, + x: 0x07, + c: 0x08, + v: 0x09, + isoSection: 0x0A, + b: 0x0B, + q: 0x0C, + w: 0x0D, + e: 0x0E, + r: 0x0F, + y: 0x10, + t: 0x11, + "1": 0x12, + "2": 0x13, + "3": 0x14, + "4": 0x15, + "6": 0x16, + "5": 0x17, + equal: 0x18, + "9": 0x19, + "7": 0x1A, + minus: 0x1B, + "8": 0x1C, + "0": 0x1D, + rightBracket: 0x1E, + o: 0x1F, + u: 0x20, + leftBracket: 0x21, + i: 0x22, + p: 0x23, + return: 0x24, + l: 0x25, + j: 0x26, + quote: 0x27, + k: 0x28, + semicolon: 0x29, + backslash: 0x2A, + comma: 0x2B, + slash: 0x2C, + n: 0x2D, + m: 0x2E, + period: 0x2F, + tab: 0x30, + space: 0x31, + grave: 0x32, + delete: 0x33, + escape: 0x35, + rightCommand: 0x36, + command: 0x37, + shift: 0x38, + capsLock: 0x39, + option: 0x3A, + control: 0x3B, + rightShift: 0x3C, + rightOption: 0x3D, + rightControl: 0x3E, + function: 0x3F, + f17: 0x40, + numpadDecimal: 0x41, + numpadMultiply: 0x43, + numpadPlus: 0x45, + numpadClear: 0x47, + volumeUp: 0x48, + volumeDown: 0x49, + mute: 0x4A, + numpadDivide: 0x4B, + numpadEnter: 0x4C, + numpadMinus: 0x4E, + f18: 0x4F, + f19: 0x50, + numpadEquals: 0x51, + numpad0: 0x52, + numpad1: 0x53, + numpad2: 0x54, + numpad3: 0x55, + numpad4: 0x56, + numpad5: 0x57, + numpad6: 0x58, + numpad7: 0x59, + f20: 0x5A, + numpad8: 0x5B, + numpad9: 0x5C, + jisYen: 0x5D, + jisUnderscore: 0x5E, + jisKeypadComma: 0x5F, + f5: 0x60, + f6: 0x61, + f7: 0x62, + f3: 0x63, + f8: 0x64, + f9: 0x65, + jisEisu: 0x66, + f11: 0x67, + jisKana: 0x68, + f13: 0x69, + f16: 0x6A, + f14: 0x6B, + f10: 0x6D, + f12: 0x6F, + f15: 0x71, + help: 0x72, + home: 0x73, + pageUp: 0x74, + forwardDelete: 0x75, + f4: 0x76, + end: 0x77, + f2: 0x78, + pageDown: 0x79, + f1: 0x7A, + leftArrow: 0x7B, + rightArrow: 0x7C, + downArrow: 0x7D, + upArrow: 0x7E, +} as const); +type MacKeyName = keyof typeof KEY_CODES; + +const KEY_NAMES = Object.freeze(Object.keys(KEY_CODES) as MacKeyName[]); +const KEY_CODE_LOOKUP = createKeyCodeLookup(KEY_CODES, { + backslash: ["\\"], + capsLock: ["caps"], + comma: [","], + command: ["cmd", "leftCommand", "leftCmd", "meta", "super"], + control: ["ctrl", "leftControl", "leftCtrl"], + delete: ["backspace"], + downArrow: ["down", "arrowDown"], + equal: ["="], + escape: ["esc"], + forwardDelete: ["deleteForward", "forwardDel"], + function: ["fn"], + grave: ["`", "backtick"], + leftArrow: ["left", "arrowLeft"], + leftBracket: ["[", "openBracket"], + minus: ["-"], + numpadClear: ["keypadClear"], + numpadDecimal: [ + "keypadDecimal", + "numpadDot", + "keypadDot", + "numpadPeriod", + "keypadPeriod", + ], + numpadDivide: ["keypadDivide", "keypadSlash"], + numpadEnter: ["keypadEnter", "keypadReturn"], + numpadEquals: ["keypadEquals"], + numpadMinus: ["keypadMinus"], + numpadMultiply: ["keypadMultiply", "keypadAsterisk"], + numpadPlus: ["keypadPlus"], + option: ["alt", "opt", "leftOption", "leftAlt"], + pageDown: ["pgdn"], + pageUp: ["pgup"], + period: ["."], + quote: ["'", "apostrophe"], + return: ["enter", "mainEnter"], + rightArrow: ["right", "arrowRight"], + rightBracket: ["]", "closeBracket"], + rightCommand: ["rightCmd"], + rightControl: ["rightCtrl"], + rightOption: ["rightAlt"], + rightShift: ["rightShift"], + semicolon: [";"], + shift: ["leftShift"], + slash: ["/"], + space: ["spacebar"], + upArrow: ["up", "arrowUp"], +}); + +type KeyboardAction = { + keyCode: number; + isDown: boolean; +}; + +export class Mac extends Events { + static readonly keyCodes = KEY_CODES; + static readonly keyNames = KEY_NAMES; + + #closed = false; + #started = false; + #appMonitor: ChildProcessWithoutNullStreams | null = null; + #appMonitorBuffer = ""; + #appMonitorStartup: Promise | null = null; + #currentApp: string | null = null; + #keyboardQueue: Promise = Promise.resolve(); + + private constructor(_options: Mac.Options = {}) { + super(); + } + + static async open(options: Mac.Options = {}) { + const mac = new Mac(options); + await mac.start(); + return mac; + } + + static resolveKeyCode(key: Mac.Key) { + return resolveKeyCode(key); + } + + get currentApp(): string | null { + return this.#currentApp; + } + + async start() { + if (this.#closed) { + throw new Error("Cannot start a closed Mac instance"); + } + if (this.#started) { + return this.#currentApp; + } + + this.#started = true; + try { + await this.#startAppMonitor(); + } catch (error) { + this.#started = false; + throw error; + } + + return this.#currentApp; + } + + close() { + if (this.#closed) { + return; + } + + this.#closed = true; + this.#started = false; + this.#stopAppMonitor(); + + this.emit("close"); + } + + async focusApp(bundleId: string) { + this.#assertOpen("Cannot focus an app from a closed Mac instance"); + + await execFileAsync("/usr/bin/open", ["-b", bundleId]); + await this.#syncCurrentApp(); + } + + async pressKey(key: Mac.Key, options: Mac.KeyPressOptions = {}) { + const keyCode = resolveKeyCode(key); + const modifierCodes = uniqueKeyCodes(options.modifiers ?? []); + const holdMs = normalizeDelayMs(options.holdMs ?? 0, "holdMs"); + const keyDownActions = [ + ...modifierCodes.map((modifierKeyCode) => ({ + keyCode: modifierKeyCode, + isDown: true, + })), + { keyCode, isDown: true }, + ]; + const keyUpActions = [ + { keyCode, isDown: false }, + ...modifierCodes + .slice() + .reverse() + .map((modifierKeyCode) => ({ + keyCode: modifierKeyCode, + isDown: false, + })), + ]; + + return this.#enqueueKeyboardOperation(async () => { + this.#assertOpen("Cannot send key events from a closed Mac instance"); + await this.#runKeyboardActions(keyDownActions); + try { + if (holdMs > 0) { + await sleep(holdMs); + } + } finally { + await this.#runKeyboardActions(keyUpActions); + } + }); + } + + async keyDown(key: Mac.Key) { + const keyCode = resolveKeyCode(key); + return this.#enqueueKeyboardOperation(async () => { + this.#assertOpen("Cannot send key events from a closed Mac instance"); + await this.#runKeyboardActions([{ keyCode, isDown: true }]); + }); + } + + async keyUp(key: Mac.Key) { + const keyCode = resolveKeyCode(key); + return this.#enqueueKeyboardOperation(async () => { + this.#assertOpen("Cannot send key events from a closed Mac instance"); + await this.#runKeyboardActions([{ keyCode, isDown: false }]); + }); + } + + toast(message: string, options: Mac.ToastOptions = {}) { + this.#assertOpen("Cannot show a toast from a closed Mac instance"); + void dispatchToast(message, options).catch((error) => { + queueMicrotask(() => { + this.emit("error", error); + }); + }); + } + + async #startAppMonitor() { + if (this.#appMonitor) { + return; + } + if (this.#appMonitorStartup) { + return this.#appMonitorStartup; + } + + this.#appMonitorStartup = this.#spawnAppMonitor().finally(() => { + this.#appMonitorStartup = null; + }); + + return this.#appMonitorStartup; + } + + #stopAppMonitor() { + const appMonitor = this.#appMonitor; + this.#appMonitor = null; + this.#appMonitorBuffer = ""; + if (!appMonitor) { + return; + } + + appMonitor.removeAllListeners(); + appMonitor.stdout.removeAllListeners(); + appMonitor.stderr.removeAllListeners(); + appMonitor.kill(); + } + + async #spawnAppMonitor() { + const helperPath = await ensureFrontmostAppHelperBinary(); + + await new Promise((resolve, reject) => { + let stderr = ""; + let startupFinished = false; + let startupSucceeded = false; + + const finishStartup = ( + result: { ok: true } | { ok: false; error: Error }, + ) => { + if (startupFinished) { + return false; + } + startupFinished = true; + clearTimeout(startupTimeout); + if (result.ok) { + startupSucceeded = true; + resolve(); + } else { + reject(result.error); + } + return true; + }; + + const appMonitor = spawn(helperPath, [], { + stdio: ["ignore", "pipe", "pipe"], + }); + + this.#appMonitor = appMonitor; + this.#appMonitorBuffer = ""; + appMonitor.stdout.setEncoding("utf8"); + appMonitor.stderr.setEncoding("utf8"); + + const startupTimeout = setTimeout(() => { + const error = new Error( + "Timed out waiting for the macOS app monitor to start.", + ); + if (finishStartup({ ok: false, error })) { + this.#stopAppMonitor(); + } + }, APP_MONITOR_START_TIMEOUT_MS); + + appMonitor.stdout.on("data", (chunk: string) => { + const sawLine = this.#handleAppMonitorOutput(chunk); + if (sawLine) { + finishStartup({ ok: true }); + } + }); + appMonitor.stderr.on("data", (chunk: string) => { + stderr += chunk; + }); + appMonitor.once("error", (error) => { + this.#appMonitorExited(appMonitor); + const monitorError = formatAppMonitorError( + "The macOS app monitor process failed.", + error, + ); + if (!finishStartup({ ok: false, error: monitorError }) && startupSucceeded) { + this.#emitMonitorError(monitorError); + } + }); + appMonitor.once("exit", (code, signal) => { + this.#appMonitorExited(appMonitor); + const monitorError = formatAppMonitorError( + formatAppMonitorExitMessage(code, signal), + stderr, + ); + if (!finishStartup({ ok: false, error: monitorError }) && startupSucceeded) { + this.#emitMonitorError(monitorError); + } + }); + }); + } + + #appMonitorExited(appMonitor: ChildProcessWithoutNullStreams) { + if (this.#appMonitor === appMonitor) { + this.#appMonitor = null; + } + this.#appMonitorBuffer = ""; + } + + #handleAppMonitorOutput(chunk: string) { + this.#appMonitorBuffer += chunk; + let sawLine = false; + + while (true) { + const newlineIndex = this.#appMonitorBuffer.indexOf("\n"); + if (newlineIndex === -1) { + return sawLine; + } + + const line = this.#appMonitorBuffer + .slice(0, newlineIndex) + .replace(/\r$/, ""); + this.#appMonitorBuffer = this.#appMonitorBuffer.slice(newlineIndex + 1); + sawLine = true; + this.#setCurrentApp(normalizeBundleId(line)); + } + } + + async #syncCurrentApp() { + try { + return this.#setCurrentApp(await this.#readFrontmostApp()); + } catch (error) { + this.#emitMonitorError(error); + return null; + } + } + + #setCurrentApp(bundleId: string | null) { + if (this.#closed || !bundleId) { + return bundleId; + } + if (bundleId !== this.#currentApp) { + this.#currentApp = bundleId; + this.emit("app-change", bundleId); + } + return bundleId; + } + + async #readFrontmostApp() { + const fromLaunchServices = await this.#readFrontmostAppFromLaunchServices(); + if (fromLaunchServices) { + return fromLaunchServices; + } + + const { stdout } = await execFileAsync("/usr/bin/osascript", [ + "-l", + "JavaScript", + "-e", + FRONTMOST_APP_SCRIPT, + ]); + + return normalizeBundleId(stdout); + } + + async #readFrontmostAppFromLaunchServices() { + const { stdout } = await execFileAsync("/usr/bin/lsappinfo", ["front"]); + const frontSpecifier = extractFrontAppSpecifier(stdout); + if (!frontSpecifier) { + return null; + } + + const { stdout: info } = await execFileAsync("/usr/bin/lsappinfo", [ + "info", + "-only", + "bundleid", + frontSpecifier, + ]); + + return normalizeBundleId(info); + } + + async #enqueueKeyboardOperation(operation: () => Promise) { + const next = this.#keyboardQueue.then(operation, operation); + this.#keyboardQueue = next.then( + () => undefined, + () => undefined, + ); + return next; + } + + async #runKeyboardActions(actions: ReadonlyArray) { + if (actions.length === 0) { + return; + } + + try { + await execFileAsync("/usr/bin/osascript", [ + "-l", + "JavaScript", + "-e", + KEYBOARD_EVENT_SCRIPT, + JSON.stringify({ actions }), + ]); + } catch (error) { + throw new Error(formatKeyboardDispatchError(error)); + } + } + + #assertOpen(message: string) { + if (this.#closed) { + throw new Error(message); + } + } + + #emitMonitorError(error: unknown) { + queueMicrotask(() => { + this.emit("error", error); + }); + } +} + +export declare namespace Mac { + export interface Options { + /** Deprecated: app-change is now event-driven and no longer polls. */ + pollIntervalMs?: number; + } + + export interface KeyCode { + keyCode: number; + } + + export type KeyName = MacKeyName; + export type Key = KeyName | number | KeyCode; + + export interface KeyPressOptions { + holdMs?: number; + modifiers?: readonly Key[]; + } + + export interface ToastOptions { + detail?: string; + durationMs?: number; + } + + export type EventMap = { + "app-change": [bundleId: string]; + "close": []; + "error": [error: unknown]; + }; + + export type BundleId = + | (string & {}) + | "com.apple.Chess" + | "com.apple.MobileSMS" + | "com.apple.Music" + | "com.apple.Notes" + | "com.apple.Preview" + | "com.apple.QuickTimePlayerX" + | "com.apple.Safari" + | "com.apple.finder" + | "com.apple.iCal" + | "com.blackmagic-design.fusion" + | "com.cockos.reaper" + | "com.google.Chrome" + | "com.google.Chrome" + | "com.mitchellh.ghostty" + | "org.mozilla.firefox" + | "org.whispersystems.signal-desktop"; +} + +function normalizeBundleId(stdout: string) { + const directBundleId = stdout.trim(); + const bundleId = BUNDLE_ID_PATTERN.exec(directBundleId)?.[0] ?? + directBundleId; + if ( + bundleId === "" || + bundleId === "undefined" || + bundleId === "[id nil]" + ) { + return null; + } + return bundleId; +} + +function extractFrontAppSpecifier(stdout: string) { + const trimmed = stdout.trim(); + if (trimmed === "" || trimmed === "[ NULL ]" || trimmed === "NULL") { + return null; + } + + return FRONT_ASN_PATTERN.exec(trimmed)?.[0] ?? + trimmed.replace(/^\[\s*|\s*\]$/g, ""); +} + +function normalizeDelayMs(value: number, name: string) { + if (!Number.isFinite(value) || value < 0) { + throw new Error(`${name} must be a non-negative number`); + } + return Math.round(value); +} + +function normalizeDurationMs( + value: number, + name: string, + min: number, + max: number, +) { + const rounded = normalizeDelayMs(value, name); + return Math.min(max, Math.max(min, rounded)); +} + +function resolveKeyCode(key: Mac.Key): number { + if (typeof key === "number") { + return normalizeKeyCode(key); + } + + if (typeof key === "string") { + const keyCode = KEY_CODE_LOOKUP.get(normalizeKeyName(key)); + if (keyCode !== undefined) { + return keyCode; + } + throw new Error( + `Unknown Mac key "${key}". Use Mac.keyCodes for named keys or pass a numeric keyCode.`, + ); + } + + if (key && typeof key === "object" && "keyCode" in key) { + return normalizeKeyCode(key.keyCode); + } + + throw new Error(`Unsupported Mac key: ${String(key)}`); +} + +function normalizeKeyCode(keyCode: number) { + if ( + !Number.isInteger(keyCode) || + keyCode < 0 || + keyCode > 0xFFFF + ) { + throw new Error(`Mac keyCode must be an integer between 0 and 65535`); + } + return keyCode; +} + +function uniqueKeyCodes(keys: readonly Mac.Key[]) { + const seen = new Set(); + const keyCodes: number[] = []; + + for (const key of keys) { + const keyCode = resolveKeyCode(key); + if (seen.has(keyCode)) { + continue; + } + seen.add(keyCode); + keyCodes.push(keyCode); + } + + return keyCodes; +} + +function normalizeKeyName(key: string) { + return key.trim().toLowerCase().replace(/[\s_-]+/g, ""); +} + +function createKeyCodeLookup( + keyCodes: Record, + aliases: Partial>, +) { + const lookup = new Map(); + + for (const [name, keyCode] of Object.entries(keyCodes)) { + lookup.set(normalizeKeyName(name), keyCode); + if (name.startsWith("numpad")) { + lookup.set( + normalizeKeyName(`keypad${name.slice("numpad".length)}`), + keyCode, + ); + } + } + + for (const [canonicalName, names] of Object.entries(aliases)) { + const keyCode = keyCodes[canonicalName]; + if (keyCode === undefined) { + continue; + } + for (const name of names ?? []) { + lookup.set(normalizeKeyName(name), keyCode); + } + } + + return lookup; +} + +function formatKeyboardDispatchError(error: unknown) { + const details = extractCommandErrorOutput(error); + const suffix = details ? ` ${details}` : ""; + return ( + "Failed to send a macOS keyboard event via osascript. " + + "Make sure this process is allowed in System Settings > Privacy & Security > Accessibility." + + suffix + ); +} + +async function dispatchToast(message: string, options: Mac.ToastOptions) { + const payload = { + message: normalizeToastText(message, "message"), + detail: normalizeToastDetail(options.detail), + durationMs: normalizeDurationMs( + options.durationMs ?? 1000, + "toast durationMs", + 250, + 4000, + ), + }; + + try { + const helperPath = await ensureToastHelperBinary(); + await execFileAsync(helperPath, [ + payload.message, + payload.detail, + String(payload.durationMs / 1000), + ]); + } catch (error) { + throw new Error(formatToastDispatchError(error)); + } +} + +async function ensureToastHelperBinary() { + if (!toastHelperBinaryPromise) { + toastHelperBinaryPromise = buildObjectiveCHelperBinary( + TOAST_HELPER_SOURCE_PATH, + TOAST_HELPER_BINARY_PATH, + ).catch((error) => { + toastHelperBinaryPromise = null; + throw error; + }); + } + + return toastHelperBinaryPromise; +} + +async function ensureFrontmostAppHelperBinary() { + if (!frontmostAppHelperBinaryPromise) { + frontmostAppHelperBinaryPromise = buildObjectiveCHelperBinary( + FRONTMOST_APP_HELPER_SOURCE_PATH, + FRONTMOST_APP_HELPER_BINARY_PATH, + ).catch((error) => { + frontmostAppHelperBinaryPromise = null; + throw error; + }); + } + + return frontmostAppHelperBinaryPromise; +} + +async function buildObjectiveCHelperBinary( + sourcePath: string, + binaryPath: string, +) { + await mkdir(HELPER_BUILD_DIR, { recursive: true }); + + const [sourceStats, binaryStats] = await Promise.all([ + stat(sourcePath), + stat(binaryPath).catch(() => null), + ]); + + if (!binaryStats || binaryStats.mtimeMs < sourceStats.mtimeMs) { + await execFileAsync("/usr/bin/clang", [ + "-fobjc-arc", + "-framework", + "AppKit", + "-framework", + "Foundation", + sourcePath, + "-o", + binaryPath, + ]); + } + + return binaryPath; +} + +function extractCommandErrorOutput(error: unknown) { + if (!error || typeof error !== "object") { + return ""; + } + + const stdout = "stdout" in error && typeof error.stdout === "string" + ? error.stdout.trim() + : ""; + const stderr = "stderr" in error && typeof error.stderr === "string" + ? error.stderr.trim() + : ""; + const message = error instanceof Error ? error.message.trim() : ""; + + return [stderr, stdout, message].find((value) => value !== "") ?? ""; +} + +function formatToastDispatchError(error: unknown) { + const details = extractCommandErrorOutput(error); + const suffix = details ? ` ${details}` : ""; + return `Failed to show a macOS toast.${suffix}`; +} + +function formatAppMonitorExitMessage(code: number | null, signal: NodeJS.Signals | null) { + if (signal) { + return `The macOS app monitor stopped after receiving ${signal}.`; + } + if (code === null || code === 0) { + return "The macOS app monitor stopped unexpectedly."; + } + return `The macOS app monitor exited with code ${code}.`; +} + +function formatAppMonitorError(summary: string, error: unknown) { + const details = extractCommandErrorOutput(error); + const suffix = details ? ` ${details}` : ""; + return new Error(`${summary}${suffix}`); +} + +function normalizeToastText(value: string, name: string) { + const text = value.trim(); + if (text === "") { + throw new Error(`Mac.toast ${name} must be a non-empty string`); + } + return text; +} + +function normalizeToastDetail(detail: string | undefined) { + if (detail === undefined) { + return ""; + } + return detail.trim(); +} + +function sleep(ms: number) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} diff --git a/src/Mac/frontmost_app_helper.m b/src/Mac/frontmost_app_helper.m new file mode 100644 index 0000000000000000000000000000000000000000..5156ed7051795c89dd3b2bffe6b7f4e9ee01e3c0 --- /dev/null +++ b/src/Mac/frontmost_app_helper.m @@ -0,0 +1,42 @@ +#import +#import + +static void PrintBundleIdentifier(NSRunningApplication *application) { + NSString *bundleIdentifier = application.bundleIdentifier ?: @""; + const char *utf8 = bundleIdentifier.UTF8String ?: ""; + fprintf(stdout, "%s\n", utf8); + fflush(stdout); +} + +@interface FrontmostAppObserver : NSObject +@end + +@implementation FrontmostAppObserver + +- (void)handleActivation:(NSNotification *)notification { + NSRunningApplication *application = notification.userInfo[NSWorkspaceApplicationKey]; + PrintBundleIdentifier(application); +} + +@end + +int main(void) { + @autoreleasepool { + [NSApplication sharedApplication]; + [NSApp setActivationPolicy:NSApplicationActivationPolicyProhibited]; + + FrontmostAppObserver *observer = [FrontmostAppObserver new]; + NSWorkspace *workspace = NSWorkspace.sharedWorkspace; + NSNotificationCenter *center = workspace.notificationCenter; + + PrintBundleIdentifier(workspace.frontmostApplication); + [center addObserver:observer + selector:@selector(handleActivation:) + name:NSWorkspaceDidActivateApplicationNotification + object:nil]; + + [[NSRunLoop currentRunLoop] run]; + } + + return 0; +} diff --git a/src/Mac/toast_helper.m b/src/Mac/toast_helper.m new file mode 100644 index 0000000000000000000000000000000000000000..13199776f16b6d0fd05d6b180fe9e51716c94861 --- /dev/null +++ b/src/Mac/toast_helper.m @@ -0,0 +1,98 @@ +#import +#import + +static NSTextField *MakeLabel(NSRect frame, NSString *text, NSFont *font, NSColor *color) { + NSTextField *label = [[NSTextField alloc] initWithFrame:frame]; + [label setStringValue:text ?: @""]; + [label setBezeled:NO]; + [label setBordered:NO]; + [label setDrawsBackground:NO]; + [label setEditable:NO]; + [label setSelectable:NO]; + [label setAlignment:NSTextAlignmentCenter]; + [label setTextColor:color]; + [label setFont:font]; + [label setLineBreakMode:NSLineBreakByTruncatingTail]; + [label setUsesSingleLineMode:YES]; + return label; +} + +int main(int argc, const char *argv[]) { + @autoreleasepool { + NSString *message = argc > 1 ? [NSString stringWithUTF8String:argv[1]] : @"Toast"; + NSString *detail = argc > 2 ? [NSString stringWithUTF8String:argv[2]] : @""; + double durationSeconds = argc > 3 ? strtod(argv[3], NULL) : 1.0; + if (durationSeconds < 0.25) { + durationSeconds = 0.25; + } + if (durationSeconds > 4.0) { + durationSeconds = 4.0; + } + + [NSApplication sharedApplication]; + [NSApp setActivationPolicy:NSApplicationActivationPolicyAccessory]; + + CGFloat width = MIN(420.0, MAX(220.0, (CGFloat)message.length * 9.0 + 72.0)); + CGFloat height = detail.length > 0 ? 72.0 : 52.0; + NSRect screenFrame = NSScreen.mainScreen ? NSScreen.mainScreen.visibleFrame : NSMakeRect(0, 0, 1440, 900); + CGFloat x = NSMidX(screenFrame) - (width / 2.0); + CGFloat y = NSMinY(screenFrame) + 72.0; + + NSPanel *window = [[NSPanel alloc] + initWithContentRect:NSMakeRect(x, y, width, height) + styleMask:NSWindowStyleMaskBorderless | NSWindowStyleMaskNonactivatingPanel + backing:NSBackingStoreBuffered + defer:NO]; + [window setOpaque:NO]; + [window setBackgroundColor:NSColor.clearColor]; + [window setHasShadow:YES]; + [window setIgnoresMouseEvents:YES]; + [window setFloatingPanel:YES]; + [window setHidesOnDeactivate:NO]; + [window setLevel:NSStatusWindowLevel]; + [window setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces | + NSWindowCollectionBehaviorFullScreenAuxiliary]; + + NSView *contentView = window.contentView; + contentView.wantsLayer = YES; + contentView.layer.backgroundColor = [[NSColor colorWithCalibratedWhite:0.08 alpha:0.92] CGColor]; + contentView.layer.cornerRadius = 14.0; + contentView.layer.masksToBounds = YES; + contentView.layer.borderWidth = 1.0; + contentView.layer.borderColor = [[NSColor colorWithCalibratedWhite:1.0 alpha:0.12] CGColor]; + + CGFloat titleY = detail.length > 0 ? 34.0 : 15.0; + [contentView addSubview:MakeLabel( + NSMakeRect(18, titleY, width - 36, 20), + message, + [NSFont boldSystemFontOfSize:13.0], + NSColor.whiteColor)]; + + if (detail.length > 0) { + [contentView addSubview:MakeLabel( + NSMakeRect(18, 14, width - 36, 16), + detail, + [NSFont systemFontOfSize:11.0], + [NSColor colorWithCalibratedWhite:1.0 alpha:0.72])]; + } + + [window setAlphaValue:0.0]; + [window orderFrontRegardless]; + + for (NSInteger step = 1; step <= 5; step += 1) { + [window setAlphaValue:(CGFloat)step / 5.0]; + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.02]]; + } + + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:durationSeconds]]; + + for (NSInteger step = 4; step >= 0; step -= 1) { + [window setAlphaValue:(CGFloat)step / 5.0]; + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.02]]; + } + + [window orderOut:nil]; + } + + return 0; +} diff --git a/src/Reaper.ts b/src/Reaper.ts new file mode 100644 index 0000000000000000000000000000000000000000..21c3afa493b5e3c896aae19858df8a1342f1a0c2 --- /dev/null +++ b/src/Reaper.ts @@ -0,0 +1,873 @@ +import { Events } from "@clo/lib/Events.ts"; +import * as log from "@clo/lib/log.ts"; +import { REAPER_ACTIONS, type ReaperActionId } from "./Reaper/actions.ts"; +import { execFile } from "node:child_process"; +import { createSocket, type Socket } from "node:dgram"; +import { readFileSync } from "node:fs"; +import { cp, mkdir, writeFile } from "node:fs/promises"; +import { basename, dirname, join } from "node:path"; +import process from "node:process"; +import { fileURLToPath } from "node:url"; +import { promisify } from "node:util"; +const console = log.scoped("reaper"); + +export type { ReaperActionId } from "./Reaper/actions.ts"; + +type ReaperCommandId = number; + +export interface ReaperOptions { + oscHost?: string; + oscPort?: number; + oscBindPort?: number; +} + +export interface ReaperTransportState { + playing: boolean; + paused: boolean; + recording: boolean; + repeatOn: boolean; + positionSeconds: number; + positionString: string; + positionBeatsString: string; + readAtMs: number; + source: "osc" | "optimistic"; +} + +type ReaperScriptName = string; + +type OscScalar = number | string | boolean; +type OscMessage = { + address: string; + args: OscScalar[]; +}; +type ReaperTransportPatch = Partial; + +const DEFAULT_REAPER_BIN = "/Applications/REAPER.app/Contents/MacOS/REAPER"; +const DEFAULT_REAPER_OSC_HOST = process.env.REAPER_OSC_HOST ?? "127.0.0.1"; +const DEFAULT_REAPER_OSC_PORT = readNumberEnv( + ["REAPER_OSC_PORT", "REAPER_OSC_TARGET_PORT"], + 58_000, +); +const DEFAULT_REAPER_OSC_BIND_PORT = readNumberEnv( + ["REAPER_OSC_BIND_PORT", "REAPER_OSC_FEEDBACK_PORT"], + 58_001, +); +const SCRUB_FLUSH_MS = 25; +const SCRUB_OSC_VALUE_PER_TICK = readNumberEnv( + [ + "REAPER_SCRUB_OSC_VALUE_PER_TICK", + "REAPER_SCRUB_SECONDS_PER_TICK", + "REAPER_JOG_SECONDS_PER_TICK", + ], + 0.1, +); +const MAX_SCRUB_OSC_VALUE = readNumberEnv( + [ + "REAPER_MAX_SCRUB_OSC_VALUE", + "REAPER_MAX_SCRUB_STEP_SECONDS", + "REAPER_MAX_JOG_STEP_SECONDS", + ], + 5, +); +const REAPER_SUPPORT_SOURCE_DIR = join( + dirname(fileURLToPath(import.meta.url)), + "..", + "config", + "reaper", +); +const DEFAULT_REAPER_RESOURCE_DIR = join( + process.env.HOME ?? "", + "Library", + "Application Support", + "REAPER", +); +const DEFAULT_REAPER_CONFIG_PATH = join( + DEFAULT_REAPER_RESOURCE_DIR, + "reaper.ini", +); +const DEFAULT_REAPER_SCRIPT_TARGET_DIR = join( + DEFAULT_REAPER_RESOURCE_DIR, + "Scripts", + "clover", +); +const DEFAULT_REAPER_OSC_TARGET_DIR = join( + DEFAULT_REAPER_RESOURCE_DIR, + "OSC", +); +const REAPER_SCRIPT_TARGET_DIR = process.env.REAPER_SCRIPTS_DIR ?? + DEFAULT_REAPER_SCRIPT_TARGET_DIR; +const REAPER_OSC_TARGET_DIR = process.env.REAPER_OSC_DIR ?? + DEFAULT_REAPER_OSC_TARGET_DIR; +const OSC_PATTERN_FILE = "CloverAutomation.ReaperOSC"; +const OSC_PATTERN_NAME = stripReaperOscExtension(OSC_PATTERN_FILE); +const OSC_PATTERN_CONFIG = `# OSC pattern config file for Clover Creative Control's REAPER integration. +DEVICE_TRACK_COUNT 1 +DEVICE_SEND_COUNT 0 +DEVICE_RECEIVE_COUNT 0 +DEVICE_FX_COUNT 0 +DEVICE_FX_PARAM_COUNT 0 +DEVICE_FX_INST_PARAM_COUNT 0 +DEVICE_MARKER_COUNT 0 +DEVICE_REGION_COUNT 0 + +REAPER_TRACK_FOLLOWS REAPER +DEVICE_TRACK_FOLLOWS DEVICE +DEVICE_TRACK_BANK_FOLLOWS DEVICE +DEVICE_FX_FOLLOWS DEVICE +DEVICE_ROTARY_CENTER 0 + +# ---------------------------------------------------------------- + +RECORD t/clover/record +STOP t/clover/stop +PLAY t/clover/play +PAUSE t/clover/pause +SCRUB r/clover/scrub + +ACTION i/clover/action s/clover/action/str t/clover/action/@`; +const OSC_ADDRESS = { + action: "/clover/action", + actionString: "/clover/action/str", + play: "/clover/play", + stop: "/clover/stop", + pause: "/clover/pause", + record: "/clover/record", + scrub: "/clover/scrub", +} as const; +const execFileAsync = promisify(execFile); + +export class Reaper extends Events { + #transport = blankTransportState(); + #pendingScrubDelta = 0; + #scrubTimer: ReturnType | null = null; + #warnedOscSocket = false; + #managedScriptsPromise: Promise | null = null; + #oscHost: string; + #oscPort: number; + #oscBindPort: number; + #receivedOscFeedback = false; + #receiveSocket: Socket; + #sendSocket: Socket; + #closed = false; + + constructor(options: ReaperOptions = {}) { + super(); + this.#oscHost = options.oscHost ?? DEFAULT_REAPER_OSC_HOST; + this.#oscPort = options.oscPort ?? DEFAULT_REAPER_OSC_PORT; + this.#oscBindPort = options.oscBindPort ?? DEFAULT_REAPER_OSC_BIND_PORT; + this.#receiveSocket = createSocket("udp4"); + this.#sendSocket = createSocket("udp4"); + this.#setupOscSockets(); + this.#warnIfOscSurfaceMissing(); + void this.#installOscPatternConfig().catch((error) => { + this.#logOscPatternInstallError(error); + }); + } + + get transport(): ReaperTransportState { + return { ...this.#transport }; + } + + #warnIfOscSurfaceMissing() { + if (hasManagedOscSurface(readReaperConfig())) { + return; + } + + console.info( + `${OSC_PATTERN_FILE} is not registered yet. ` + + `Add an OSC control surface manually using the "${OSC_PATTERN_NAME}" pattern, set REAPER's local listen port to ` + + `${this.#oscPort}, and send to ${this.#oscHost}:${this.#oscBindPort}. ` + + "The REAPER web interface is not required for this config." + ); + } + + close() { + if (this.#closed) { + return; + } + + this.#closed = true; + this.#clearScrubTimer(); + + this.#receiveSocket.removeAllListeners(); + this.#sendSocket.removeAllListeners(); + closeSocket(this.#receiveSocket); + closeSocket(this.#sendSocket); + } + + async runAction(actionId: ReaperActionId) { + const sent = await this.#sendCommand(REAPER_ACTIONS[actionId]); + if (!sent) { + return sent; + } + + const patch = optimisticTransportPatchForAction(actionId, this.#transport); + if (patch) { + this.#updateTransport(patch, "optimistic"); + } + + return sent; + } + + async #sendCommand(commandId: ReaperCommandId) { + return this.#sendLoggedOscMessage( + OSC_ADDRESS.action, + [commandId], + `run action ${commandId}`, + ); + } + + async #ensureManagedScripts() { + if (!this.#managedScriptsPromise) { + this.#managedScriptsPromise = this.#installManagedScripts() + .catch((error) => { + this.#managedScriptsPromise = null; + this.#logInstallError(error); + throw error; + }); + } + + await this.#managedScriptsPromise; + } + + async runScript(name: ReaperScriptName) { + try { + await this.#ensureManagedScripts(); + await this.#runManagedScript(name); + return true; + } catch (error) { + this.#logScriptError(name, error); + return false; + } + } + + scrub(value: number) { + this.#queueScrubDelta(value * SCRUB_OSC_VALUE_PER_TICK); + } + + async #flushScrub() { + const delta = clamp( + this.#pendingScrubDelta, + -MAX_SCRUB_OSC_VALUE, + MAX_SCRUB_OSC_VALUE, + ); + this.#pendingScrubDelta = 0; + + if (delta === 0) { + return; + } + + await this.#sendLoggedOscMessage( + OSC_ADDRESS.scrub, + [delta], + "scrub playhead", + ); + } + + async #installManagedScripts() { + await mkdir(REAPER_SCRIPT_TARGET_DIR, { recursive: true }); + await cp(REAPER_SUPPORT_SOURCE_DIR, REAPER_SCRIPT_TARGET_DIR, { + force: true, + recursive: true, + }); + } + + async #installOscPatternConfig() { + await mkdir(REAPER_OSC_TARGET_DIR, { recursive: true }); + await writeFile( + join(REAPER_OSC_TARGET_DIR, OSC_PATTERN_FILE), + OSC_PATTERN_CONFIG, + ); + } + + async #runManagedScript(name: ReaperScriptName) { + if (!await isProcessRunning(reaperProcessName())) { + throw new Error( + "REAPER is not running, so Clover skipped launching the script instead of opening it automatically.", + ); + } + + await execFileAsync(process.env.REAPER_BIN ?? DEFAULT_REAPER_BIN, [ + "-nonewinst", + join(REAPER_SCRIPT_TARGET_DIR, "scripts", `${name}.lua`), + ]); + } + + #setupOscSockets() { + this.#receiveSocket.on("message", (packet) => { + this.#handleOscPacket(packet); + }); + + this.#receiveSocket.on("error", (error) => { + this.#logOscSocketError(error); + }); + + this.#sendSocket.on("error", (error) => { + this.#logOscSocketError(error); + }); + + this.#receiveSocket.bind(this.#oscBindPort); + } + + #handleOscPacket(packet: Buffer) { + const patch = transportPatchForOscPacket(packet); + if (!patch) { + return; + } + + if (!this.#receivedOscFeedback) { + this.#receivedOscFeedback = true; + this.emit("osc-feedback"); + } + + this.#updateTransport(patch, "osc"); + } + + #updateTransport( + patch: ReaperTransportPatch, + source: ReaperTransportState["source"], + ) { + const previous = this.#transport; + const next = { + ...previous, + ...patch, + readAtMs: Date.now(), + source, + }; + this.#transport = next; + + if (!sameTransportState(previous, next)) { + this.emit("transport", { ...next }); + } + } + + #queueScrubDelta(delta: number) { + if (!Number.isFinite(delta) || delta === 0) { + return; + } + + this.#pendingScrubDelta += clamp( + delta, + -MAX_SCRUB_OSC_VALUE, + MAX_SCRUB_OSC_VALUE, + ); + + if (this.#scrubTimer) { + return; + } + + this.#scrubTimer = setTimeout(() => { + this.#scrubTimer = null; + void this.#flushScrub(); + }, SCRUB_FLUSH_MS); + } + + #clearScrubTimer() { + if (!this.#scrubTimer) { + return; + } + + clearTimeout(this.#scrubTimer); + this.#scrubTimer = null; + } + + async #sendLoggedOscMessage( + address: string, + args: OscScalar[], + action: string, + ) { + try { + await this.#sendOscMessage(address, args); + return true; + } catch (error) { + this.#logOscSendError(action, error); + return false; + } + } + + async #sendOscMessage(address: string, args: OscScalar[] = []) { + const payload = encodeOscMessage(address, args); + await new Promise((resolve, reject) => { + this.#sendSocket.send( + payload, + this.#oscPort, + this.#oscHost, + (error) => { + if (error) { + reject(error); + return; + } + resolve(); + }, + ); + }); + } + + #logOscSendError(action: string, error: unknown) { + this.#logError( + `Failed to ${action} via OSC ${this.#oscHost}:${this.#oscPort}.`, + error, + ); + } + + #logScriptError(name: ReaperScriptName, error: unknown) { + this.#logError( + `Failed to run script "${name}" from ${REAPER_SCRIPT_TARGET_DIR}.`, + error, + ); + } + + #logOscSocketError(error: unknown) { + if (!this.#warnedOscSocket) { + this.#warnedOscSocket = true; + this.#logError( + `Failed to bind OSC feedback socket on ${this.#oscBindPort}.`, + error, + ); + return; + } + + console.error(`[REAPER] ${formatError(error)}`); + } + + #logInstallError(error: unknown) { + this.#logError( + `Failed to install/update managed scripts in ${REAPER_SCRIPT_TARGET_DIR}.`, + error, + ); + } + + #logOscPatternInstallError(error: unknown) { + this.#logError( + `Failed to install/update ${OSC_PATTERN_FILE} in ${REAPER_OSC_TARGET_DIR}.`, + error, + ); + } + + #logError(message: string, error: unknown) { + console.error(`[REAPER] ${message}`); + console.error(`[REAPER] ${formatError(error)}`); + } +} + +export declare namespace Reaper { + export type EventMap = { + "transport": [transport: ReaperTransportState]; + "osc-feedback": []; + }; +} + +function blankTransportState(): ReaperTransportState { + return { + playing: false, + paused: false, + recording: false, + repeatOn: false, + positionSeconds: 0, + positionString: "", + positionBeatsString: "", + readAtMs: 0, + source: "optimistic", + }; +} + +function sameTransportState( + left: ReaperTransportState, + right: ReaperTransportState, +) { + return left.playing === right.playing && + left.paused === right.paused && + left.recording === right.recording && + left.repeatOn === right.repeatOn && + left.positionSeconds === right.positionSeconds && + left.positionString === right.positionString && + left.positionBeatsString === right.positionBeatsString; +} + +function optimisticTransportPatchForAction( + actionId: ReaperActionId, + transport: ReaperTransportState, +): ReaperTransportPatch | null { + switch (actionId) { + case "transport-play": + case "transport-play-skip-time-selection": + return { playing: true, paused: false }; + + case "transport-stop": + case "transport-stop-delete-all-recorded-media": + case "transport-stop-save-all-recorded-media": + return { playing: false, paused: false, recording: false }; + + case "transport-play-stop": + case "transport-play-stop-move-edit-cursor-on-stop": + return transport.playing || transport.paused || transport.recording + ? { playing: false, paused: false, recording: false } + : { playing: true, paused: false }; + + case "transport-record": + return transport.recording + ? { playing: false, paused: false, recording: false } + : { recording: true, playing: true, paused: false }; + + case "transport-pause": + if (transport.paused) { + return { paused: false, playing: true }; + } + if (transport.playing || transport.recording) { + return { paused: true, playing: false }; + } + return null; + + case "transport-play-pause": + if (transport.paused) { + return { paused: false, playing: true }; + } + if (transport.playing || transport.recording) { + return { paused: true, playing: false }; + } + return { playing: true, paused: false }; + + case "transport-toggle-repeat": + return { repeatOn: !transport.repeatOn }; + + default: + return null; + } +} + +function transportPatchForOscMessage( + message: OscMessage, +): ReaperTransportPatch | null { + switch (message.address) { + case OSC_ADDRESS.record: { + const recording = readOscBoolean(message.args[0]); + if (recording === null) { + return null; + } + + return recording + ? { recording, playing: true, paused: false } + : { recording }; + } + + case OSC_ADDRESS.play: { + const playing = readOscBoolean(message.args[0]); + if (playing === null) { + return null; + } + + return playing + ? { playing, paused: false } + : { playing }; + } + + case OSC_ADDRESS.pause: { + const paused = readOscBoolean(message.args[0]); + if (paused === null) { + return null; + } + + return paused + ? { paused, playing: false } + : { paused }; + } + + case OSC_ADDRESS.stop: + return readOscBoolean(message.args[0]) + ? { playing: false, paused: false, recording: false } + : null; + + default: + return null; + } +} + +function transportPatchForOscPacket(packet: Buffer): ReaperTransportPatch | null { + const messages = parseOscPacket(packet); + if (!messages) { + return null; + } + + let patch: ReaperTransportPatch | null = null; + for (const message of messages) { + const next = transportPatchForOscMessage(message); + if (!next) { + continue; + } + + patch = patch ? { ...patch, ...next } : next; + } + + return patch; +} + +function hasManagedOscSurface(config: string) { + for (const line of config.split(/\r?\n/u)) { + const match = /^csurf_\d+=(.+)$/u.exec(line.trim()); + if (!match) { + continue; + } + + const tokens = match[1]?.match(/"[^"]*"|'[^']*'|[^ ]+/gu) ?? []; + if (tokens[0] !== "OSC") { + continue; + } + + const normalizedTokens = tokens.map((token) => unquoteReaperToken(token)); + if ( + normalizedTokens.includes(OSC_PATTERN_FILE) || + normalizedTokens.includes(OSC_PATTERN_NAME) + ) { + return true; + } + } + + return false; +} + +function readReaperConfig() { + try { + return readFileSync(DEFAULT_REAPER_CONFIG_PATH, "utf8"); + } catch { + return ""; + } +} + +function closeSocket(socket: Socket) { + try { + socket.close(); + } catch {} +} + +function formatError(error: unknown) { + return error instanceof Error ? error.message : String(error); +} + +function unquoteReaperToken(token: string) { + if ( + (token.startsWith("'") && token.endsWith("'")) || + (token.startsWith("\"") && token.endsWith("\"")) + ) { + return token.slice(1, -1); + } + return token; +} + +function stripReaperOscExtension(fileName: string) { + return fileName.endsWith(".ReaperOSC") + ? fileName.slice(0, -".ReaperOSC".length) + : fileName; +} + +function readNumberEnv(names: ReadonlyArray, fallback: number) { + for (const name of names) { + const numeric = Number(process.env[name]); + if (Number.isFinite(numeric)) { + return numeric; + } + } + + return fallback; +} + +function clamp(value: number, min: number, max: number) { + return Math.min(max, Math.max(min, value)); +} + +function reaperProcessName() { + return basename(process.env.REAPER_BIN ?? DEFAULT_REAPER_BIN); +} + +async function isProcessRunning(processName: string) { + try { + await execFileAsync("pgrep", ["-x", processName]); + return true; + } catch { + return false; + } +} + +function parseOscPacket(packet: Buffer): OscMessage[] | null { + if (isOscBundle(packet)) { + return parseOscBundle(packet); + } + + const message = parseOscMessage(packet); + return message ? [message] : null; +} + +function isOscBundle(packet: Buffer) { + return packet.subarray(0, 8).equals(Buffer.from("#bundle\0")); +} + +function parseOscBundle(packet: Buffer): OscMessage[] | null { + const bundleHeader = readOscString(packet, 0); + if (!bundleHeader || bundleHeader.value !== "#bundle") { + return null; + } + + let offset = nextOscOffset(bundleHeader.nextOffset); + if (offset + 8 > packet.length) { + return null; + } + + offset += 8; + + const messages: OscMessage[] = []; + while (offset < packet.length) { + if (offset + 4 > packet.length) { + return null; + } + + const elementSize = packet.readInt32BE(offset); + offset += 4; + + if (elementSize < 0 || offset + elementSize > packet.length) { + return null; + } + + const element = packet.subarray(offset, offset + elementSize); + offset += elementSize; + + const elementMessages = parseOscPacket(element); + if (!elementMessages) { + return null; + } + + messages.push(...elementMessages); + } + + return messages; +} + +function parseOscMessage(packet: Buffer): OscMessage | null { + const address = readOscString(packet, 0); + if (!address) { + return null; + } + + const typeTags = readOscString(packet, nextOscOffset(address.nextOffset)); + if (!typeTags || !typeTags.value.startsWith(",")) { + return null; + } + + const args: OscScalar[] = []; + let offset = nextOscOffset(typeTags.nextOffset); + + for (const tag of typeTags.value.slice(1)) { + switch (tag) { + case "i": + if (offset + 4 > packet.length) return null; + args.push(packet.readInt32BE(offset)); + offset += 4; + break; + + case "f": + if (offset + 4 > packet.length) return null; + args.push(packet.readFloatBE(offset)); + offset += 4; + break; + + case "s": { + const value = readOscString(packet, offset); + if (!value) return null; + args.push(value.value); + offset = nextOscOffset(value.nextOffset); + break; + } + + case "T": + args.push(true); + break; + + case "F": + args.push(false); + break; + + default: + return null; + } + } + + return { address: address.value, args }; +} + +function encodeOscMessage(address: string, args: OscScalar[] = []) { + const parts = [encodeOscString(address)]; + const typeTags = "," + args.map((arg) => oscTypeTag(arg)).join(""); + parts.push(encodeOscString(typeTags)); + + for (const arg of args) { + parts.push(encodeOscArgument(arg)); + } + + return Buffer.concat(parts); +} + +function oscTypeTag(value: OscScalar) { + if (typeof value === "number") { + return Number.isInteger(value) ? "i" : "f"; + } + if (typeof value === "boolean") { + return value ? "T" : "F"; + } + return "s"; +} + +function encodeOscArgument(value: OscScalar) { + if (typeof value === "number") { + const buffer = Buffer.alloc(4); + if (Number.isInteger(value)) { + buffer.writeInt32BE(value, 0); + } else { + buffer.writeFloatBE(value, 0); + } + return buffer; + } + + if (typeof value === "boolean") { + return Buffer.alloc(0); + } + + return encodeOscString(value); +} + +function encodeOscString(value: string) { + const buffer = Buffer.from(value + "\0", "utf8"); + const padding = (4 - (buffer.length % 4)) % 4; + return padding === 0 ? buffer : Buffer.concat([buffer, Buffer.alloc(padding)]); +} + +function readOscString(buffer: Buffer, offset: number) { + let end = offset; + while (end < buffer.length && buffer[end] !== 0) { + end += 1; + } + + if (end >= buffer.length) { + return null; + } + + return { + value: buffer.toString("utf8", offset, end), + nextOffset: end + 1, + }; +} + +function nextOscOffset(offset: number) { + return offset + ((4 - (offset % 4)) % 4); +} + +function readOscBoolean(value: OscScalar | undefined) { + if (typeof value === "boolean") { + return value; + } + if (typeof value === "number") { + return value !== 0; + } + if (typeof value === "string") { + if (value === "0") return false; + if (value === "1") return true; + } + return null; +} diff --git a/src/Reaper/CloverAutomation.ReaperOSC b/src/Reaper/CloverAutomation.ReaperOSC new file mode 100644 index 0000000000000000000000000000000000000000..b4982d75ea30704028dda3bcb6a3abb194d87f9f --- /dev/null +++ b/src/Reaper/CloverAutomation.ReaperOSC @@ -0,0 +1,25 @@ +# OSC pattern config file for Clover Creative Control's REAPER integration. +DEVICE_TRACK_COUNT 1 +DEVICE_SEND_COUNT 0 +DEVICE_RECEIVE_COUNT 0 +DEVICE_FX_COUNT 0 +DEVICE_FX_PARAM_COUNT 0 +DEVICE_FX_INST_PARAM_COUNT 0 +DEVICE_MARKER_COUNT 0 +DEVICE_REGION_COUNT 0 + +REAPER_TRACK_FOLLOWS REAPER +DEVICE_TRACK_FOLLOWS DEVICE +DEVICE_TRACK_BANK_FOLLOWS DEVICE +DEVICE_FX_FOLLOWS DEVICE +DEVICE_ROTARY_CENTER 0 + +# ---------------------------------------------------------------- + +RECORD t/clover/record +STOP t/clover/stop +PLAY t/clover/play +PAUSE t/clover/pause +SCRUB r/clover/scrub + +ACTION i/clover/action s/clover/action/str t/clover/action/@ \ No newline at end of file diff --git a/src/Reaper/actions.ts b/src/Reaper/actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..828048efd852259db4f8c453021f0e81cc516a92 --- /dev/null +++ b/src/Reaper/actions.ts @@ -0,0 +1,6661 @@ +// Generated by src/Reaper/generate-actions.ts +// Source: REAPER main action section via kbd_enumerateActions()/kbd_getTextFromCmd(). + +export const REAPER_ACTIONS = { + "action-arm-next-action": 2019, + "action-disarm-action": 2020, + "action-modify-midi-cc-mousewheel-0-5x": 2004, + "action-modify-midi-cc-mousewheel-10-percent": 2007, + "action-modify-midi-cc-mousewheel-2x": 2005, + "action-modify-midi-cc-mousewheel-negative": 2003, + "action-modify-midi-cc-mousewheel-plus-10-percent": 2006, + "action-momentarily-send-next-action-to-next-project-tab-1": 3061, + "action-momentarily-send-next-action-to-next-project-tab-2": 3062, + "action-momentarily-send-next-action-to-next-project-tab-3": 3063, + "action-momentarily-send-next-action-to-next-project-tab-4": 3064, + "action-momentarily-send-next-action-to-next-project-tab-5": 3065, + "action-momentarily-send-next-action-to-previous-project-tab-1": 3091, + "action-momentarily-send-next-action-to-previous-project-tab-2": 3092, + "action-momentarily-send-next-action-to-previous-project-tab-3": 3093, + "action-momentarily-send-next-action-to-previous-project-tab-4": 3094, + "action-momentarily-send-next-action-to-previous-project-tab-5": 3095, + "action-momentarily-send-next-action-to-previously-active-project-tab": 3120, + "action-momentarily-send-next-action-to-project-tab-1": 3002, + "action-momentarily-send-next-action-to-project-tab-10": 3011, + "action-momentarily-send-next-action-to-project-tab-2": 3003, + "action-momentarily-send-next-action-to-project-tab-3": 3004, + "action-momentarily-send-next-action-to-project-tab-4": 3005, + "action-momentarily-send-next-action-to-project-tab-5": 3006, + "action-momentarily-send-next-action-to-project-tab-6": 3007, + "action-momentarily-send-next-action-to-project-tab-7": 3008, + "action-momentarily-send-next-action-to-project-tab-8": 3009, + "action-momentarily-send-next-action-to-project-tab-9": 3010, + "action-momentarily-send-next-action-to-project-tab-n": 3032, + "action-momentarily-send-next-action-to-project-tab-n-1": 3033, + "action-momentarily-send-next-action-to-project-tab-n-2": 3034, + "action-momentarily-send-next-action-to-project-tab-n-3": 3035, + "action-momentarily-send-next-action-to-project-tab-n-4": 3036, + "action-momentarily-send-next-action-to-project-tab-n-5": 3037, + "action-momentarily-send-next-action-to-project-tab-n-6": 3038, + "action-momentarily-send-next-action-to-project-tab-n-7": 3039, + "action-momentarily-send-next-action-to-project-tab-n-8": 3040, + "action-momentarily-send-next-action-to-project-tab-n-9": 3041, + "action-prompt-to-continue-only-valid-within-custom-actions": 2000, + "action-prompt-to-go-to-action-loop-start-only-valid-within-custom-actions": 2002, + "action-repeat-the-action-prior-to-the-most-recent-action": 3000, + "action-repeat-the-most-recent-action": 2999, + "action-set-action-loop-start-only-valid-within-custom-actions": 2001, + "action-skip-next-action-if-cc-parameter-0-mid": 2013, + "action-skip-next-action-if-cc-parameter-0-mid-2014": 2014, + "action-skip-next-action-if-cc-parameter-0-mid-2015": 2015, + "action-skip-next-action-if-cc-parameter-0-mid-2016": 2016, + "action-skip-next-action-if-cc-parameter-0-mid-2017": 2017, + "action-skip-next-action-if-cc-parameter-0-mid-2018": 2018, + "action-skip-next-action-set-cc-parameter-to-relative-plus-1-if-action-armed-0-otherwise": 2023, + "action-skip-next-action-set-cc-parameter-to-relative-plus-1-if-action-toggle-state-enabled-1-if-disabled-0-if-toggle-state-unavailable": 2022, + "action-toggle-arm-of-next-action": 2021, + "action-wait-0-1-seconds-before-next-action": 2008, + "action-wait-0-5-seconds-before-next-action": 2009, + "action-wait-1-second-before-next-action": 2010, + "action-wait-10-seconds-before-next-action": 2012, + "action-wait-5-seconds-before-next-action": 2011, + "adjust-entire-tempo-envelope": 41805, + "adjust-last-touched-fx-parameter-midi-cc-osc-only": 973, + "adjust-solo-in-front-dim-midi-cc-mousewheel-only": 987, + "adjust-track-fx-parameter-01-midi-cc-osc-only": 950, + "adjust-track-fx-parameter-02-midi-cc-osc-only": 951, + "adjust-track-fx-parameter-03-midi-cc-osc-only": 952, + "adjust-track-fx-parameter-04-midi-cc-osc-only": 953, + "adjust-track-fx-parameter-05-midi-cc-osc-only": 954, + "adjust-track-fx-parameter-06-midi-cc-osc-only": 955, + "adjust-track-fx-parameter-07-midi-cc-osc-only": 956, + "adjust-track-fx-parameter-08-midi-cc-osc-only": 957, + "adjust-track-fx-parameter-09-midi-cc-osc-only": 958, + "adjust-track-fx-parameter-10-midi-cc-osc-only": 959, + "adjust-track-fx-parameter-11-midi-cc-osc-only": 960, + "adjust-track-fx-parameter-12-midi-cc-osc-only": 961, + "adjust-track-fx-parameter-13-midi-cc-osc-only": 962, + "adjust-track-fx-parameter-14-midi-cc-osc-only": 963, + "adjust-track-fx-parameter-15-midi-cc-osc-only": 964, + "adjust-track-fx-parameter-16-midi-cc-osc-only": 965, + "adjust-track-send-1-pan-midi-cc-osc-only": 911, + "adjust-track-send-1-volume-midi-cc-osc-only": 901, + "adjust-track-send-2-pan-midi-cc-osc-only": 912, + "adjust-track-send-2-volume-midi-cc-osc-only": 902, + "adjust-track-send-3-pan-midi-cc-osc-only": 913, + "adjust-track-send-3-volume-midi-cc-osc-only": 903, + "adjust-track-send-4-pan-midi-cc-osc-only": 914, + "adjust-track-send-4-volume-midi-cc-osc-only": 904, + "adjust-track-send-5-pan-midi-cc-osc-only": 915, + "adjust-track-send-5-volume-midi-cc-osc-only": 905, + "adjust-track-send-6-pan-midi-cc-osc-only": 916, + "adjust-track-send-6-volume-midi-cc-osc-only": 906, + "adjust-track-send-7-pan-midi-cc-osc-only": 917, + "adjust-track-send-7-volume-midi-cc-osc-only": 907, + "adjust-track-send-8-pan-midi-cc-osc-only": 918, + "adjust-track-send-8-volume-midi-cc-osc-only": 908, + "audio-device-configuration": 40099, + "automation-clear-all-saved-track-envelope-latches": 43568, + "automation-clear-all-track-envelope-latches": 42025, + "automation-clear-latch-preset-1": 50756, + "automation-clear-latch-preset-10": 50765, + "automation-clear-latch-preset-11": 50766, + "automation-clear-latch-preset-12": 50767, + "automation-clear-latch-preset-13": 50768, + "automation-clear-latch-preset-14": 50769, + "automation-clear-latch-preset-15": 50770, + "automation-clear-latch-preset-16": 50771, + "automation-clear-latch-preset-17": 50772, + "automation-clear-latch-preset-18": 50773, + "automation-clear-latch-preset-19": 50774, + "automation-clear-latch-preset-2": 50757, + "automation-clear-latch-preset-20": 50775, + "automation-clear-latch-preset-21": 50776, + "automation-clear-latch-preset-22": 50777, + "automation-clear-latch-preset-23": 50778, + "automation-clear-latch-preset-24": 50779, + "automation-clear-latch-preset-25": 50780, + "automation-clear-latch-preset-26": 50781, + "automation-clear-latch-preset-27": 50782, + "automation-clear-latch-preset-28": 50783, + "automation-clear-latch-preset-29": 50784, + "automation-clear-latch-preset-3": 50758, + "automation-clear-latch-preset-30": 50785, + "automation-clear-latch-preset-31": 50786, + "automation-clear-latch-preset-32": 50787, + "automation-clear-latch-preset-33": 50788, + "automation-clear-latch-preset-34": 50789, + "automation-clear-latch-preset-35": 50790, + "automation-clear-latch-preset-36": 50791, + "automation-clear-latch-preset-37": 50792, + "automation-clear-latch-preset-38": 50793, + "automation-clear-latch-preset-39": 50794, + "automation-clear-latch-preset-4": 50759, + "automation-clear-latch-preset-40": 50795, + "automation-clear-latch-preset-41": 50796, + "automation-clear-latch-preset-42": 50797, + "automation-clear-latch-preset-43": 50798, + "automation-clear-latch-preset-44": 50799, + "automation-clear-latch-preset-45": 50800, + "automation-clear-latch-preset-46": 50801, + "automation-clear-latch-preset-47": 50802, + "automation-clear-latch-preset-48": 50803, + "automation-clear-latch-preset-49": 50804, + "automation-clear-latch-preset-5": 50760, + "automation-clear-latch-preset-50": 50805, + "automation-clear-latch-preset-51": 50806, + "automation-clear-latch-preset-52": 50807, + "automation-clear-latch-preset-53": 50808, + "automation-clear-latch-preset-54": 50809, + "automation-clear-latch-preset-55": 50810, + "automation-clear-latch-preset-56": 50811, + "automation-clear-latch-preset-57": 50812, + "automation-clear-latch-preset-58": 50813, + "automation-clear-latch-preset-59": 50814, + "automation-clear-latch-preset-6": 50761, + "automation-clear-latch-preset-60": 50815, + "automation-clear-latch-preset-61": 50816, + "automation-clear-latch-preset-62": 50817, + "automation-clear-latch-preset-63": 50818, + "automation-clear-latch-preset-64": 50819, + "automation-clear-latch-preset-7": 50762, + "automation-clear-latch-preset-8": 50763, + "automation-clear-latch-preset-9": 50764, + "automation-clear-saved-track-envelope-latches": 43569, + "automation-clear-track-envelope-latches": 42026, + "automation-lane-decrease-active-fader-a-little-bit": 40858, + "automation-lane-decrease-active-fader-a-tiny-bit": 42384, + "automation-lane-increase-active-fader-a-little-bit": 40857, + "automation-lane-increase-active-fader-a-tiny-bit": 42383, + "automation-lane-set-active-fader-midi-cc-osc-only": 986, + "automation-load-latch-preset-1-for-all-tracks": 50564, + "automation-load-latch-preset-1-for-selected-tracks": 50692, + "automation-load-latch-preset-10-for-all-tracks": 50573, + "automation-load-latch-preset-10-for-selected-tracks": 50701, + "automation-load-latch-preset-11-for-all-tracks": 50574, + "automation-load-latch-preset-11-for-selected-tracks": 50702, + "automation-load-latch-preset-12-for-all-tracks": 50575, + "automation-load-latch-preset-12-for-selected-tracks": 50703, + "automation-load-latch-preset-13-for-all-tracks": 50576, + "automation-load-latch-preset-13-for-selected-tracks": 50704, + "automation-load-latch-preset-14-for-all-tracks": 50577, + "automation-load-latch-preset-14-for-selected-tracks": 50705, + "automation-load-latch-preset-15-for-all-tracks": 50578, + "automation-load-latch-preset-15-for-selected-tracks": 50706, + "automation-load-latch-preset-16-for-all-tracks": 50579, + "automation-load-latch-preset-16-for-selected-tracks": 50707, + "automation-load-latch-preset-17-for-all-tracks": 50580, + "automation-load-latch-preset-17-for-selected-tracks": 50708, + "automation-load-latch-preset-18-for-all-tracks": 50581, + "automation-load-latch-preset-18-for-selected-tracks": 50709, + "automation-load-latch-preset-19-for-all-tracks": 50582, + "automation-load-latch-preset-19-for-selected-tracks": 50710, + "automation-load-latch-preset-2-for-all-tracks": 50565, + "automation-load-latch-preset-2-for-selected-tracks": 50693, + "automation-load-latch-preset-20-for-all-tracks": 50583, + "automation-load-latch-preset-20-for-selected-tracks": 50711, + "automation-load-latch-preset-21-for-all-tracks": 50584, + "automation-load-latch-preset-21-for-selected-tracks": 50712, + "automation-load-latch-preset-22-for-all-tracks": 50585, + "automation-load-latch-preset-22-for-selected-tracks": 50713, + "automation-load-latch-preset-23-for-all-tracks": 50586, + "automation-load-latch-preset-23-for-selected-tracks": 50714, + "automation-load-latch-preset-24-for-all-tracks": 50587, + "automation-load-latch-preset-24-for-selected-tracks": 50715, + "automation-load-latch-preset-25-for-all-tracks": 50588, + "automation-load-latch-preset-25-for-selected-tracks": 50716, + "automation-load-latch-preset-26-for-all-tracks": 50589, + "automation-load-latch-preset-26-for-selected-tracks": 50717, + "automation-load-latch-preset-27-for-all-tracks": 50590, + "automation-load-latch-preset-27-for-selected-tracks": 50718, + "automation-load-latch-preset-28-for-all-tracks": 50591, + "automation-load-latch-preset-28-for-selected-tracks": 50719, + "automation-load-latch-preset-29-for-all-tracks": 50592, + "automation-load-latch-preset-29-for-selected-tracks": 50720, + "automation-load-latch-preset-3-for-all-tracks": 50566, + "automation-load-latch-preset-3-for-selected-tracks": 50694, + "automation-load-latch-preset-30-for-all-tracks": 50593, + "automation-load-latch-preset-30-for-selected-tracks": 50721, + "automation-load-latch-preset-31-for-all-tracks": 50594, + "automation-load-latch-preset-31-for-selected-tracks": 50722, + "automation-load-latch-preset-32-for-all-tracks": 50595, + "automation-load-latch-preset-32-for-selected-tracks": 50723, + "automation-load-latch-preset-33-for-all-tracks": 50596, + "automation-load-latch-preset-33-for-selected-tracks": 50724, + "automation-load-latch-preset-34-for-all-tracks": 50597, + "automation-load-latch-preset-34-for-selected-tracks": 50725, + "automation-load-latch-preset-35-for-all-tracks": 50598, + "automation-load-latch-preset-35-for-selected-tracks": 50726, + "automation-load-latch-preset-36-for-all-tracks": 50599, + "automation-load-latch-preset-36-for-selected-tracks": 50727, + "automation-load-latch-preset-37-for-all-tracks": 50600, + "automation-load-latch-preset-37-for-selected-tracks": 50728, + "automation-load-latch-preset-38-for-all-tracks": 50601, + "automation-load-latch-preset-38-for-selected-tracks": 50729, + "automation-load-latch-preset-39-for-all-tracks": 50602, + "automation-load-latch-preset-39-for-selected-tracks": 50730, + "automation-load-latch-preset-4-for-all-tracks": 50567, + "automation-load-latch-preset-4-for-selected-tracks": 50695, + "automation-load-latch-preset-40-for-all-tracks": 50603, + "automation-load-latch-preset-40-for-selected-tracks": 50731, + "automation-load-latch-preset-41-for-all-tracks": 50604, + "automation-load-latch-preset-41-for-selected-tracks": 50732, + "automation-load-latch-preset-42-for-all-tracks": 50605, + "automation-load-latch-preset-42-for-selected-tracks": 50733, + "automation-load-latch-preset-43-for-all-tracks": 50606, + "automation-load-latch-preset-43-for-selected-tracks": 50734, + "automation-load-latch-preset-44-for-all-tracks": 50607, + "automation-load-latch-preset-44-for-selected-tracks": 50735, + "automation-load-latch-preset-45-for-all-tracks": 50608, + "automation-load-latch-preset-45-for-selected-tracks": 50736, + "automation-load-latch-preset-46-for-all-tracks": 50609, + "automation-load-latch-preset-46-for-selected-tracks": 50737, + "automation-load-latch-preset-47-for-all-tracks": 50610, + "automation-load-latch-preset-47-for-selected-tracks": 50738, + "automation-load-latch-preset-48-for-all-tracks": 50611, + "automation-load-latch-preset-48-for-selected-tracks": 50739, + "automation-load-latch-preset-49-for-all-tracks": 50612, + "automation-load-latch-preset-49-for-selected-tracks": 50740, + "automation-load-latch-preset-5-for-all-tracks": 50568, + "automation-load-latch-preset-5-for-selected-tracks": 50696, + "automation-load-latch-preset-50-for-all-tracks": 50613, + "automation-load-latch-preset-50-for-selected-tracks": 50741, + "automation-load-latch-preset-51-for-all-tracks": 50614, + "automation-load-latch-preset-51-for-selected-tracks": 50742, + "automation-load-latch-preset-52-for-all-tracks": 50615, + "automation-load-latch-preset-52-for-selected-tracks": 50743, + "automation-load-latch-preset-53-for-all-tracks": 50616, + "automation-load-latch-preset-53-for-selected-tracks": 50744, + "automation-load-latch-preset-54-for-all-tracks": 50617, + "automation-load-latch-preset-54-for-selected-tracks": 50745, + "automation-load-latch-preset-55-for-all-tracks": 50618, + "automation-load-latch-preset-55-for-selected-tracks": 50746, + "automation-load-latch-preset-56-for-all-tracks": 50619, + "automation-load-latch-preset-56-for-selected-tracks": 50747, + "automation-load-latch-preset-57-for-all-tracks": 50620, + "automation-load-latch-preset-57-for-selected-tracks": 50748, + "automation-load-latch-preset-58-for-all-tracks": 50621, + "automation-load-latch-preset-58-for-selected-tracks": 50749, + "automation-load-latch-preset-59-for-all-tracks": 50622, + "automation-load-latch-preset-59-for-selected-tracks": 50750, + "automation-load-latch-preset-6-for-all-tracks": 50569, + "automation-load-latch-preset-6-for-selected-tracks": 50697, + "automation-load-latch-preset-60-for-all-tracks": 50623, + "automation-load-latch-preset-60-for-selected-tracks": 50751, + "automation-load-latch-preset-61-for-all-tracks": 50624, + "automation-load-latch-preset-61-for-selected-tracks": 50752, + "automation-load-latch-preset-62-for-all-tracks": 50625, + "automation-load-latch-preset-62-for-selected-tracks": 50753, + "automation-load-latch-preset-63-for-all-tracks": 50626, + "automation-load-latch-preset-63-for-selected-tracks": 50754, + "automation-load-latch-preset-64-for-all-tracks": 50627, + "automation-load-latch-preset-64-for-selected-tracks": 50755, + "automation-load-latch-preset-7-for-all-tracks": 50570, + "automation-load-latch-preset-7-for-selected-tracks": 50698, + "automation-load-latch-preset-8-for-all-tracks": 50571, + "automation-load-latch-preset-8-for-selected-tracks": 50699, + "automation-load-latch-preset-9-for-all-tracks": 50572, + "automation-load-latch-preset-9-for-selected-tracks": 50700, + "automation-restore-all-saved-track-envelope-latches": 43562, + "automation-restore-saved-track-envelope-latches": 43564, + "automation-save-and-clear-all-track-envelope-latches": 43561, + "automation-save-and-clear-all-track-envelope-latches-if-any-otherwise-restore-saved-latches": 43565, + "automation-save-and-clear-track-envelope-latches": 43563, + "automation-save-and-clear-track-envelope-latches-if-any-otherwise-restore-saved-latches": 43566, + "automation-save-latch-preset-1-for-all-tracks": 50500, + "automation-save-latch-preset-1-for-selected-tracks": 50628, + "automation-save-latch-preset-10-for-all-tracks": 50509, + "automation-save-latch-preset-10-for-selected-tracks": 50637, + "automation-save-latch-preset-11-for-all-tracks": 50510, + "automation-save-latch-preset-11-for-selected-tracks": 50638, + "automation-save-latch-preset-12-for-all-tracks": 50511, + "automation-save-latch-preset-12-for-selected-tracks": 50639, + "automation-save-latch-preset-13-for-all-tracks": 50512, + "automation-save-latch-preset-13-for-selected-tracks": 50640, + "automation-save-latch-preset-14-for-all-tracks": 50513, + "automation-save-latch-preset-14-for-selected-tracks": 50641, + "automation-save-latch-preset-15-for-all-tracks": 50514, + "automation-save-latch-preset-15-for-selected-tracks": 50642, + "automation-save-latch-preset-16-for-all-tracks": 50515, + "automation-save-latch-preset-16-for-selected-tracks": 50643, + "automation-save-latch-preset-17-for-all-tracks": 50516, + "automation-save-latch-preset-17-for-selected-tracks": 50644, + "automation-save-latch-preset-18-for-all-tracks": 50517, + "automation-save-latch-preset-18-for-selected-tracks": 50645, + "automation-save-latch-preset-19-for-all-tracks": 50518, + "automation-save-latch-preset-19-for-selected-tracks": 50646, + "automation-save-latch-preset-2-for-all-tracks": 50501, + "automation-save-latch-preset-2-for-selected-tracks": 50629, + "automation-save-latch-preset-20-for-all-tracks": 50519, + "automation-save-latch-preset-20-for-selected-tracks": 50647, + "automation-save-latch-preset-21-for-all-tracks": 50520, + "automation-save-latch-preset-21-for-selected-tracks": 50648, + "automation-save-latch-preset-22-for-all-tracks": 50521, + "automation-save-latch-preset-22-for-selected-tracks": 50649, + "automation-save-latch-preset-23-for-all-tracks": 50522, + "automation-save-latch-preset-23-for-selected-tracks": 50650, + "automation-save-latch-preset-24-for-all-tracks": 50523, + "automation-save-latch-preset-24-for-selected-tracks": 50651, + "automation-save-latch-preset-25-for-all-tracks": 50524, + "automation-save-latch-preset-25-for-selected-tracks": 50652, + "automation-save-latch-preset-26-for-all-tracks": 50525, + "automation-save-latch-preset-26-for-selected-tracks": 50653, + "automation-save-latch-preset-27-for-all-tracks": 50526, + "automation-save-latch-preset-27-for-selected-tracks": 50654, + "automation-save-latch-preset-28-for-all-tracks": 50527, + "automation-save-latch-preset-28-for-selected-tracks": 50655, + "automation-save-latch-preset-29-for-all-tracks": 50528, + "automation-save-latch-preset-29-for-selected-tracks": 50656, + "automation-save-latch-preset-3-for-all-tracks": 50502, + "automation-save-latch-preset-3-for-selected-tracks": 50630, + "automation-save-latch-preset-30-for-all-tracks": 50529, + "automation-save-latch-preset-30-for-selected-tracks": 50657, + "automation-save-latch-preset-31-for-all-tracks": 50530, + "automation-save-latch-preset-31-for-selected-tracks": 50658, + "automation-save-latch-preset-32-for-all-tracks": 50531, + "automation-save-latch-preset-32-for-selected-tracks": 50659, + "automation-save-latch-preset-33-for-all-tracks": 50532, + "automation-save-latch-preset-33-for-selected-tracks": 50660, + "automation-save-latch-preset-34-for-all-tracks": 50533, + "automation-save-latch-preset-34-for-selected-tracks": 50661, + "automation-save-latch-preset-35-for-all-tracks": 50534, + "automation-save-latch-preset-35-for-selected-tracks": 50662, + "automation-save-latch-preset-36-for-all-tracks": 50535, + "automation-save-latch-preset-36-for-selected-tracks": 50663, + "automation-save-latch-preset-37-for-all-tracks": 50536, + "automation-save-latch-preset-37-for-selected-tracks": 50664, + "automation-save-latch-preset-38-for-all-tracks": 50537, + "automation-save-latch-preset-38-for-selected-tracks": 50665, + "automation-save-latch-preset-39-for-all-tracks": 50538, + "automation-save-latch-preset-39-for-selected-tracks": 50666, + "automation-save-latch-preset-4-for-all-tracks": 50503, + "automation-save-latch-preset-4-for-selected-tracks": 50631, + "automation-save-latch-preset-40-for-all-tracks": 50539, + "automation-save-latch-preset-40-for-selected-tracks": 50667, + "automation-save-latch-preset-41-for-all-tracks": 50540, + "automation-save-latch-preset-41-for-selected-tracks": 50668, + "automation-save-latch-preset-42-for-all-tracks": 50541, + "automation-save-latch-preset-42-for-selected-tracks": 50669, + "automation-save-latch-preset-43-for-all-tracks": 50542, + "automation-save-latch-preset-43-for-selected-tracks": 50670, + "automation-save-latch-preset-44-for-all-tracks": 50543, + "automation-save-latch-preset-44-for-selected-tracks": 50671, + "automation-save-latch-preset-45-for-all-tracks": 50544, + "automation-save-latch-preset-45-for-selected-tracks": 50672, + "automation-save-latch-preset-46-for-all-tracks": 50545, + "automation-save-latch-preset-46-for-selected-tracks": 50673, + "automation-save-latch-preset-47-for-all-tracks": 50546, + "automation-save-latch-preset-47-for-selected-tracks": 50674, + "automation-save-latch-preset-48-for-all-tracks": 50547, + "automation-save-latch-preset-48-for-selected-tracks": 50675, + "automation-save-latch-preset-49-for-all-tracks": 50548, + "automation-save-latch-preset-49-for-selected-tracks": 50676, + "automation-save-latch-preset-5-for-all-tracks": 50504, + "automation-save-latch-preset-5-for-selected-tracks": 50632, + "automation-save-latch-preset-50-for-all-tracks": 50549, + "automation-save-latch-preset-50-for-selected-tracks": 50677, + "automation-save-latch-preset-51-for-all-tracks": 50550, + "automation-save-latch-preset-51-for-selected-tracks": 50678, + "automation-save-latch-preset-52-for-all-tracks": 50551, + "automation-save-latch-preset-52-for-selected-tracks": 50679, + "automation-save-latch-preset-53-for-all-tracks": 50552, + "automation-save-latch-preset-53-for-selected-tracks": 50680, + "automation-save-latch-preset-54-for-all-tracks": 50553, + "automation-save-latch-preset-54-for-selected-tracks": 50681, + "automation-save-latch-preset-55-for-all-tracks": 50554, + "automation-save-latch-preset-55-for-selected-tracks": 50682, + "automation-save-latch-preset-56-for-all-tracks": 50555, + "automation-save-latch-preset-56-for-selected-tracks": 50683, + "automation-save-latch-preset-57-for-all-tracks": 50556, + "automation-save-latch-preset-57-for-selected-tracks": 50684, + "automation-save-latch-preset-58-for-all-tracks": 50557, + "automation-save-latch-preset-58-for-selected-tracks": 50685, + "automation-save-latch-preset-59-for-all-tracks": 50558, + "automation-save-latch-preset-59-for-selected-tracks": 50686, + "automation-save-latch-preset-6-for-all-tracks": 50505, + "automation-save-latch-preset-6-for-selected-tracks": 50633, + "automation-save-latch-preset-60-for-all-tracks": 50559, + "automation-save-latch-preset-60-for-selected-tracks": 50687, + "automation-save-latch-preset-61-for-all-tracks": 50560, + "automation-save-latch-preset-61-for-selected-tracks": 50688, + "automation-save-latch-preset-62-for-all-tracks": 50561, + "automation-save-latch-preset-62-for-selected-tracks": 50689, + "automation-save-latch-preset-63-for-all-tracks": 50562, + "automation-save-latch-preset-63-for-selected-tracks": 50690, + "automation-save-latch-preset-64-for-all-tracks": 50563, + "automation-save-latch-preset-64-for-selected-tracks": 50691, + "automation-save-latch-preset-7-for-all-tracks": 50506, + "automation-save-latch-preset-7-for-selected-tracks": 50634, + "automation-save-latch-preset-8-for-all-tracks": 50507, + "automation-save-latch-preset-8-for-selected-tracks": 50635, + "automation-save-latch-preset-9-for-all-tracks": 50508, + "automation-save-latch-preset-9-for-selected-tracks": 50636, + "automation-set-all-tracks-automation-mode-to-latch": 40266, + "automation-set-all-tracks-automation-mode-to-latch-preview": 42024, + "automation-set-all-tracks-automation-mode-to-read": 40086, + "automation-set-all-tracks-automation-mode-to-touch": 40087, + "automation-set-all-tracks-automation-mode-to-trim-read": 40088, + "automation-set-all-tracks-automation-mode-to-write": 40090, + "automation-set-track-automation-mode-to-latch": 40404, + "automation-set-track-automation-mode-to-latch-preview": 42023, + "automation-set-track-automation-mode-to-read": 40401, + "automation-set-track-automation-mode-to-touch": 40402, + "automation-set-track-automation-mode-to-trim-read": 40400, + "automation-set-track-automation-mode-to-write": 40403, + "automation-toggle-track-between-touch-and-trim-read-modes": 41109, + "automation-unarm-all-envelopes": 41163, + "automation-write-current-values-for-actively-writing-envelopes-from-cursor-to-end-of-project": 42015, + "automation-write-current-values-for-actively-writing-envelopes-from-cursor-to-first-touch-position": 42016, + "automation-write-current-values-for-actively-writing-envelopes-from-cursor-to-start-of-project": 42014, + "automation-write-current-values-for-actively-writing-envelopes-to-entire-envelope": 42017, + "automation-write-current-values-for-actively-writing-envelopes-to-time-selection": 42013, + "automation-write-current-values-for-all-writing-envelopes-from-cursor-to-end-of-project": 41162, + "automation-write-current-values-for-all-writing-envelopes-from-cursor-to-start-of-project": 41161, + "automation-write-current-values-for-all-writing-envelopes-to-time-selection": 41160, + "big-clock-plus-extended-display-recording-pass-markers-etc": 1101, + "calculate-loudness-of-master-mix-via-dry-run-render": 42440, + "calculate-loudness-of-master-mix-within-time-selection-via-dry-run-render": 42441, + "calculate-loudness-of-selected-items-including-take-and-track-fx-and-settings-via-dry-run-render": 42437, + "calculate-loudness-of-selected-items-source-media-via-dry-run-render": 42468, + "calculate-loudness-of-selected-tracks-via-dry-run-render": 42438, + "calculate-loudness-of-selected-tracks-within-time-selection-via-dry-run-render": 42439, + "calculate-mono-loudness-of-selected-tracks-via-dry-run-render": 42447, + "calculate-mono-loudness-of-selected-tracks-within-time-selection-via-dry-run-render": 42448, + "calculate-transient-guides": 42028, + "calculate-transient-guides-for-visible-areas-in-items": 42029, + "clear-project-recording-tag-rectag-wildcard": 43465, + "clear-tempo-envelope": 42395, + "clear-transient-guides": 42027, + "close-all-projects-but-current": 41922, + "close-current-project-tab": 40860, + "colors-reset-random-color-generator": 41343, + "comp-takes-activate-next-comp": 41376, + "comp-takes-activate-previous-comp": 41375, + "comp-takes-choose-active-comp-for-item-under-mouse-and-all-other-items-in-the-comp": 41382, + "comp-takes-crop-list-to-active-comp": 41379, + "comp-takes-move-active-comp-to-top-lane": 41378, + "comp-takes-remove-active-comp-from-list": 41374, + "comp-takes-save-rename-active-comp": 41373, + "comp-takes-toggle-select-last-comp-a-b": 41377, + "control-surface-refresh-all-surfaces": 41743, + "convert-active-take-midi-to-in-project-midi-source-data": 40684, + "convert-active-take-midi-to-mid-file-reference": 40685, + "create-measure-from-time-selection-detect-tempo-detect-number-of-measures": 40338, + "create-measure-from-time-selection-detect-tempo-try-to-create-single-measure": 42407, + "create-measure-from-time-selection-new-time-signature": 40801, + "developer-debug-console": 41075, + "developer-write-c-plus-plus-api-functions-header": 41064, + "dock-undock-currently-focused-dockable-window-or-attach-unattach-focused-docker": 41172, + "docker-activate-next-tab": 41624, + "docker-activate-previous-tab": 41625, + "docker-show-in-bottom-of-main-window": 41598, + "docker-show-in-left-of-main-window": 41599, + "docker-show-in-right-of-main-window": 41601, + "docker-show-in-top-of-main-window": 41600, + "dockers-compact-when-small-and-single-tab": 41691, + "edit-copy-items": 40698, + "edit-copy-items-tracks-envelope-points-depending-on-focus-ignoring-time-selection": 40057, + "edit-copy-items-tracks-envelope-points-depending-on-focus-within-time-selection-if-any-smart-copy": 41383, + "edit-cut-items": 40699, + "edit-cut-items-tracks-envelope-points-depending-on-focus-ignoring-time-selection": 40059, + "edit-cut-items-tracks-envelope-points-depending-on-focus-within-time-selection-if-any-smart-cut": 41384, + "edit-delete-notes-of-less-than-1-128-note-in-length-in-selected-midi-items": 41738, + "edit-delete-notes-of-less-than-1-16-note-in-length-in-selected-midi-items": 41735, + "edit-delete-notes-of-less-than-1-256-note-in-length-in-selected-midi-items": 41739, + "edit-delete-notes-of-less-than-1-32-note-in-length-in-selected-midi-items": 41736, + "edit-delete-notes-of-less-than-1-64-note-in-length-in-selected-midi-items": 41737, + "edit-delete-notes-of-less-than-1-8-note-in-length-in-selected-midi-items": 41734, + "edit-delete-trailing-notes-of-less-than-1-128-note-in-length-in-selected-midi-items": 41732, + "edit-delete-trailing-notes-of-less-than-1-16-note-in-length-in-selected-midi-items": 41729, + "edit-delete-trailing-notes-of-less-than-1-256-note-in-length-in-selected-midi-items": 41733, + "edit-delete-trailing-notes-of-less-than-1-32-note-in-length-in-selected-midi-items": 41730, + "edit-delete-trailing-notes-of-less-than-1-64-note-in-length-in-selected-midi-items": 41731, + "edit-delete-trailing-notes-of-less-than-1-8-note-in-length-in-selected-midi-items": 41728, + "edit-dynamic-split-items": 40760, + "edit-dynamic-split-items-using-most-recent-settings": 42951, + "edit-redo": 40030, + "edit-undo": 40029, + "envelope-add-edge-points-to-automation-item": 42209, + "envelope-add-edit-envelope-point-value-at-cursor": 41987, + "envelope-add-edit-envelope-point-value-exactly-at-cursor": 40152, + "envelope-apply-all-vcas-from-selected-tracks-to-grouped-tracks-and-reset-volume-pan-mute": 41982, + "envelope-apply-all-vcas-to-selected-tracks-and-remove-from-vca-groups": 41981, + "envelope-automation-item-properties": 42090, + "envelope-automation-items-connect-to-the-underlying-envelope-on-both-sides": 42223, + "envelope-automation-items-connect-to-the-underlying-envelope-on-the-right-side": 42222, + "envelope-automation-items-do-not-connect-to-the-underlying-envelope": 42221, + "envelope-bypass-underlying-envelope-outside-of-automation-items": 42224, + "envelope-chase-non-fx-envelope-to-automation-items-when-underlying-envelope-is-bypassed": 42345, + "envelope-clear-or-remove-envelope": 40065, + "envelope-convert-all-project-automation-to-automation-items": 42207, + "envelope-copy-points-within-time-selection": 40324, + "envelope-copy-selected-points": 40335, + "envelope-cut-points-within-time-selection": 40325, + "envelope-cut-selected-points": 40336, + "envelope-decrease-bezier-tension-for-selected-points-by-25-percent": 41125, + "envelope-decrease-bezier-tension-for-selected-points-by-5-percent": 41123, + "envelope-delete-all-points-in-time-selection": 40089, + "envelope-delete-all-selected-points": 40333, + "envelope-delete-automation-items": 42086, + "envelope-delete-automation-items-preserve-points": 42088, + "envelope-duplicate-and-pool-automation-items": 42085, + "envelope-duplicate-automation-items": 42083, + "envelope-glue-automation-items": 42089, + "envelope-hide-all-envelopes-for-all-tracks": 41150, + "envelope-hide-all-envelopes-for-tracks": 40889, + "envelope-increase-bezier-tension-for-selected-points-by-25-percent": 41124, + "envelope-increase-bezier-tension-for-selected-points-by-5-percent": 41122, + "envelope-insert-4-envelope-points-at-time-selection": 40726, + "envelope-insert-automation-item": 42082, + "envelope-insert-new-point-at-current-position-do-not-remove-nearby-points": 40106, + "envelope-insert-new-point-at-current-position-remove-nearby-points": 40915, + "envelope-insert-new-point-at-current-position-to-all-visible-track-envelopes-do-not-remove-nearby-points": 40064, + "envelope-insert-new-point-at-current-position-to-all-visible-track-envelopes-remove-nearby-points": 41126, + "envelope-invert-selected-points": 40334, + "envelope-load-automation-item": 42093, + "envelope-mute-automation-items": 42211, + "envelope-obey-project-default-setting-to-bypass-underlying-envelope-outside-of-automation-items": 42215, + "envelope-reduce-number-of-points": 40887, + "envelope-reduce-number-of-points-by-half": 42199, + "envelope-reduce-number-of-points-by-half-within-time-selection": 42201, + "envelope-reduce-number-of-selected-points-by-half": 42208, + "envelope-remove-automation-items-from-pool-unpool": 42084, + "envelope-remove-unnecessary-points": 43588, + "envelope-remove-unnecessary-points-within-time-selection": 43589, + "envelope-remove-unnecessary-selected-points": 43590, + "envelope-rename-automation-item": 42091, + "envelope-reset-selected-points-to-zero-center": 40415, + "envelope-reverse-points": 42200, + "envelope-save-automation-item": 42092, + "envelope-select-all-points": 40332, + "envelope-select-points-in-time-selection": 40330, + "envelope-set-default-point-shape-to-bezier": 40681, + "envelope-set-default-point-shape-to-fast-end": 40431, + "envelope-set-default-point-shape-to-fast-start": 40430, + "envelope-set-default-point-shape-to-linear": 40187, + "envelope-set-default-point-shape-to-slow-start-end": 40425, + "envelope-set-default-point-shape-to-square": 40188, + "envelope-set-loop-points-to-automation-item": 42198, + "envelope-set-shape-of-selected-points-to-bezier": 40683, + "envelope-set-shape-of-selected-points-to-fast-end": 40429, + "envelope-set-shape-of-selected-points-to-fast-start": 40428, + "envelope-set-shape-of-selected-points-to-linear": 40189, + "envelope-set-shape-of-selected-points-to-slow-start-end": 40424, + "envelope-set-shape-of-selected-points-to-square": 40190, + "envelope-set-time-selection-to-automation-item": 42197, + "envelope-show-all-active-envelopes-for-tracks": 40888, + "envelope-show-all-envelopes-for-all-tracks": 41149, + "envelope-show-all-envelopes-for-tracks": 41148, + "envelope-split-automation-items": 42087, + "envelope-toggle-automation-item-loop": 42196, + "envelope-toggle-bypass-for-selected-envelope": 40883, + "envelope-toggle-display-all-visible-envelopes-in-lanes-for-tracks": 40891, + "envelope-toggle-display-in-separate-lane-for-selected-envelope": 40851, + "envelope-toggle-hide-display-selected-envelope": 40884, + "envelope-toggle-record-arm-for-selected-envelope": 40863, + "envelope-toggle-select-unselect-all-points": 41595, + "envelope-toggle-show-all-active-envelopes-for-all-tracks": 40926, + "envelope-toggle-show-all-active-envelopes-for-tracks": 40890, + "envelope-toggle-show-all-envelopes-for-all-tracks": 41152, + "envelope-toggle-show-all-envelopes-for-tracks": 41151, + "envelope-unselect-clear-selection-of-all-points": 40331, + "envelopes-move-selected-points-down-a-little-bit": 41181, + "envelopes-move-selected-points-down-a-tiny-bit": 42382, + "envelopes-move-selected-points-left-a-little-bit": 41176, + "envelopes-move-selected-points-left-by-grid": 41178, + "envelopes-move-selected-points-right-a-little-bit": 41177, + "envelopes-move-selected-points-right-by-grid": 41179, + "envelopes-move-selected-points-up-a-little-bit": 41180, + "envelopes-move-selected-points-up-a-tiny-bit": 42381, + "envelopes-view-envelopes-for-last-touched-track-item": 40019, + "export-track-lyrics": 42071, + "file-add-project-to-render-queue-using-the-most-recent-render-settings": 41823, + "file-batch-file-converter": 41076, + "file-choose-project-s-to-open": 43697, + "file-clean-current-project-directory": 40098, + "file-close-all-projects": 40886, + "file-consolidate-tracks": 40185, + "file-dry-run-render-project-using-the-most-recent-render-settings": 43349, + "file-duplicate-project-in-new-tab": 43645, + "file-export-configuration": 41568, + "file-export-project-midi": 40849, + "file-import-configuration": 41569, + "file-new-project": 40023, + "file-open-project": 40025, + "file-open-render-queue": 40929, + "file-open-render-statistics-charts-from-most-recent-render-in-web-browser": 42497, + "file-open-render-statistics-charts-from-most-recent-render-in-web-browser-hide-file-paths": 42510, + "file-open-render-statistics-charts-from-most-recent-render-in-web-browser-hide-file-paths-and-project-regions-markers": 43343, + "file-open-render-statistics-charts-from-most-recent-render-in-web-browser-hide-project-regions-markers": 43342, + "file-project-settings": 40021, + "file-quit-reaper": 40004, + "file-render-project-to-disk": 40015, + "file-render-project-using-the-most-recent-render-settings": 41824, + "file-render-project-using-the-most-recent-render-settings-auto-close-render-dialog": 42230, + "file-render-project-using-the-most-recent-render-settings-with-a-new-target-file-name": 41855, + "file-save-all-projects": 40897, + "file-save-copy-of-project-as-prompt-with-current-name": 43578, + "file-save-copy-of-project-as-prompt-with-incremented-project-name": 42347, + "file-save-copy-of-project-automatically-increment-project-name": 42346, + "file-save-live-output-to-disk-bounce": 40017, + "file-save-live-output-to-disk-bounce-using-the-most-recent-bounce-settings": 42317, + "file-save-new-version-of-project-automatically-increment-project-name": 41895, + "file-save-project": 40026, + "file-save-project-and-render-rpp-prox": 42332, + "file-save-project-as": 40022, + "file-save-project-as-template": 40394, + "file-show-project-render-metadata-window": 42397, + "file-spawn-new-instance-of-reaper": 40063, + "fixed-lane-comp-area-add-comp-area-at-time-selection-for-lane-at-mouse": 42657, + "fixed-lane-comp-area-add-comp-area-between-previous-and-next-comp-areas-for-lane-at-mouse": 42599, + "fixed-lane-comp-area-add-comp-area-from-mouse-position-to-next-area-or-end-of-media": 42613, + "fixed-lane-comp-area-delete-comp-area": 42642, + "fixed-lane-comp-area-delete-comp-area-at-mouse": 42643, + "fixed-lane-comp-area-delete-comp-area-at-mouse-but-not-media-items": 42644, + "fixed-lane-comp-area-delete-comp-area-but-not-media-items": 42473, + "fixed-lane-comp-area-delete-comp-area-edge": 42496, + "fixed-lane-comp-area-delete-comp-area-edge-at-mouse": 42595, + "fixed-lane-comp-area-move-comp-area-at-mouse-down": 42492, + "fixed-lane-comp-area-move-comp-area-at-mouse-to-lane-under-mouse": 42493, + "fixed-lane-comp-area-move-comp-area-at-mouse-up": 42491, + "fixed-lane-comp-area-move-comp-area-down-for-selected-items": 42708, + "fixed-lane-comp-area-move-comp-area-up-for-selected-items": 42707, + "fixed-lane-comp-area-move-down": 41083, + "fixed-lane-comp-area-move-up": 41082, + "fixed-lane-comp-area-set-loop-points-to-comp-area": 42495, + "fixed-lane-comp-area-set-loop-points-to-comp-area-at-mouse": 42504, + "fixed-lane-comp-area-set-loop-points-to-comp-area-at-mouse-half-second-preroll-postroll": 42711, + "fixed-lane-comp-area-set-loop-points-to-comp-area-at-mouse-one-second-preroll-postroll": 42712, + "fixed-lane-comp-area-split-comp-area-at-edit-cursor": 42600, + "fixed-lane-comp-area-split-comp-area-at-mouse-position": 42641, + "fixed-lane-comp-area-split-comp-area-at-mouse-position-ignoring-snap": 40146, + "fixed-lane-comp-area-split-media-items-at-comp-area-edges": 42602, + "fixed-lane-comp-area-split-media-items-at-edges-of-comp-area-at-mouse": 42603, + "fully-unload-unloaded-vsts": 41204, + "fx-activate-bypass-track-take-envelope-for-last-touched-fx-parameter": 41983, + "fx-arm-track-take-envelope-for-last-touched-fx-parameter": 41984, + "fx-auto-float-new-fx-windows": 41078, + "fx-clear-delta-solo-for-all-fx-on-selected-tracks": 42466, + "fx-clear-delta-solo-for-all-project-fx": 42467, + "fx-delete-all-track-fx-on-selected-tracks": 43698, + "fx-hide-all-fx-embedded-ui-in-tcp-selected-tracks": 42341, + "fx-set-alias-for-last-touched-fx-parameter": 41145, + "fx-set-all-fx-online-one-at-a-time": 43689, + "fx-set-midi-learn-for-last-touched-fx-parameter": 41144, + "fx-show-all-fx-embedded-ui-in-tcp-selected-tracks": 42340, + "fx-show-hide-track-control-for-last-touched-fx-parameter": 41141, + "fx-show-hide-track-take-envelope-for-last-touched-fx-parameter": 41142, + "fx-show-last-focused-fx-embedded-ui-in-mcp": 42372, + "fx-show-last-focused-fx-embedded-ui-in-tcp": 42335, + "fx-show-next-single-fx-embedded-ui-in-tcp-selected-tracks": 42342, + "fx-show-parameter-modulation-link-for-last-touched-fx-parameter": 41143, + "fx-show-previous-single-fx-embedded-ui-in-tcp-selected-tracks": 42343, + "fx-toggle-delta-solo-for-last-focused-fx": 42455, + "fx-toggle-map-to-container-parameter-for-last-touched-fx-parameter": 42650, + "fx-toggle-preference-auto-bypass-fx-that-require-pdc-on-record-arm-affected-tracks": 43150, + "global-automation-override-all-automation-in-latch-mode": 40881, + "global-automation-override-all-automation-in-latch-preview-mode": 42022, + "global-automation-override-all-automation-in-read-mode": 40879, + "global-automation-override-all-automation-in-touch-mode": 40880, + "global-automation-override-all-automation-in-trim-read-mode": 40878, + "global-automation-override-all-automation-in-write-mode": 40882, + "global-automation-override-bypass-all-automation": 40885, + "global-automation-override-no-override-set-automation-modes-per-track": 40876, + "global-automation-override-toggle-bypass-all-automation": 40908, + "go-to-end-of-loop": 40633, + "go-to-end-of-time-selection": 40631, + "go-to-start-of-loop": 40632, + "go-to-start-of-time-selection": 40630, + "grid-adjust-by-1-1-5": 40782, + "grid-adjust-by-1-2": 40783, + "grid-adjust-by-1-3": 40784, + "grid-adjust-by-1-5": 40785, + "grid-adjust-by-2": 40786, + "grid-adjust-by-3": 40787, + "grid-adjust-swing-grid-midi-cc-mousewheel-only": 969, + "grid-divide-arrange-view-vertically-by-measures": 42331, + "grid-set-framerate-grid": 40904, + "grid-set-measure-grid": 40923, + "grid-set-to-1": 40781, + "grid-set-to-1-10-1-8-quintuplet": 42002, + "grid-set-to-1-12-1-8-triplet": 40777, + "grid-set-to-1-128": 41047, + "grid-set-to-1-16": 40776, + "grid-set-to-1-18": 42001, + "grid-set-to-1-2": 40780, + "grid-set-to-1-24-1-16-triplet": 41213, + "grid-set-to-1-3-1-2-triplet": 42000, + "grid-set-to-1-32": 40775, + "grid-set-to-1-4": 40779, + "grid-set-to-1-48-1-32-triplet": 41212, + "grid-set-to-1-5-1-4-quintuplet": 42005, + "grid-set-to-1-6-1-4-triplet": 41214, + "grid-set-to-1-64": 40774, + "grid-set-to-1-7-1-4-septuplet": 42004, + "grid-set-to-1-8": 40778, + "grid-set-to-1-9": 42003, + "grid-set-to-2": 41210, + "grid-set-to-2-3-whole-note-triplet": 42007, + "grid-set-to-3": 42006, + "grid-set-to-4": 41211, + "grid-toggle-framerate-grid": 41885, + "grid-toggle-measure-grid": 40725, + "grid-toggle-swing-grid": 42304, + "grid-use-the-same-grid-division-in-arrange-view-and-midi-editor": 42010, + "group-enable-group-01": 42511, + "group-enable-group-02": 42512, + "group-enable-group-03": 42513, + "group-enable-group-04": 42514, + "group-enable-group-05": 42515, + "group-enable-group-06": 42516, + "group-enable-group-07": 42517, + "group-enable-group-08": 42518, + "group-enable-group-09": 42519, + "group-enable-group-10": 42520, + "group-enable-group-100": 43313, + "group-enable-group-101": 43314, + "group-enable-group-102": 43315, + "group-enable-group-103": 43316, + "group-enable-group-104": 43317, + "group-enable-group-105": 43318, + "group-enable-group-106": 43319, + "group-enable-group-107": 43320, + "group-enable-group-108": 43321, + "group-enable-group-109": 43322, + "group-enable-group-11": 42521, + "group-enable-group-110": 43323, + "group-enable-group-111": 43324, + "group-enable-group-112": 43325, + "group-enable-group-113": 43326, + "group-enable-group-114": 43327, + "group-enable-group-115": 43328, + "group-enable-group-116": 43329, + "group-enable-group-117": 43330, + "group-enable-group-118": 43331, + "group-enable-group-119": 43332, + "group-enable-group-12": 42522, + "group-enable-group-120": 43333, + "group-enable-group-121": 43334, + "group-enable-group-122": 43335, + "group-enable-group-123": 43336, + "group-enable-group-124": 43337, + "group-enable-group-125": 43338, + "group-enable-group-126": 43339, + "group-enable-group-127": 43340, + "group-enable-group-128": 43341, + "group-enable-group-13": 42523, + "group-enable-group-14": 42524, + "group-enable-group-15": 42525, + "group-enable-group-16": 42526, + "group-enable-group-17": 42527, + "group-enable-group-18": 42528, + "group-enable-group-19": 42529, + "group-enable-group-20": 42530, + "group-enable-group-21": 42531, + "group-enable-group-22": 42532, + "group-enable-group-23": 42533, + "group-enable-group-24": 42534, + "group-enable-group-25": 42535, + "group-enable-group-26": 42536, + "group-enable-group-27": 42537, + "group-enable-group-28": 42538, + "group-enable-group-29": 42539, + "group-enable-group-30": 42540, + "group-enable-group-31": 42541, + "group-enable-group-32": 42542, + "group-enable-group-33": 42543, + "group-enable-group-34": 42544, + "group-enable-group-35": 42545, + "group-enable-group-36": 42546, + "group-enable-group-37": 42547, + "group-enable-group-38": 42548, + "group-enable-group-39": 42549, + "group-enable-group-40": 42550, + "group-enable-group-41": 42551, + "group-enable-group-42": 42552, + "group-enable-group-43": 42553, + "group-enable-group-44": 42554, + "group-enable-group-45": 42555, + "group-enable-group-46": 42556, + "group-enable-group-47": 42557, + "group-enable-group-48": 42558, + "group-enable-group-49": 42559, + "group-enable-group-50": 42560, + "group-enable-group-51": 42561, + "group-enable-group-52": 42562, + "group-enable-group-53": 42563, + "group-enable-group-54": 42564, + "group-enable-group-55": 42565, + "group-enable-group-56": 42566, + "group-enable-group-57": 42567, + "group-enable-group-58": 42568, + "group-enable-group-59": 42569, + "group-enable-group-60": 42570, + "group-enable-group-61": 42571, + "group-enable-group-62": 42572, + "group-enable-group-63": 42573, + "group-enable-group-64": 42574, + "group-enable-group-65": 43278, + "group-enable-group-66": 43279, + "group-enable-group-67": 43280, + "group-enable-group-68": 43281, + "group-enable-group-69": 43282, + "group-enable-group-70": 43283, + "group-enable-group-71": 43284, + "group-enable-group-72": 43285, + "group-enable-group-73": 43286, + "group-enable-group-74": 43287, + "group-enable-group-75": 43288, + "group-enable-group-76": 43289, + "group-enable-group-77": 43290, + "group-enable-group-78": 43291, + "group-enable-group-79": 43292, + "group-enable-group-80": 43293, + "group-enable-group-81": 43294, + "group-enable-group-82": 43295, + "group-enable-group-83": 43296, + "group-enable-group-84": 43297, + "group-enable-group-85": 43298, + "group-enable-group-86": 43299, + "group-enable-group-87": 43300, + "group-enable-group-88": 43301, + "group-enable-group-89": 43302, + "group-enable-group-90": 43303, + "group-enable-group-91": 43304, + "group-enable-group-92": 43305, + "group-enable-group-93": 43306, + "group-enable-group-94": 43307, + "group-enable-group-95": 43308, + "group-enable-group-96": 43309, + "group-enable-group-97": 43310, + "group-enable-group-98": 43311, + "group-enable-group-99": 43312, + "group-select-all-tracks-in-group-01": 40804, + "group-select-all-tracks-in-group-02": 40805, + "group-select-all-tracks-in-group-03": 40806, + "group-select-all-tracks-in-group-04": 40807, + "group-select-all-tracks-in-group-05": 40808, + "group-select-all-tracks-in-group-06": 40809, + "group-select-all-tracks-in-group-07": 40810, + "group-select-all-tracks-in-group-08": 40811, + "group-select-all-tracks-in-group-09": 40812, + "group-select-all-tracks-in-group-10": 40813, + "group-select-all-tracks-in-group-100": 43249, + "group-select-all-tracks-in-group-101": 43250, + "group-select-all-tracks-in-group-102": 43251, + "group-select-all-tracks-in-group-103": 43252, + "group-select-all-tracks-in-group-104": 43253, + "group-select-all-tracks-in-group-105": 43254, + "group-select-all-tracks-in-group-106": 43255, + "group-select-all-tracks-in-group-107": 43256, + "group-select-all-tracks-in-group-108": 43257, + "group-select-all-tracks-in-group-109": 43258, + "group-select-all-tracks-in-group-11": 40814, + "group-select-all-tracks-in-group-110": 43259, + "group-select-all-tracks-in-group-111": 43260, + "group-select-all-tracks-in-group-112": 43261, + "group-select-all-tracks-in-group-113": 43262, + "group-select-all-tracks-in-group-114": 43263, + "group-select-all-tracks-in-group-115": 43264, + "group-select-all-tracks-in-group-116": 43265, + "group-select-all-tracks-in-group-117": 43266, + "group-select-all-tracks-in-group-118": 43267, + "group-select-all-tracks-in-group-119": 43268, + "group-select-all-tracks-in-group-12": 40815, + "group-select-all-tracks-in-group-120": 43269, + "group-select-all-tracks-in-group-121": 43270, + "group-select-all-tracks-in-group-122": 43271, + "group-select-all-tracks-in-group-123": 43272, + "group-select-all-tracks-in-group-124": 43273, + "group-select-all-tracks-in-group-125": 43274, + "group-select-all-tracks-in-group-126": 43275, + "group-select-all-tracks-in-group-127": 43276, + "group-select-all-tracks-in-group-128": 43277, + "group-select-all-tracks-in-group-13": 40816, + "group-select-all-tracks-in-group-14": 40817, + "group-select-all-tracks-in-group-15": 40818, + "group-select-all-tracks-in-group-16": 40819, + "group-select-all-tracks-in-group-17": 40820, + "group-select-all-tracks-in-group-18": 40821, + "group-select-all-tracks-in-group-19": 40822, + "group-select-all-tracks-in-group-20": 40823, + "group-select-all-tracks-in-group-21": 40824, + "group-select-all-tracks-in-group-22": 40825, + "group-select-all-tracks-in-group-23": 40826, + "group-select-all-tracks-in-group-24": 40827, + "group-select-all-tracks-in-group-25": 40828, + "group-select-all-tracks-in-group-26": 40829, + "group-select-all-tracks-in-group-27": 40830, + "group-select-all-tracks-in-group-28": 40831, + "group-select-all-tracks-in-group-29": 40832, + "group-select-all-tracks-in-group-30": 40833, + "group-select-all-tracks-in-group-31": 40834, + "group-select-all-tracks-in-group-32": 40835, + "group-select-all-tracks-in-group-33": 42237, + "group-select-all-tracks-in-group-34": 42238, + "group-select-all-tracks-in-group-35": 42239, + "group-select-all-tracks-in-group-36": 42240, + "group-select-all-tracks-in-group-37": 42241, + "group-select-all-tracks-in-group-38": 42242, + "group-select-all-tracks-in-group-39": 42243, + "group-select-all-tracks-in-group-40": 42244, + "group-select-all-tracks-in-group-41": 42245, + "group-select-all-tracks-in-group-42": 42246, + "group-select-all-tracks-in-group-43": 42247, + "group-select-all-tracks-in-group-44": 42248, + "group-select-all-tracks-in-group-45": 42249, + "group-select-all-tracks-in-group-46": 42250, + "group-select-all-tracks-in-group-47": 42251, + "group-select-all-tracks-in-group-48": 42252, + "group-select-all-tracks-in-group-49": 42253, + "group-select-all-tracks-in-group-50": 42254, + "group-select-all-tracks-in-group-51": 42255, + "group-select-all-tracks-in-group-52": 42256, + "group-select-all-tracks-in-group-53": 42257, + "group-select-all-tracks-in-group-54": 42258, + "group-select-all-tracks-in-group-55": 42259, + "group-select-all-tracks-in-group-56": 42260, + "group-select-all-tracks-in-group-57": 42261, + "group-select-all-tracks-in-group-58": 42262, + "group-select-all-tracks-in-group-59": 42263, + "group-select-all-tracks-in-group-60": 42264, + "group-select-all-tracks-in-group-61": 42265, + "group-select-all-tracks-in-group-62": 42266, + "group-select-all-tracks-in-group-63": 42267, + "group-select-all-tracks-in-group-64": 42268, + "group-select-all-tracks-in-group-65": 43214, + "group-select-all-tracks-in-group-66": 43215, + "group-select-all-tracks-in-group-67": 43216, + "group-select-all-tracks-in-group-68": 43217, + "group-select-all-tracks-in-group-69": 43218, + "group-select-all-tracks-in-group-70": 43219, + "group-select-all-tracks-in-group-71": 43220, + "group-select-all-tracks-in-group-72": 43221, + "group-select-all-tracks-in-group-73": 43222, + "group-select-all-tracks-in-group-74": 43223, + "group-select-all-tracks-in-group-75": 43224, + "group-select-all-tracks-in-group-76": 43225, + "group-select-all-tracks-in-group-77": 43226, + "group-select-all-tracks-in-group-78": 43227, + "group-select-all-tracks-in-group-79": 43228, + "group-select-all-tracks-in-group-80": 43229, + "group-select-all-tracks-in-group-81": 43230, + "group-select-all-tracks-in-group-82": 43231, + "group-select-all-tracks-in-group-83": 43232, + "group-select-all-tracks-in-group-84": 43233, + "group-select-all-tracks-in-group-85": 43234, + "group-select-all-tracks-in-group-86": 43235, + "group-select-all-tracks-in-group-87": 43236, + "group-select-all-tracks-in-group-88": 43237, + "group-select-all-tracks-in-group-89": 43238, + "group-select-all-tracks-in-group-90": 43239, + "group-select-all-tracks-in-group-91": 43240, + "group-select-all-tracks-in-group-92": 43241, + "group-select-all-tracks-in-group-93": 43242, + "group-select-all-tracks-in-group-94": 43243, + "group-select-all-tracks-in-group-95": 43244, + "group-select-all-tracks-in-group-96": 43245, + "group-select-all-tracks-in-group-97": 43246, + "group-select-all-tracks-in-group-98": 43247, + "group-select-all-tracks-in-group-99": 43248, + "help-about-reaper": 40007, + "help-all-actions": 40845, + "help-check-for-new-versions": 40442, + "help-mouse-modifier-keys-and-action-shortcuts": 40308, + "help-show-mouse-editing-help-in-the-area-beneath-the-track-control-panels": 41345, + "i-o-dialog-close-window-on-enter-key": 41828, + "import-track-lyrics": 42070, + "insert-click-source": 40013, + "insert-dedicated-video-processor-item": 41932, + "insert-empty-item": 40142, + "insert-fx-aui-komplete-kontrol-native-instruments": 55807, + "insert-import-media-files": 40018, + "insert-import-media-files-from-directory": 43673, + "insert-new-midi-item": 40214, + "insert-new-subproject": 41049, + "insert-or-extend-midi-items-to-fill-time-selection": 42069, + "insert-timecode-generator": 40208, + "insert-virtual-instrument-on-new-track": 40701, + "item-add-an-empty-take-after-the-active-take": 41352, + "item-add-an-empty-take-before-the-active-take": 41351, + "item-add-edit-take-marker-at-mouse-position": 42388, + "item-add-edit-take-marker-at-play-position-or-edit-cursor": 42385, + "item-add-edit-take-marker-at-time-selection": 43181, + "item-add-stretch-marker-at-cursor": 41842, + "item-add-stretch-marker-at-mouse-position": 41848, + "item-add-stretch-markers-at-time-selection": 41843, + "item-apply-first-take-fx-to-items": 42686, + "item-apply-first-take-fx-to-items-mono-output": 42688, + "item-apply-first-track-fx-to-items": 42685, + "item-apply-first-track-fx-to-items-mono-output": 42687, + "item-apply-track-take-fx-to-items": 40209, + "item-apply-track-take-fx-to-items-midi-output": 40436, + "item-apply-track-take-fx-to-items-mono-output": 40361, + "item-apply-track-take-fx-to-items-multichannel-output": 41993, + "item-auto-reposition-items-in-free-item-positioning-mode": 40645, + "item-auto-trim-split-items-remove-silence": 40315, + "item-choose-active-take-for-item-under-mouse": 41381, + "item-clear-up-rank-down-rank-markers": 43161, + "item-clear-up-rank-down-rank-markers-for-take-under-mouse": 43162, + "item-clear-up-rank-down-rank-markers-within-time-selection": 43202, + "item-close-item-inline-editors": 41887, + "item-collapse-empty-take": 41747, + "item-convert-embedded-source-transient-information-to-transient-guides": 42380, + "item-copy-items-to-time-selection-trim-loop-to-fit": 41319, + "item-copy-loop-of-selected-area-of-audio-items": 40014, + "item-copy-selected-area-of-items": 40060, + "item-create-chromatic-midi-from-items": 40773, + "item-crossfade-any-overlapping-items": 41059, + "item-crossfade-items-within-time-selection": 40916, + "item-cut-selected-area-of-items": 40307, + "item-cycle-through-crossfade-shapes": 41534, + "item-cycle-through-fade-in-shapes": 41520, + "item-cycle-through-fade-out-shapes": 41527, + "item-cycle-through-up-rank-down-rank-levels-for-active-take-or-last-recording-pass": 43197, + "item-cycle-through-up-rank-down-rank-levels-for-take-marker-at-mouse-position": 43200, + "item-cycle-through-up-rank-down-rank-levels-for-take-marker-at-play-position-or-edit-cursor": 43199, + "item-cycle-through-up-rank-down-rank-levels-for-take-marker-at-time-selection": 43201, + "item-cycle-through-up-rank-down-rank-levels-for-take-or-comp-area-under-mouse": 43198, + "item-delete-all-take-markers": 42387, + "item-delete-take-marker-at-cursor": 42386, + "item-delete-take-marker-at-mouse-position": 42389, + "item-delete-take-markers-in-time-selection": 43182, + "item-delete-takes-for-item-under-mouse-that-are-down-ranked-no-confirm": 43163, + "item-delete-takes-for-item-under-mouse-that-are-not-up-ranked-no-confirm": 43164, + "item-delete-takes-that-are-down-ranked-no-confirm": 42682, + "item-delete-takes-that-are-not-up-ranked-no-confirm": 40229, + "item-disable-default-fadein-fadeout": 41196, + "item-down-rank-active-take-or-last-recording-pass": 42681, + "item-down-rank-take-marker-at-1-second-before-play-position-or-at-edit-cursor-if-not-playing-back": 43175, + "item-down-rank-take-marker-at-2-seconds-before-play-position-or-at-edit-cursor-if-not-playing-back": 43177, + "item-down-rank-take-marker-at-mouse-position": 43160, + "item-down-rank-take-marker-at-play-position-or-edit-cursor": 43158, + "item-down-rank-take-marker-at-time-selection": 43184, + "item-down-rank-take-or-comp-area-under-mouse": 43156, + "item-duplicate-items": 41295, + "item-duplicate-selected-area-of-items": 41296, + "item-edit-close-nudge-set-dialog": 41227, + "item-edit-disable-relative-grid-snap": 41053, + "item-edit-enable-relative-grid-snap": 41052, + "item-edit-grow-left-edge-of-items": 40225, + "item-edit-grow-right-edge-of-items": 40228, + "item-edit-move-contents-of-item-to-edit-cursor": 41308, + "item-edit-move-contents-of-item-under-mouse-to-edit-cursor": 41303, + "item-edit-move-contents-of-items-left": 40123, + "item-edit-move-contents-of-items-right": 40124, + "item-edit-move-duplicate-of-item-to-edit-cursor": 41309, + "item-edit-move-duplicate-of-item-under-mouse-to-edit-cursor": 41304, + "item-edit-move-items-envelope-points-down-one-track-a-bit": 40118, + "item-edit-move-items-envelope-points-left": 40120, + "item-edit-move-items-envelope-points-left-by-grid-size": 40793, + "item-edit-move-items-envelope-points-right": 40119, + "item-edit-move-items-envelope-points-right-by-grid-size": 40794, + "item-edit-move-items-envelope-points-up-one-track-a-bit": 40117, + "item-edit-move-items-left-preserving-timing-of-contents": 40121, + "item-edit-move-items-right-preserving-timing-of-contents": 40122, + "item-edit-move-left-edge-of-item-to-edit-cursor-preserving-item-right-edge": 41306, + "item-edit-move-left-edge-of-item-under-mouse-to-edit-cursor-preserving-item-right-edge": 41301, + "item-edit-move-position-of-item-to-edit-cursor": 41205, + "item-edit-move-position-of-item-under-mouse-to-edit-cursor": 41299, + "item-edit-move-right-edge-of-item-to-edit-cursor-preserving-item-length": 41307, + "item-edit-move-right-edge-of-item-under-mouse-to-edit-cursor-preserving-item-length": 41302, + "item-edit-nudge-left-by-last-nudge-dialog-settings": 41250, + "item-edit-nudge-left-by-saved-nudge-dialog-settings-1": 41279, + "item-edit-nudge-left-by-saved-nudge-dialog-settings-2": 41280, + "item-edit-nudge-left-by-saved-nudge-dialog-settings-3": 41281, + "item-edit-nudge-left-by-saved-nudge-dialog-settings-4": 41282, + "item-edit-nudge-left-by-saved-nudge-dialog-settings-5": 41291, + "item-edit-nudge-left-by-saved-nudge-dialog-settings-6": 41292, + "item-edit-nudge-left-by-saved-nudge-dialog-settings-7": 41293, + "item-edit-nudge-left-by-saved-nudge-dialog-settings-8": 41294, + "item-edit-nudge-right-by-last-nudge-dialog-settings": 41249, + "item-edit-nudge-right-by-saved-nudge-dialog-settings-1": 41275, + "item-edit-nudge-right-by-saved-nudge-dialog-settings-2": 41276, + "item-edit-nudge-right-by-saved-nudge-dialog-settings-3": 41277, + "item-edit-nudge-right-by-saved-nudge-dialog-settings-4": 41278, + "item-edit-nudge-right-by-saved-nudge-dialog-settings-5": 41287, + "item-edit-nudge-right-by-saved-nudge-dialog-settings-6": 41288, + "item-edit-nudge-right-by-saved-nudge-dialog-settings-7": 41289, + "item-edit-nudge-right-by-saved-nudge-dialog-settings-8": 41290, + "item-edit-nudge-set": 41226, + "item-edit-phase-alignment": 43466, + "item-edit-save-nudge-dialog-settings-1": 41271, + "item-edit-save-nudge-dialog-settings-2": 41272, + "item-edit-save-nudge-dialog-settings-3": 41273, + "item-edit-save-nudge-dialog-settings-4": 41274, + "item-edit-save-nudge-dialog-settings-5": 41283, + "item-edit-save-nudge-dialog-settings-6": 41284, + "item-edit-save-nudge-dialog-settings-7": 41285, + "item-edit-save-nudge-dialog-settings-8": 41286, + "item-edit-shrink-left-edge-of-items": 40226, + "item-edit-shrink-right-edge-of-items": 40227, + "item-edit-stretch-marker-at-cursor": 41988, + "item-edit-toggle-nudge-set-dialog": 41228, + "item-edit-toggle-relative-grid-snap": 41054, + "item-edit-trim-left-edge-of-item-to-edit-cursor": 41305, + "item-edit-trim-left-edge-of-item-under-mouse-to-edit-cursor": 41300, + "item-edit-trim-right-edge-of-item-to-edit-cursor": 41311, + "item-edit-trim-right-edge-of-item-under-mouse-to-edit-cursor": 41310, + "item-enable-default-fadein-fadeout": 41195, + "item-explode-midi-note-rows-pitch-to-new-items": 40920, + "item-explode-multichannel-audio-or-midi-to-new-one-channel-items": 40894, + "item-explode-rex-item-into-beat-slices": 41513, + "item-fade-items-in-to-cursor": 40509, + "item-fade-items-out-from-cursor": 40510, + "item-fit-items-to-time-selection-looping-if-needed": 41386, + "item-fit-items-to-time-selection-padding-with-silence-if-needed": 41385, + "item-force-balanced-mode-for-stretch-markers": 42338, + "item-force-no-pre-echo-reduction-mode-for-stretch-markers": 42339, + "item-force-tonal-optimized-mode-for-stretch-markers": 41857, + "item-force-transient-optimized-mode-for-stretch-markers": 42337, + "item-glue-items-auto-increase-channel-count-with-take-fx": 42434, + "item-glue-items-expanding-to-time-selection-if-any": 41588, + "item-glue-items-expanding-to-time-selection-if-any-auto-increase-channel-count-with-take-fx": 42009, + "item-glue-items-expanding-to-time-selection-if-any-including-leading-fade-in-and-trailing-fade-out": 40606, + "item-glue-items-ignoring-time-selection": 40362, + "item-glue-items-ignoring-time-selection-auto-increase-channel-count-with-take-fx": 42008, + "item-glue-items-ignoring-time-selection-including-leading-fade-in-and-trailing-fade-out": 40257, + "item-glue-items-including-leading-fade-in-and-trailing-fade-out": 42433, + "item-glue-items-within-time-selection": 42432, + "item-go-to-nearest-stretch-marker": 41862, + "item-go-to-next-stretch-marker": 41860, + "item-go-to-previous-stretch-marker": 41861, + "item-grouping-group-items": 40032, + "item-grouping-remove-items-from-group": 40033, + "item-grouping-select-all-items-in-groups": 40034, + "item-heal-splits-in-items": 40548, + "item-implode-items-across-tracks-into-items-on-one-track": 40644, + "item-import-item-media-cues-as-project-markers": 40692, + "item-import-media-cues-as-take-markers": 43154, + "item-insert-time-on-tracks-and-paste-items": 41748, + "item-invert-selection": 41115, + "item-maximize-height-of-selected-items-in-free-item-positioning-mode": 42655, + "item-move-active-takes-to-top": 41380, + "item-move-and-stretch-items-to-fit-time-selection": 41206, + "item-move-items-to-subproject-non-destructive-glue": 41996, + "item-move-items-to-time-selection-trim-loop-to-fit": 41320, + "item-move-stretch-and-loop-items-to-fit-time-selection": 41069, + "item-move-to-media-source-preferred-position-bwf-start-offset": 40299, + "item-mute-active-take-of-multitake-item-within-time-selection": 40855, + "item-navigation-move-cursor-left-to-edge-of-item": 40318, + "item-navigation-move-cursor-left-to-nearest-item-edge": 41167, + "item-navigation-move-cursor-right-to-edge-of-item": 40319, + "item-navigation-move-cursor-right-to-nearest-item-edge": 41168, + "item-navigation-move-cursor-to-end-of-items": 41174, + "item-navigation-move-cursor-to-nearest-transient-in-items": 40836, + "item-navigation-move-cursor-to-next-transient-in-items": 40375, + "item-navigation-move-cursor-to-previous-transient-in-items": 40376, + "item-navigation-move-cursor-to-start-of-items": 41173, + "item-navigation-select-and-move-to-item-in-next-track": 40419, + "item-navigation-select-and-move-to-item-in-next-track-without-changing-track-selection": 41140, + "item-navigation-select-and-move-to-item-in-previous-track": 40418, + "item-navigation-select-and-move-to-item-in-previous-track-without-changing-track-selection": 41139, + "item-navigation-select-and-move-to-next-item": 40417, + "item-navigation-select-and-move-to-previous-item": 40416, + "item-nudge-items-volume-1db": 41924, + "item-nudge-items-volume-plus-1db": 41925, + "item-open-associated-project-in-new-tab": 41816, + "item-open-in-built-in-midi-editor-set-default-behavior-in-preferences": 40153, + "item-open-item-copies-in-primary-external-editor": 40132, + "item-open-item-copies-in-secondary-external-editor": 40203, + "item-open-item-inline-editors": 40847, + "item-open-items-in-primary-external-editor": 40109, + "item-open-items-in-secondary-external-editor": 40202, + "item-paste-items-tracks": 42398, + "item-paste-items-tracks-at-mouse-position": 41221, + "item-paste-items-tracks-creating-pooled-ghost-midi-items-and-automation-items-regardless-of-preferences-media-midi-and-preferences-media-automation-settings": 41072, + "item-paste-items-tracks-old-style-handling-of-hidden-tracks": 40058, + "item-propagate-to-all-similarly-named-items": 41979, + "item-propagate-to-similarly-named-items-on-track": 41977, + "item-properties-clear-take-preserve-pitch": 40796, + "item-properties-decrease-item-rate-by-0-6-percent-10-cents": 40520, + "item-properties-decrease-item-rate-by-0-6-percent-10-cents-clear-preserve-pitch": 40800, + "item-properties-decrease-item-rate-by-6-percent-one-semitone": 40518, + "item-properties-decrease-item-rate-by-6-percent-one-semitone-clear-preserve-pitch": 40798, + "item-properties-display-item-beats-ruler-constant-time-signature": 42315, + "item-properties-display-item-beats-ruler-minimal-constant-time-signature": 42359, + "item-properties-display-item-source-time-ruler": 42313, + "item-properties-display-item-source-time-ruler-apply-media-source-bwf-start-offset": 42419, + "item-properties-display-item-source-time-ruler-in-h-m-s-f-format": 42358, + "item-properties-display-item-source-time-ruler-in-h-m-s-f-format-apply-media-source-bwf-start-offset": 42420, + "item-properties-display-item-time-ruler": 42312, + "item-properties-display-item-time-ruler-in-h-m-s-f-format": 42314, + "item-properties-increase-item-rate-by-0-6-percent-10-cents": 40519, + "item-properties-increase-item-rate-by-0-6-percent-10-cents-clear-preserve-pitch": 40799, + "item-properties-increase-item-rate-by-6-percent-one-semitone": 40517, + "item-properties-increase-item-rate-by-6-percent-one-semitone-clear-preserve-pitch": 40797, + "item-properties-item-ruler-settings": 42355, + "item-properties-lock": 40688, + "item-properties-lock-to-active-take-mouse-click-will-not-change-active-take": 41340, + "item-properties-loop-item-source": 40636, + "item-properties-loop-section-of-audio-item-source": 40547, + "item-properties-mute": 40719, + "item-properties-normalize-items-each-item-separately-to-plus-0db-peak": 40108, + "item-properties-normalize-items-peak-rms-lufs": 42460, + "item-properties-normalize-items-to-loudest-item-to-plus-0db-peak": 40254, + "item-properties-normalize-items-to-loudest-item-to-plus-0db-peak-reset-to-unity-if-already-normalized": 40937, + "item-properties-normalize-items-to-plus-0db-peak-reset-to-unity-if-already-normalized": 40936, + "item-properties-normalize-items-using-most-recent-settings": 42461, + "item-properties-normalize-items-using-most-recent-settings-force-normalize-as-if-one-long-item": 42463, + "item-properties-normalize-items-using-most-recent-settings-force-normalize-each-item-separately": 42464, + "item-properties-normalize-items-using-most-recent-settings-force-normalize-to-loudest-item": 43344, + "item-properties-normalize-items-using-most-recent-settings-reset-to-unity-if-already-normalized": 42462, + "item-properties-open-media-item-take-channel-mapper-for-selected-items": 42429, + "item-properties-pitch-item-down-one-cent": 40207, + "item-properties-pitch-item-down-one-octave": 40516, + "item-properties-pitch-item-down-one-semitone": 40205, + "item-properties-pitch-item-up-one-cent": 40206, + "item-properties-pitch-item-up-one-octave": 40515, + "item-properties-pitch-item-up-one-semitone": 40204, + "item-properties-reset-item-pitch": 40653, + "item-properties-reset-item-take-gain-to-plus-0db-un-normalize": 40938, + "item-properties-set-item-rate-from-user-supplied-source-media-tempo-bpm": 42374, + "item-properties-set-item-rate-to-1-0": 40652, + "item-properties-set-item-timebase-to-beats-auto-stretch-at-tempo-changes": 42375, + "item-properties-set-item-timebase-to-beats-position-length-rate": 40484, + "item-properties-set-item-timebase-to-beats-position-only": 40485, + "item-properties-set-item-timebase-to-project-track-default": 40380, + "item-properties-set-item-timebase-to-time": 40433, + "item-properties-set-midi-items-to-follow-project-tempo-changes-set-item-timebase-to-beats-position-length-rate": 43095, + "item-properties-set-midi-items-to-use-current-tempo-and-ignore-project-tempo-changes-set-item-timebase-to-beats-position-only": 43096, + "item-properties-set-midi-items-to-use-current-tempo-and-ignore-project-tempo-changes-set-item-timebase-to-time": 43094, + "item-properties-set-take-channel-mode-to-mono-channel-03": 41388, + "item-properties-set-take-channel-mode-to-mono-channel-04": 41389, + "item-properties-set-take-channel-mode-to-mono-channel-05": 41390, + "item-properties-set-take-channel-mode-to-mono-channel-06": 41391, + "item-properties-set-take-channel-mode-to-mono-channel-07": 41392, + "item-properties-set-take-channel-mode-to-mono-channel-08": 41393, + "item-properties-set-take-channel-mode-to-mono-channel-09": 41394, + "item-properties-set-take-channel-mode-to-mono-channel-10": 41395, + "item-properties-set-take-channel-mode-to-mono-channel-11": 41396, + "item-properties-set-take-channel-mode-to-mono-channel-12": 41397, + "item-properties-set-take-channel-mode-to-mono-channel-13": 41398, + "item-properties-set-take-channel-mode-to-mono-channel-14": 41399, + "item-properties-set-take-channel-mode-to-mono-channel-15": 41400, + "item-properties-set-take-channel-mode-to-mono-channel-16": 41401, + "item-properties-set-take-channel-mode-to-mono-channel-17": 41402, + "item-properties-set-take-channel-mode-to-mono-channel-18": 41403, + "item-properties-set-take-channel-mode-to-mono-channel-19": 41404, + "item-properties-set-take-channel-mode-to-mono-channel-20": 41405, + "item-properties-set-take-channel-mode-to-mono-channel-21": 41406, + "item-properties-set-take-channel-mode-to-mono-channel-22": 41407, + "item-properties-set-take-channel-mode-to-mono-channel-23": 41408, + "item-properties-set-take-channel-mode-to-mono-channel-24": 41409, + "item-properties-set-take-channel-mode-to-mono-channel-25": 41410, + "item-properties-set-take-channel-mode-to-mono-channel-26": 41411, + "item-properties-set-take-channel-mode-to-mono-channel-27": 41412, + "item-properties-set-take-channel-mode-to-mono-channel-28": 41413, + "item-properties-set-take-channel-mode-to-mono-channel-29": 41414, + "item-properties-set-take-channel-mode-to-mono-channel-30": 41415, + "item-properties-set-take-channel-mode-to-mono-channel-31": 41416, + "item-properties-set-take-channel-mode-to-mono-channel-32": 41417, + "item-properties-set-take-channel-mode-to-mono-channel-33": 41418, + "item-properties-set-take-channel-mode-to-mono-channel-34": 41419, + "item-properties-set-take-channel-mode-to-mono-channel-35": 41420, + "item-properties-set-take-channel-mode-to-mono-channel-36": 41421, + "item-properties-set-take-channel-mode-to-mono-channel-37": 41422, + "item-properties-set-take-channel-mode-to-mono-channel-38": 41423, + "item-properties-set-take-channel-mode-to-mono-channel-39": 41424, + "item-properties-set-take-channel-mode-to-mono-channel-40": 41425, + "item-properties-set-take-channel-mode-to-mono-channel-41": 41426, + "item-properties-set-take-channel-mode-to-mono-channel-42": 41427, + "item-properties-set-take-channel-mode-to-mono-channel-43": 41428, + "item-properties-set-take-channel-mode-to-mono-channel-44": 41429, + "item-properties-set-take-channel-mode-to-mono-channel-45": 41430, + "item-properties-set-take-channel-mode-to-mono-channel-46": 41431, + "item-properties-set-take-channel-mode-to-mono-channel-47": 41432, + "item-properties-set-take-channel-mode-to-mono-channel-48": 41433, + "item-properties-set-take-channel-mode-to-mono-channel-49": 41434, + "item-properties-set-take-channel-mode-to-mono-channel-50": 41435, + "item-properties-set-take-channel-mode-to-mono-channel-51": 41436, + "item-properties-set-take-channel-mode-to-mono-channel-52": 41437, + "item-properties-set-take-channel-mode-to-mono-channel-53": 41438, + "item-properties-set-take-channel-mode-to-mono-channel-54": 41439, + "item-properties-set-take-channel-mode-to-mono-channel-55": 41440, + "item-properties-set-take-channel-mode-to-mono-channel-56": 41441, + "item-properties-set-take-channel-mode-to-mono-channel-57": 41442, + "item-properties-set-take-channel-mode-to-mono-channel-58": 41443, + "item-properties-set-take-channel-mode-to-mono-channel-59": 41444, + "item-properties-set-take-channel-mode-to-mono-channel-60": 41445, + "item-properties-set-take-channel-mode-to-mono-channel-61": 41446, + "item-properties-set-take-channel-mode-to-mono-channel-62": 41447, + "item-properties-set-take-channel-mode-to-mono-channel-63": 41448, + "item-properties-set-take-channel-mode-to-mono-channel-64": 41449, + "item-properties-set-take-channel-mode-to-mono-downmix": 40178, + "item-properties-set-take-channel-mode-to-mono-left": 40179, + "item-properties-set-take-channel-mode-to-mono-right": 40180, + "item-properties-set-take-channel-mode-to-normal": 40176, + "item-properties-set-take-channel-mode-to-reverse-stereo": 40177, + "item-properties-set-take-channel-mode-to-stereo-channels-01-02": 41450, + "item-properties-set-take-channel-mode-to-stereo-channels-02-03": 41451, + "item-properties-set-take-channel-mode-to-stereo-channels-03-04": 41452, + "item-properties-set-take-channel-mode-to-stereo-channels-04-05": 41453, + "item-properties-set-take-channel-mode-to-stereo-channels-05-06": 41454, + "item-properties-set-take-channel-mode-to-stereo-channels-06-07": 41455, + "item-properties-set-take-channel-mode-to-stereo-channels-07-08": 41456, + "item-properties-set-take-channel-mode-to-stereo-channels-08-09": 41457, + "item-properties-set-take-channel-mode-to-stereo-channels-09-10": 41458, + "item-properties-set-take-channel-mode-to-stereo-channels-10-11": 41459, + "item-properties-set-take-channel-mode-to-stereo-channels-11-12": 41460, + "item-properties-set-take-channel-mode-to-stereo-channels-12-13": 41461, + "item-properties-set-take-channel-mode-to-stereo-channels-13-14": 41462, + "item-properties-set-take-channel-mode-to-stereo-channels-14-15": 41463, + "item-properties-set-take-channel-mode-to-stereo-channels-15-16": 41464, + "item-properties-set-take-channel-mode-to-stereo-channels-16-17": 41465, + "item-properties-set-take-channel-mode-to-stereo-channels-17-18": 41466, + "item-properties-set-take-channel-mode-to-stereo-channels-18-19": 41467, + "item-properties-set-take-channel-mode-to-stereo-channels-19-20": 41468, + "item-properties-set-take-channel-mode-to-stereo-channels-20-21": 41469, + "item-properties-set-take-channel-mode-to-stereo-channels-21-22": 41470, + "item-properties-set-take-channel-mode-to-stereo-channels-22-23": 41471, + "item-properties-set-take-channel-mode-to-stereo-channels-23-24": 41472, + "item-properties-set-take-channel-mode-to-stereo-channels-24-25": 41473, + "item-properties-set-take-channel-mode-to-stereo-channels-25-26": 41474, + "item-properties-set-take-channel-mode-to-stereo-channels-26-27": 41475, + "item-properties-set-take-channel-mode-to-stereo-channels-27-28": 41476, + "item-properties-set-take-channel-mode-to-stereo-channels-28-29": 41477, + "item-properties-set-take-channel-mode-to-stereo-channels-29-30": 41478, + "item-properties-set-take-channel-mode-to-stereo-channels-30-31": 41479, + "item-properties-set-take-channel-mode-to-stereo-channels-31-32": 41480, + "item-properties-set-take-channel-mode-to-stereo-channels-32-33": 41481, + "item-properties-set-take-channel-mode-to-stereo-channels-33-34": 41482, + "item-properties-set-take-channel-mode-to-stereo-channels-34-35": 41483, + "item-properties-set-take-channel-mode-to-stereo-channels-35-36": 41484, + "item-properties-set-take-channel-mode-to-stereo-channels-36-37": 41485, + "item-properties-set-take-channel-mode-to-stereo-channels-37-38": 41486, + "item-properties-set-take-channel-mode-to-stereo-channels-38-39": 41487, + "item-properties-set-take-channel-mode-to-stereo-channels-39-40": 41488, + "item-properties-set-take-channel-mode-to-stereo-channels-40-41": 41489, + "item-properties-set-take-channel-mode-to-stereo-channels-41-42": 41490, + "item-properties-set-take-channel-mode-to-stereo-channels-42-43": 41491, + "item-properties-set-take-channel-mode-to-stereo-channels-43-44": 41492, + "item-properties-set-take-channel-mode-to-stereo-channels-44-45": 41493, + "item-properties-set-take-channel-mode-to-stereo-channels-45-46": 41494, + "item-properties-set-take-channel-mode-to-stereo-channels-46-47": 41495, + "item-properties-set-take-channel-mode-to-stereo-channels-47-48": 41496, + "item-properties-set-take-channel-mode-to-stereo-channels-48-49": 41497, + "item-properties-set-take-channel-mode-to-stereo-channels-49-50": 41498, + "item-properties-set-take-channel-mode-to-stereo-channels-50-51": 41499, + "item-properties-set-take-channel-mode-to-stereo-channels-51-52": 41500, + "item-properties-set-take-channel-mode-to-stereo-channels-52-53": 41501, + "item-properties-set-take-channel-mode-to-stereo-channels-53-54": 41502, + "item-properties-set-take-channel-mode-to-stereo-channels-54-55": 41503, + "item-properties-set-take-channel-mode-to-stereo-channels-55-56": 41504, + "item-properties-set-take-channel-mode-to-stereo-channels-56-57": 41505, + "item-properties-set-take-channel-mode-to-stereo-channels-57-58": 41506, + "item-properties-set-take-channel-mode-to-stereo-channels-58-59": 41507, + "item-properties-set-take-channel-mode-to-stereo-channels-59-60": 41508, + "item-properties-set-take-channel-mode-to-stereo-channels-60-61": 41509, + "item-properties-set-take-channel-mode-to-stereo-channels-61-62": 41510, + "item-properties-set-take-channel-mode-to-stereo-channels-62-63": 41511, + "item-properties-set-take-channel-mode-to-stereo-channels-63-64": 41512, + "item-properties-set-take-preserve-pitch": 40795, + "item-properties-show-media-item-source-properties": 40011, + "item-properties-show-media-item-take-properties": 40009, + "item-properties-solo": 41559, + "item-properties-solo-exclusive": 41558, + "item-properties-toggle-item-play-all-takes": 40437, + "item-properties-toggle-items-tracks-mute-depending-on-focus": 40183, + "item-properties-toggle-lock": 40687, + "item-properties-toggle-lock-to-active-take-toggle-mouse-click-changes-active-take": 41339, + "item-properties-toggle-mute": 40175, + "item-properties-toggle-polarity-phase-for-active-take": 40181, + "item-properties-toggle-show-media-item-take-properties": 41589, + "item-properties-toggle-solo": 41557, + "item-properties-toggle-solo-exclusive": 41561, + "item-properties-toggle-take-preserve-pitch": 40566, + "item-properties-toggle-take-reverse": 41051, + "item-properties-unlock": 40689, + "item-properties-unlock-takes-mouse-click-will-change-active-take": 41341, + "item-properties-unmute": 40720, + "item-properties-unmute-all-items": 40870, + "item-properties-unsolo": 41560, + "item-properties-unsolo-all": 41185, + "item-quantize-item-positions-to-grid": 40316, + "item-quick-add-take-marker-at-mouse-position": 42391, + "item-quick-add-take-marker-at-play-position-or-edit-cursor": 42390, + "item-remove-active-take-from-midi-source-data-pool-unpool": 41613, + "item-remove-active-takes-from-ara-edit-pool-unpool": 42606, + "item-remove-all-empty-takes": 41348, + "item-remove-all-stretch-markers": 41844, + "item-remove-all-stretch-markers-in-time-selection": 41845, + "item-remove-content-trim-behind-items": 40930, + "item-remove-fade-in": 41191, + "item-remove-fade-in-and-fade-out": 41193, + "item-remove-fade-out": 41192, + "item-remove-fx-for-item-take": 40640, + "item-remove-items": 40006, + "item-remove-selected-area-of-items": 40312, + "item-remove-stretch-marker-at-current-position": 41859, + "item-remove-the-empty-take-after-the-active-take": 41350, + "item-remove-the-empty-take-before-the-active-take": 41349, + "item-render-items-to-new-take": 41999, + "item-render-items-to-new-take-preserve-source-type": 40601, + "item-reorder-adjacent-items-randomly": 41638, + "item-reset-items-volume-to-plus-0db": 41923, + "item-reset-stretch-marker-at-current-position": 41989, + "item-return-active-takes-to-ara-edit-pool-re-pool": 42609, + "item-reverse-items-to-new-take": 40270, + "item-rotate-takes-backward": 41354, + "item-rotate-takes-forward": 41353, + "item-select-all-items": 40182, + "item-select-all-items-in-current-time-selection": 40717, + "item-select-all-items-in-track": 40421, + "item-select-all-items-on-selected-tracks-in-current-time-selection": 40718, + "item-select-all-other-media-items-that-share-pooled-ara-edits-with-selected-items": 42607, + "item-select-all-other-media-items-that-share-pooled-midi-source-data-with-selected-items": 41611, + "item-select-all-other-media-items-that-share-the-same-source-media-as-selected-items": 42608, + "item-select-item-under-mouse-cursor": 40528, + "item-select-item-under-mouse-cursor-leaving-other-items-selected": 40529, + "item-select-next-adjacent-non-overlapping-item": 41127, + "item-select-previous-adjacent-non-overlapping-item": 41128, + "item-set-all-media-item-takes-that-share-the-same-source-media-to-the-same-random-color": 42693, + "item-set-all-media-offline": 40100, + "item-set-all-media-online": 40101, + "item-set-crossfade-shape-to-type-1-linear-equal-gain": 41528, + "item-set-crossfade-shape-to-type-2-equal-power": 41529, + "item-set-crossfade-shape-to-type-3": 41530, + "item-set-crossfade-shape-to-type-4": 41531, + "item-set-crossfade-shape-to-type-5": 41532, + "item-set-crossfade-shape-to-type-6": 41533, + "item-set-crossfade-shape-to-type-7": 41838, + "item-set-cursor-to-next-take-marker-in-selected-items": 42394, + "item-set-cursor-to-previous-take-marker-in-selected-items": 42393, + "item-set-fade-in-shape-to-type-1-linear": 41514, + "item-set-fade-in-shape-to-type-2": 41515, + "item-set-fade-in-shape-to-type-3": 41516, + "item-set-fade-in-shape-to-type-4": 41517, + "item-set-fade-in-shape-to-type-5": 41518, + "item-set-fade-in-shape-to-type-6": 41519, + "item-set-fade-in-shape-to-type-7": 41836, + "item-set-fade-out-shape-to-type-1-linear": 41521, + "item-set-fade-out-shape-to-type-2": 41522, + "item-set-fade-out-shape-to-type-3": 41523, + "item-set-fade-out-shape-to-type-4": 41524, + "item-set-fade-out-shape-to-type-5": 41525, + "item-set-fade-out-shape-to-type-6": 41526, + "item-set-fade-out-shape-to-type-7": 41837, + "item-set-focus-to-item-under-mouse-cursor": 40911, + "item-set-item-end-to-cursor": 40611, + "item-set-item-end-to-source-media-end": 40612, + "item-set-item-ends-to-start-of-next-item": 41639, + "item-set-item-mix-behavior-to-always-mix": 40919, + "item-set-item-mix-behavior-to-always-replace": 40921, + "item-set-item-mix-behavior-to-enclosed-items-replace-enclosing-items": 40918, + "item-set-item-mix-behavior-to-project-default": 40922, + "item-set-item-name-from-active-take-filename": 41858, + "item-set-item-start-end-to-source-media-start-end": 42228, + "item-set-item-start-to-source-media-start": 42229, + "item-set-selected-media-online": 40439, + "item-set-selected-media-temporarily-offline": 40440, + "item-set-snap-offset-for-item-under-mouse-to-mouse-position": 42476, + "item-set-snap-offset-to-cursor": 40541, + "item-set-snap-offset-to-nearest-grid-line": 40542, + "item-set-to-custom-color": 40704, + "item-set-to-default-color": 40707, + "item-set-to-one-random-color": 40706, + "item-set-to-random-colors": 40705, + "item-show-fx-chain-for-item-take": 40638, + "item-show-notes-for-items": 40850, + "item-shrink-to-first-and-last-media-cues": 40735, + "item-shrink-to-first-media-cue": 40733, + "item-shrink-to-last-media-cue": 40734, + "item-snap-items-left": 41182, + "item-snap-items-right": 41183, + "item-snap-items-to-nearest-snap-point": 41184, + "item-snap-stretch-markers-in-time-selection-to-grid": 41847, + "item-snap-stretch-markers-to-grid": 41846, + "item-solo-active-take-of-multitake-item-within-time-selection": 40856, + "item-split-at-media-cues": 40732, + "item-split-at-previous-zero-crossing": 40792, + "item-split-at-take-markers-active-take-only": 43168, + "item-split-at-take-markers-all-takes": 43171, + "item-split-at-take-markers-for-all-items-on-track-active-takes-only": 43170, + "item-split-at-take-markers-for-all-items-on-track-all-takes": 43173, + "item-split-at-take-markers-for-item-under-mouse-active-take-only": 43169, + "item-split-at-take-markers-for-item-under-mouse-all-takes": 43172, + "item-split-item-under-mouse-cursor-ignore-grouping-no-change-selection": 40746, + "item-split-item-under-mouse-cursor-ignore-grouping-select-left": 43180, + "item-split-item-under-mouse-cursor-ignore-grouping-select-right": 40748, + "item-split-item-under-mouse-cursor-no-change-selection": 42575, + "item-split-item-under-mouse-cursor-select-left": 43179, + "item-split-item-under-mouse-cursor-select-right": 42577, + "item-split-items-at-edit-cursor-no-change-selection": 40757, + "item-split-items-at-edit-cursor-select-left": 43178, + "item-split-items-at-edit-cursor-select-right": 40759, + "item-split-items-at-edit-or-play-cursor-ignore-grouping-select-right": 40186, + "item-split-items-at-edit-or-play-cursor-select-right": 40012, + "item-split-items-at-end-of-fade-in-unless-crossfaded": 41839, + "item-split-items-at-play-cursor-select-right": 40196, + "item-split-items-at-project-markers": 40931, + "item-split-items-at-start-of-fade-out-unless-crossfaded": 41840, + "item-split-items-at-time-selection-or-razor-edit": 40061, + "item-split-items-at-timeline-grid": 40932, + "item-toggle-enable-disable-default-fadein-fadeout": 41194, + "item-toggle-force-inactive-take-media-offline": 42357, + "item-toggle-force-media-offline": 42356, + "item-toggle-selection-of-item-under-mouse-cursor": 40530, + "item-trim-items-left-of-cursor": 40511, + "item-trim-items-right-of-cursor": 40512, + "item-trim-items-to-selected-area": 40508, + "item-unselect-clear-selection-of-all-items": 40289, + "item-up-rank-active-take-or-last-recording-pass": 42680, + "item-up-rank-take-marker-at-1-second-before-play-position-or-at-edit-cursor-if-not-playing-back": 43174, + "item-up-rank-take-marker-at-2-seconds-before-play-position-or-at-edit-cursor-if-not-playing-back": 43176, + "item-up-rank-take-marker-at-mouse-position": 43159, + "item-up-rank-take-marker-at-play-position-or-edit-cursor": 43157, + "item-up-rank-take-marker-at-time-selection": 43183, + "item-up-rank-take-or-comp-area-under-mouse": 43155, + "items-set-all-take-fx-offline-for-selected-media-items": 42353, + "items-set-all-take-fx-online-for-selected-media-items": 42354, + "items-set-group-color-for-selected-items": 43654, + "items-set-group-name-for-selected-items": 43656, + "items-set-group-to-random-color-for-selected-items": 43655, + "items-set-take-fx-offline-for-all-inactive-takes-in-the-project": 43691, + "items-set-take-fx-online-for-all-active-takes-in-the-project": 43692, + "items-set-take-fx-online-if-active-offline-if-inactive-for-all-takes-in-the-project": 43693, + "layout-apply-custom-layout-number-01": 41696, + "layout-apply-custom-layout-number-02": 41697, + "layout-apply-custom-layout-number-03": 41698, + "layout-apply-custom-layout-number-04": 41699, + "layout-apply-custom-layout-number-05": 41700, + "layout-apply-custom-layout-number-06": 41701, + "layout-apply-custom-layout-number-07": 41702, + "layout-apply-custom-layout-number-08": 41703, + "layout-apply-custom-layout-number-09": 41704, + "layout-apply-custom-layout-number-10": 41705, + "layout-apply-custom-layout-number-11": 41706, + "layout-apply-custom-layout-number-12": 41707, + "layout-apply-custom-layout-number-13": 41708, + "layout-apply-custom-layout-number-14": 41709, + "layout-apply-custom-layout-number-15": 41710, + "layout-apply-custom-layout-number-16": 41711, + "layout-apply-custom-layout-number-17": 41712, + "layout-apply-custom-layout-number-18": 41713, + "layout-apply-custom-layout-number-19": 41714, + "layout-apply-custom-layout-number-20": 41715, + "layout-default-layout": 48500, + "locking-clear-all-lock-modes": 40567, + "locking-clear-full-item-locking-mode": 40575, + "locking-clear-item-edges-locking-mode": 40596, + "locking-clear-item-fade-volume-handles-locking-mode": 40599, + "locking-clear-item-stretch-marker-locking-mode": 41853, + "locking-clear-left-right-item-locking-mode": 40578, + "locking-clear-loop-points-locking-mode": 40628, + "locking-clear-marker-locking-mode": 40590, + "locking-clear-region-locking-mode": 40587, + "locking-clear-take-envelope-locking-mode": 41850, + "locking-clear-time-selection-locking-mode": 40572, + "locking-clear-time-signature-marker-locking-mode": 40593, + "locking-clear-track-envelope-locking-mode": 40584, + "locking-clear-up-down-item-locking-mode": 40581, + "locking-disable-locking": 40570, + "locking-enable-locking": 40569, + "locking-set-all-lock-modes": 40568, + "locking-set-full-item-locking-mode": 40574, + "locking-set-item-edges-locking-mode": 40595, + "locking-set-item-fade-volume-handles-locking-mode": 40598, + "locking-set-item-stretch-marker-locking-mode": 41852, + "locking-set-left-right-item-locking-mode": 40577, + "locking-set-loop-points-locking-mode": 40627, + "locking-set-marker-locking-mode": 40589, + "locking-set-region-locking-mode": 40586, + "locking-set-take-envelope-locking-mode": 41849, + "locking-set-time-selection-locking-mode": 40571, + "locking-set-time-signature-marker-locking-mode": 40592, + "locking-set-track-envelope-locking-mode": 40583, + "locking-set-up-down-item-locking-mode": 40580, + "locking-toggle-full-item-locking-mode": 40576, + "locking-toggle-item-edges-locking-mode": 40597, + "locking-toggle-item-fade-volume-handles-locking-mode": 40600, + "locking-toggle-item-stretch-marker-locking-mode": 41854, + "locking-toggle-left-right-item-locking-mode": 40579, + "locking-toggle-loop-points-locking-mode": 40629, + "locking-toggle-marker-locking-mode": 40591, + "locking-toggle-region-locking-mode": 40588, + "locking-toggle-take-envelope-locking-mode": 41851, + "locking-toggle-time-selection-locking-mode": 40573, + "locking-toggle-time-signature-marker-locking-mode": 40594, + "locking-toggle-track-envelope-locking-mode": 40585, + "locking-toggle-up-down-item-locking-mode": 40582, + "loop-points-double-loop-length": 40722, + "loop-points-halve-loop-length": 40721, + "loop-points-move-end-point-to-cursor-preserve-length": 43211, + "loop-points-move-start-point-to-cursor-preserve-length": 43210, + "loop-points-remove-unselect-loop-point-selection": 40634, + "loop-points-remove-unselect-loop-points-if-not-linked-to-time-selection-ignoring-lock-state": 40624, + "loop-points-set-end-point": 40223, + "loop-points-set-loop-points-to-items": 41039, + "loop-points-set-start-point": 40222, + "main-action-section-clear-any-override": 24800, + "main-action-section-momentarily-set-override-to-alt-1": 24853, + "main-action-section-momentarily-set-override-to-alt-10": 24862, + "main-action-section-momentarily-set-override-to-alt-11": 24863, + "main-action-section-momentarily-set-override-to-alt-12": 24864, + "main-action-section-momentarily-set-override-to-alt-13": 24865, + "main-action-section-momentarily-set-override-to-alt-14": 24866, + "main-action-section-momentarily-set-override-to-alt-15": 24867, + "main-action-section-momentarily-set-override-to-alt-16": 24868, + "main-action-section-momentarily-set-override-to-alt-2": 24854, + "main-action-section-momentarily-set-override-to-alt-3": 24855, + "main-action-section-momentarily-set-override-to-alt-4": 24856, + "main-action-section-momentarily-set-override-to-alt-5": 24857, + "main-action-section-momentarily-set-override-to-alt-6": 24858, + "main-action-section-momentarily-set-override-to-alt-7": 24859, + "main-action-section-momentarily-set-override-to-alt-8": 24860, + "main-action-section-momentarily-set-override-to-alt-9": 24861, + "main-action-section-momentarily-set-override-to-default": 24851, + "main-action-section-momentarily-set-override-to-recording": 24852, + "main-action-section-set-override-to-default": 24801, + "main-action-section-toggle-override-to-alt-1": 24803, + "main-action-section-toggle-override-to-alt-10": 24812, + "main-action-section-toggle-override-to-alt-11": 24813, + "main-action-section-toggle-override-to-alt-12": 24814, + "main-action-section-toggle-override-to-alt-13": 24815, + "main-action-section-toggle-override-to-alt-14": 24816, + "main-action-section-toggle-override-to-alt-15": 24817, + "main-action-section-toggle-override-to-alt-16": 24818, + "main-action-section-toggle-override-to-alt-2": 24804, + "main-action-section-toggle-override-to-alt-3": 24805, + "main-action-section-toggle-override-to-alt-4": 24806, + "main-action-section-toggle-override-to-alt-5": 24807, + "main-action-section-toggle-override-to-alt-6": 24808, + "main-action-section-toggle-override-to-alt-7": 24809, + "main-action-section-toggle-override-to-alt-8": 24810, + "main-action-section-toggle-override-to-alt-9": 24811, + "main-action-section-toggle-override-to-recording": 24802, + "markers-add-move-marker-1-to-play-edit-cursor": 40657, + "markers-add-move-marker-10-to-play-edit-cursor": 40656, + "markers-add-move-marker-2-to-play-edit-cursor": 40658, + "markers-add-move-marker-3-to-play-edit-cursor": 40659, + "markers-add-move-marker-4-to-play-edit-cursor": 40660, + "markers-add-move-marker-5-to-play-edit-cursor": 40661, + "markers-add-move-marker-6-to-play-edit-cursor": 40662, + "markers-add-move-marker-7-to-play-edit-cursor": 40663, + "markers-add-move-marker-8-to-play-edit-cursor": 40664, + "markers-add-move-marker-9-to-play-edit-cursor": 40665, + "markers-change-color-for-marker-near-cursor": 40304, + "markers-change-color-for-region-near-cursor": 40305, + "markers-delete-marker-near-cursor": 40613, + "markers-delete-region-near-cursor": 40615, + "markers-delete-time-signature-marker-near-cursor": 40617, + "markers-edit-marker-near-cursor": 40614, + "markers-edit-region-near-cursor": 40616, + "markers-edit-time-signature-marker-near-cursor": 40618, + "markers-go-to-marker-01": 40161, + "markers-go-to-marker-02": 40162, + "markers-go-to-marker-03": 40163, + "markers-go-to-marker-04": 40164, + "markers-go-to-marker-05": 40165, + "markers-go-to-marker-06": 40166, + "markers-go-to-marker-07": 40167, + "markers-go-to-marker-08": 40168, + "markers-go-to-marker-09": 40169, + "markers-go-to-marker-10": 40160, + "markers-go-to-marker-11": 41251, + "markers-go-to-marker-12": 41252, + "markers-go-to-marker-13": 41253, + "markers-go-to-marker-14": 41254, + "markers-go-to-marker-15": 41255, + "markers-go-to-marker-16": 41256, + "markers-go-to-marker-17": 41257, + "markers-go-to-marker-18": 41258, + "markers-go-to-marker-19": 41259, + "markers-go-to-marker-20": 41260, + "markers-go-to-marker-21": 41261, + "markers-go-to-marker-22": 41262, + "markers-go-to-marker-23": 41263, + "markers-go-to-marker-24": 41264, + "markers-go-to-marker-25": 41265, + "markers-go-to-marker-26": 41266, + "markers-go-to-marker-27": 41267, + "markers-go-to-marker-28": 41268, + "markers-go-to-marker-29": 41269, + "markers-go-to-marker-30": 41270, + "markers-go-to-next-marker-project-end": 40173, + "markers-go-to-previous-marker-project-start": 40172, + "markers-insert-and-or-edit-marker-at-current-position": 40171, + "markers-insert-marker-at-current-position": 40157, + "markers-insert-region-from-selected-items": 40348, + "markers-insert-region-from-selected-items-and-edit": 40393, + "markers-insert-region-from-time-selection": 40174, + "markers-insert-region-from-time-selection-and-edit": 40306, + "markers-insert-separate-regions-for-each-selected-item": 41664, + "markers-quantize-tempo-markers-to-midi-resolution": 40925, + "markers-regions-export-markers-regions-to-file": 41758, + "markers-regions-import-markers-regions-from-file-merge-with-existing": 41760, + "markers-regions-import-markers-regions-from-file-replace-existing": 41759, + "markers-remove-all-markers-from-time-selection": 40420, + "markers-renumber-all-markers-and-regions-in-timeline-order": 40898, + "markers-set-marker-near-cursor-to-default-color": 41897, + "markers-set-region-near-cursor-to-default-color": 41896, + "master-track-toggle-stereo-mono-l-plus-r": 40917, + "media-explorer-show-hide-media-explorer": 50124, + "media-item-add-stretch-markers-at-project-tempo-changes": 42377, + "media-item-clear-and-recalculate-auto-stretch-at-project-tempo-changes": 42376, + "menu-customize": 1528, + "midi-clear-retroactive-midi-history": 42378, + "midi-insert-all-available-retroactively-recorded-midi-for-armed-and-selected-tracks": 40212, + "midi-insert-all-available-retroactively-recorded-midi-for-armed-tracks": 40213, + "midi-insert-recent-retroactively-recorded-midi-for-armed-and-selected-tracks": 40211, + "midi-insert-recent-retroactively-recorded-midi-for-armed-tracks": 40686, + "midi-reload-track-support-data-bank-program-files-notation-etc-for-all-midi-items-on-selected-tracks": 42465, + "minimize-reaper": 41171, + "mixer-clickable-icon-for-folder-tracks-to-show-hide-children": 41154, + "mixer-group-fx-parameters-with-their-inserts": 41829, + "mixer-group-sends-with-before-after-fx-inserts": 40267, + "mixer-master-track-visible": 41209, + "mixer-toggle-autoarrange": 41146, + "mixer-toggle-docking-in-docker": 40083, + "mixer-toggle-folder-tracks-grouping-to-left": 40081, + "mixer-toggle-master-track-in-docked-window": 41610, + "mixer-toggle-master-track-in-separate-window": 41636, + "mixer-toggle-scroll-view-when-tracks-activated": 40221, + "mixer-toggle-show-folder-tracks-in-mixer": 40080, + "mixer-toggle-show-fx-inserts-when-size-permits": 40549, + "mixer-toggle-show-fx-parameters-when-size-permits": 40910, + "mixer-toggle-show-icons-for-the-last-track-in-a-folder": 41153, + "mixer-toggle-show-master-track-on-right-side": 40389, + "mixer-toggle-show-multiple-rows-even-when-space-to-fit-tracks-in-less-rows": 40372, + "mixer-toggle-show-multiple-rows-when-space": 40371, + "mixer-toggle-show-normal-top-level-tracks-in-mixer": 40082, + "mixer-toggle-show-sends-when-size-permits": 40557, + "mixer-toggle-show-track-icons-in-mixer": 40903, + "mixer-toggle-show-tracks-in-folders-in-mixer": 40199, + "mixer-toggle-tracks-with-receives-grouping-to-left": 40198, + "mixer-toggle-tracks-with-receives-in-mixer": 40197, + "monitoring-fx-toggle-bypass": 41884, + "mouse-modifiers-clear-arrange-view-override-mouse-modifiers": 42621, + "mouse-modifiers-set-arrange-view-override-mouse-modifiers-a": 42615, + "mouse-modifiers-set-arrange-view-override-mouse-modifiers-a-until-next-mouseup": 42622, + "mouse-modifiers-set-arrange-view-override-mouse-modifiers-b": 42617, + "mouse-modifiers-set-arrange-view-override-mouse-modifiers-b-until-next-mouseup": 42623, + "mouse-modifiers-set-arrange-view-override-mouse-modifiers-c": 42619, + "mouse-modifiers-set-arrange-view-override-mouse-modifiers-c-until-next-mouseup": 42624, + "mouse-modifiers-set-arrange-view-override-mouse-modifiers-d": 42632, + "mouse-modifiers-set-arrange-view-override-mouse-modifiers-d-until-next-mouseup": 42634, + "mouse-modifiers-swap-arrange-view-right-drag-modifiers-for-marquee-item-selection-and-select-razor-edit-area": 42401, + "mouse-modifiers-toggle-arrange-view-override-mouse-modifiers-a": 42616, + "mouse-modifiers-toggle-arrange-view-override-mouse-modifiers-b": 42618, + "mouse-modifiers-toggle-arrange-view-override-mouse-modifiers-c": 42620, + "mouse-modifiers-toggle-arrange-view-override-mouse-modifiers-d": 42633, + "move-comp-area-at-mouse-down-or-switch-items-to-next-take": 42611, + "move-comp-area-at-mouse-up-or-switch-items-to-previous-take": 42612, + "move-edit-cursor-back-one-beat": 41045, + "move-edit-cursor-back-one-beat-no-seek": 40842, + "move-edit-cursor-back-one-measure": 41043, + "move-edit-cursor-back-one-measure-no-seek": 40840, + "move-edit-cursor-forward-one-beat": 41044, + "move-edit-cursor-forward-one-beat-no-seek": 40841, + "move-edit-cursor-forward-one-measure": 41042, + "move-edit-cursor-forward-one-measure-no-seek": 40839, + "move-edit-cursor-to-left-edge-of-visible-arrange-view": 42964, + "move-edit-cursor-to-nearest-zero-crossing-in-items": 41995, + "move-edit-cursor-to-next-cue-in-items": 40741, + "move-edit-cursor-to-next-tempo-or-time-signature-change": 41821, + "move-edit-cursor-to-next-zero-crossing-in-items": 40791, + "move-edit-cursor-to-previous-cue-in-items": 40742, + "move-edit-cursor-to-previous-tempo-or-time-signature-change": 41820, + "move-edit-cursor-to-previous-zero-crossing-in-items": 40790, + "move-edit-cursor-to-start-of-current-previous-beat": 40230, + "move-edit-cursor-to-start-of-current-previous-measure": 41041, + "move-edit-cursor-to-start-of-current-previous-measure-no-seek": 40838, + "move-edit-cursor-to-start-of-next-beat": 40231, + "move-edit-cursor-to-start-of-next-measure": 41040, + "move-edit-cursor-to-start-of-next-measure-no-seek": 40837, + "new-project-tab": 40859, + "new-project-tab-ignore-default-template": 41929, + "no-op-no-action": 65535, + "offset-track-template-items-by-edit-cursor": 41722, + "open-selected-item-source-media-in-explorer-finder": 42411, + "open-selected-item-source-media-in-media-explorer": 41623, + "options-add-edge-points-when-moving-envelope-points-with-items": 40648, + "options-add-edge-points-when-moving-multiple-envelope-points": 42030, + "options-add-envelope-edge-points-when-ripple-editing-or-inserting-time": 40649, + "options-allow-drag-drop-media-import-to-target-the-top-part-of-a-track-to-insert-a-new-track-to-receive-the-media": 42477, + "options-allow-selecting-empty-takes": 41355, + "options-always-record-to-automation-items": 42212, + "options-always-trim-content-behind-razor-edits-otherwise-follow-media-item-editing-preferences": 42421, + "options-auto-crossfade-media-items-when-editing": 40041, + "options-automatically-insert-automation-item-when-activating-envelope-that-is-bypassed-outside-of-automation-items-and-not-displayed-in-envelope-lane": 42220, + "options-automation-item-baseline-amplitude-edits-affect-pooled-copies": 42194, + "options-automation-items-connect-to-the-underlying-envelope-on-both-sides": 42205, + "options-automation-items-connect-to-the-underlying-envelope-on-the-right-side": 42204, + "options-automation-items-do-not-connect-to-the-underlying-envelope": 42203, + "options-avoid-including-empty-track-space-in-comp-areas": 42795, + "options-bypass-underlying-envelopes-outside-of-automation-items": 42213, + "options-chase-midi-note-on-cc-pc-pitch-in-project-playback": 41992, + "options-chase-non-fx-envelopes-to-automation-items-when-underlying-envelope-is-bypassed": 42344, + "options-crossfade-center-when-splitting": 43193, + "options-crossfade-left-when-splitting": 43191, + "options-crossfade-right-when-splitting": 43192, + "options-cycle-ripple-editing-mode": 1155, + "options-cycle-split-options-crossfade-left-crossfade-center-crossfade-right-no-crossfade": 43196, + "options-cycle-through-editing-modes-auto-crossfade-off-auto-crossfade-on-trim-content-behind-media-items": 41116, + "options-disable-auto-crossfades": 41119, + "options-disable-crossfade-on-split-disregard-toolbar-auto-crossfade-button": 40928, + "options-disable-display-group-names-colors-in-arrange-view": 43653, + "options-disable-metronome": 41746, + "options-disable-trim-content-behind-media-items-when-editing": 41121, + "options-do-not-change-comp-area-source-lane-when-clicking-empty-track-space": 42794, + "options-do-not-display-tracks-in-folder-when-folder-is-fully-collapsed": 42699, + "options-enable-auto-crossfades": 41118, + "options-enable-crossfade-on-split-disregard-toolbar-auto-crossfade-button": 40927, + "options-enable-display-group-names-colors-in-arrange-view": 43652, + "options-enable-metronome": 41745, + "options-enable-trim-content-behind-media-items-when-editing": 41120, + "options-envelope-point-selection-follows-time-selection": 41576, + "options-limit-media-item-edge-edits-to-source-media-content-for-unlooped-media-items": 42218, + "options-loop-new-automation-items-by-default": 42195, + "options-loop-recording-always-adds-takes": 40114, + "options-mouse-modifier-preferences": 41356, + "options-move-edit-cursor-to-end-of-recording-when-recording-ends": 40300, + "options-move-edit-cursor-to-start-of-time-selection-when-time-selection-changes": 40276, + "options-move-envelope-points-with-media-items": 40070, + "options-move-take-envelope-points-when-moving-media-item-contents": 43636, + "options-new-recording-adds-lanes-in-layers-multiple-lanes-play-at-once": 43151, + "options-new-recording-adds-lanes-new-lanes-play-exclusively": 43152, + "options-new-recording-adds-media-items-in-layers": 42677, + "options-new-recording-does-not-add-lanes": 43153, + "options-new-recording-splits-existing-items-and-adds-takes-default": 41330, + "options-new-recording-trims-existing-items-tape-mode": 41186, + "options-offset-overlapping-media-items-vertically": 40507, + "options-pre-fader-track-metering": 42076, + "options-preferences": 40016, + "options-preserve-trailing-values-when-recording-automation": 42640, + "options-prevent-mouse-edits-of-single-envelope-points-from-moving-past-other-envelope-points": 42202, + "options-razor-edits-in-media-item-lane-affect-all-track-envelopes": 42459, + "options-razor-edits-on-collapsed-fixed-lane-tracks-affect-all-lanes": 42601, + "options-razor-edits-on-small-fixed-lane-tracks-affect-all-lanes": 43097, + "options-reduce-envelope-data-when-recording-or-drawing-automation": 40650, + "options-respect-toolbar-auto-crossfade-button-on-split": 43195, + "options-ripple-all-tracks-when-ripple-is-enabled": 43469, + "options-ripple-edit-all-affects-envelopes-on-all-tracks": 43567, + "options-ripple-edit-all-affects-tempo-map": 42011, + "options-ripple-edit-when-editing-media-item-edges": 43475, + "options-ripple-per-track-affects-each-track-lane-separately": 43467, + "options-ripple-per-track-when-ripple-is-enabled": 43468, + "options-select-takes-for-all-selected-items-when-clicking-take": 40249, + "options-selecting-one-grouped-item-selects-group": 41156, + "options-set-loop-points-linked-to-time-selection": 40749, + "options-set-metronome-speed-to-0-5x": 43703, + "options-set-metronome-speed-to-1x": 42456, + "options-set-metronome-speed-to-2x": 42457, + "options-set-metronome-speed-to-4x": 42458, + "options-set-metronome-volume-midi-cc-osc-only": 999, + "options-show-all-takes-when-room": 40435, + "options-show-empty-takes-align-takes-by-recording-pass": 41346, + "options-show-fx-inserts-in-tcp-when-size-permits": 40302, + "options-show-lock-settings": 40277, + "options-show-metronome-pre-roll-settings": 40363, + "options-show-peak-value-tooltips-on-media-items-and-loudness-if-peaks-are-configured-to-calculate-it": 43149, + "options-show-sends-in-tcp-when-size-permits": 40677, + "options-show-snap-grid-settings": 40071, + "options-show-theme-adjuster": 42234, + "options-show-theme-color-controls": 42392, + "options-show-tooltips-on-media-items-and-envelopes": 41344, + "options-solo-in-front": 40745, + "options-solo-via-dedicated-solo-bus-preference-master-outputs-can-be-set-to-bypass-solo-bus": 43631, + "options-switch-to-a-random-color-theme": 40383, + "options-switch-to-next-color-theme": 40381, + "options-switch-to-previous-color-theme": 40382, + "options-toggle-always-on-top": 40239, + "options-toggle-auto-fade-auto-crossfade-when-comping-in-fixed-lanes": 42631, + "options-toggle-crossfade-on-split-disregard-toolbar-auto-crossfade-button": 40912, + "options-toggle-display-group-names-colors-in-arrange-view": 43651, + "options-toggle-editing-active-take-source-start-offset-slip-editing-adjusts-all-takes": 41338, + "options-toggle-grid-lines": 40145, + "options-toggle-item-grouping-and-track-media-razor-edit-grouping": 1156, + "options-toggle-locking": 1135, + "options-toggle-loop-points-linked-to-time-selection": 40621, + "options-toggle-metronome": 40364, + "options-toggle-new-recording-adds-lanes-in-layers-multiple-lanes-play-at-once": 41329, + "options-toggle-new-recording-adds-lanes-new-lanes-play-exclusively": 42702, + "options-toggle-pooled-ghost-midi-source-data-when-copying-media-items": 41071, + "options-toggle-running-fx-when-playback-is-stopped": 41583, + "options-toggle-smooth-seek-see-preferences-audio-seeking": 40390, + "options-toggle-snapping": 1157, + "options-track-media-razor-edit-grouping-affects-only-items-that-start-and-end-at-the-same-time": 42788, + "options-trim-content-behind-automation-items-when-editing-or-writing-automation": 42206, + "options-trim-content-behind-media-items-when-editing": 41117, + "options-unset-loop-points-linked-to-time-selection": 40750, + "options-when-auto-punch-recording-into-a-fixed-lane-track-add-the-whole-recording": 42793, + "options-when-importing-copy-imported-media-to-project-media-directory": 40263, + "peaks-build-any-missing-peaks": 40047, + "peaks-build-any-missing-peaks-for-selected-items": 40245, + "peaks-decrease-peaks-display-zoom-for-project": 40156, + "peaks-force-mono-peaks": 42626, + "peaks-increase-peaks-display-zoom-for-project": 40155, + "peaks-load-spectral-peaks-preset-1": 42077, + "peaks-load-spectral-peaks-preset-2": 42078, + "peaks-load-spectral-peaks-preset-3": 42079, + "peaks-load-spectral-peaks-preset-4": 42080, + "peaks-load-spectral-peaks-preset-5": 42081, + "peaks-load-spectrogram-preset-1": 42296, + "peaks-load-spectrogram-preset-2": 42297, + "peaks-load-spectrogram-preset-3": 42298, + "peaks-load-spectrogram-preset-4": 42299, + "peaks-load-spectrogram-preset-5": 42300, + "peaks-rebuild-all-peaks": 40048, + "peaks-rebuild-peaks-for-selected-items": 40441, + "peaks-rectify-peaks": 42307, + "peaks-remove-all-peak-cache-files": 40097, + "peaks-reset-peaks-display-zoom-for-project": 42449, + "peaks-scale-peaks-by-square-root-half-of-range-is-12db-rather-than-6db": 42306, + "peaks-show-normal-peaks": 42301, + "peaks-toggle-color-peaks-by-momentary-loudness-lufs-m": 43145, + "peaks-toggle-color-peaks-by-short-term-loudness-lufs-s": 43147, + "peaks-toggle-normal-peaks-plus-spectrogram": 42295, + "peaks-toggle-show-graph-of-momentary-loudness-lufs-m": 43146, + "peaks-toggle-show-graph-of-short-term-loudness-lufs-s": 43148, + "peaks-toggle-show-spectral-peaks-and-graph-of-momentary-loudness-lufs-m": 43207, + "peaks-toggle-show-spectral-peaks-and-graph-of-short-term-loudness-lufs-s": 43208, + "peaks-toggle-spectral-peaks": 42073, + "peaks-toggle-spectral-peaks-plus-spectrogram": 43209, + "peaks-toggle-spectrogram": 42294, + "performance-meter-reset-graph": 40602, + "pre-roll-toggle-pre-roll-on-play": 41818, + "pre-roll-toggle-pre-roll-on-record": 41819, + "pre-roll-toggle-pre-roll-on-record-deprecated-duplicate": 41038, + "project-bay-add-comment-for-items": 40195, + "project-bay-force-refresh": 1582, + "project-bay-insert-items-into-project": 41856, + "project-bay-remove-items-from-project": 41586, + "project-project-timebase-affects-midi-items": 43641, + "project-recording-settings": 40934, + "project-set-project-timebase-to-beats-auto-stretch-at-tempo-changes": 43640, + "project-set-project-timebase-to-beats-position-length-rate": 43462, + "project-set-project-timebase-to-beats-position-only": 43463, + "project-set-project-timebase-to-time": 43461, + "project-set-tempo-time-signature-envelope-timebase-to-beats": 43571, + "project-set-tempo-time-signature-envelope-timebase-to-beats-for-time-signature-time-for-tempo": 43572, + "project-set-tempo-time-signature-envelope-timebase-to-time": 43570, + "project-tabs-always-show-project-tabs": 40874, + "project-tabs-auto-offline-background-project-media": 40872, + "project-tabs-defer-rendering-of-subprojects-render-on-tab-switch-rather-than-save": 41998, + "project-tabs-display-video-from-background-projects-if-active-project-lacks-video": 42653, + "project-tabs-do-not-automatically-render-subprojects-require-manual-render": 42333, + "project-tabs-force-project-tabs-visible-when-monitoring-fx-in-use": 42072, + "project-tabs-hide-all-background-project-windows": 40909, + "project-tabs-leave-subproject-open-in-tab-after-automatic-open-and-render": 42012, + "project-tabs-move-project-tab-left-by-one": 3242, + "project-tabs-move-project-tab-right-by-one": 3243, + "project-tabs-move-project-tab-to-position-1": 3182, + "project-tabs-move-project-tab-to-position-10": 3191, + "project-tabs-move-project-tab-to-position-2": 3183, + "project-tabs-move-project-tab-to-position-3": 3184, + "project-tabs-move-project-tab-to-position-4": 3185, + "project-tabs-move-project-tab-to-position-5": 3186, + "project-tabs-move-project-tab-to-position-6": 3187, + "project-tabs-move-project-tab-to-position-7": 3188, + "project-tabs-move-project-tab-to-position-8": 3189, + "project-tabs-move-project-tab-to-position-9": 3190, + "project-tabs-move-project-tab-to-position-n": 3212, + "project-tabs-move-project-tab-to-position-n-1": 3213, + "project-tabs-move-project-tab-to-position-n-2": 3214, + "project-tabs-move-project-tab-to-position-n-3": 3215, + "project-tabs-move-project-tab-to-position-n-4": 3216, + "project-tabs-move-project-tab-to-position-n-5": 3217, + "project-tabs-move-project-tab-to-position-n-6": 3218, + "project-tabs-move-project-tab-to-position-n-7": 3219, + "project-tabs-move-project-tab-to-position-n-8": 3220, + "project-tabs-move-project-tab-to-position-n-9": 3221, + "project-tabs-play-stopped-background-projects-with-active-project": 41062, + "project-tabs-prompt-before-automatic-rerender-of-background-subprojects": 42334, + "project-tabs-run-background-projects": 40871, + "project-tabs-run-stopped-background-projects": 40873, + "project-tabs-show-project-tabs-on-left-side-of-window": 41883, + "project-tabs-switch-to-next-project-tab": 40861, + "project-tabs-switch-to-previous-project-tab": 40862, + "project-tabs-switch-to-previously-active-project-tab": 3121, + "project-tabs-switch-to-project-tab-1": 3122, + "project-tabs-switch-to-project-tab-10": 3131, + "project-tabs-switch-to-project-tab-2": 3123, + "project-tabs-switch-to-project-tab-3": 3124, + "project-tabs-switch-to-project-tab-4": 3125, + "project-tabs-switch-to-project-tab-5": 3126, + "project-tabs-switch-to-project-tab-6": 3127, + "project-tabs-switch-to-project-tab-7": 3128, + "project-tabs-switch-to-project-tab-8": 3129, + "project-tabs-switch-to-project-tab-9": 3130, + "project-tabs-switch-to-project-tab-n": 3152, + "project-tabs-switch-to-project-tab-n-1": 3153, + "project-tabs-switch-to-project-tab-n-2": 3154, + "project-tabs-switch-to-project-tab-n-3": 3155, + "project-tabs-switch-to-project-tab-n-4": 3156, + "project-tabs-switch-to-project-tab-n-5": 3157, + "project-tabs-switch-to-project-tab-n-6": 3158, + "project-tabs-switch-to-project-tab-n-7": 3159, + "project-tabs-switch-to-project-tab-n-8": 3160, + "project-tabs-switch-to-project-tab-n-9": 3161, + "project-tabs-synchronize-any-parent-projects-when-playing-back-subproject": 41994, + "project-tabs-synchronize-play-start-times-w-play-background-projects": 41063, + "project-toggle-project-timebase-to-time": 43637, + "razor-edit-clear-all-areas": 42406, + "razor-edit-create-area-from-cursor-to-mouse": 42412, + "razor-edit-create-fixed-lane-comp-area": 42475, + "razor-edit-enclose-media-items": 42630, + "razor-edit-enclose-media-items-including-space-between-items": 42409, + "razor-edit-move-areas-backwards-without-contents": 42400, + "razor-edit-move-areas-down-without-contents": 42403, + "razor-edit-move-areas-forwards-without-contents": 42399, + "razor-edit-move-areas-up-without-contents": 42402, + "razor-edit-move-nearest-area-edge-to-edit-cursor": 42498, + "razor-edit-select-media-items-within-razor-edit-area": 42957, + "razor-edit-set-loop-points-to-razor-edit-area": 42474, + "reascript-clear-contents-of-reascript-console": 42664, + "reascript-close-all-running-reascripts": 41898, + "reascript-edit-new-reascript-eel2-or-lua": 41935, + "reascript-open-reascript-documentation-html": 41065, + "reascript-run-edit-last-reascript-eel2-or-lua": 41931, + "reascript-run-edit-reascript-eel2-or-lua": 41928, + "reascript-run-last-reascript-eel2-or-lua": 41061, + "reascript-run-reascript-eel2-or-lua": 41060, + "reascript-show-reascript-console": 42663, + "record-add-recorded-media-to-project": 40670, + "record-remove-recorded-media-not-yet-in-project": 40669, + "record-set-record-mode-to-normal": 40252, + "record-set-record-mode-to-selected-item-auto-punch": 40253, + "record-set-record-mode-to-time-selection-auto-punch": 40076, + "record-start-new-files-during-recording": 40666, + "region-render-matrix-add-selected-tracks-to-render-list-for-all-regions": 41893, + "region-render-matrix-render-all-tracks-for-all-regions": 41891, + "region-render-matrix-render-master-mix-for-all-regions": 41890, + "region-render-matrix-render-only-selected-tracks-for-all-regions": 41892, + "regions-go-to-next-region-after-current-region-finishes-playing-smooth-seek": 41802, + "regions-go-to-previous-region-after-current-region-finishes-playing-smooth-seek": 41801, + "regions-go-to-region-01-after-current-region-finishes-playing-smooth-seek": 41761, + "regions-go-to-region-02-after-current-region-finishes-playing-smooth-seek": 41762, + "regions-go-to-region-03-after-current-region-finishes-playing-smooth-seek": 41763, + "regions-go-to-region-04-after-current-region-finishes-playing-smooth-seek": 41764, + "regions-go-to-region-05-after-current-region-finishes-playing-smooth-seek": 41765, + "regions-go-to-region-06-after-current-region-finishes-playing-smooth-seek": 41766, + "regions-go-to-region-07-after-current-region-finishes-playing-smooth-seek": 41767, + "regions-go-to-region-08-after-current-region-finishes-playing-smooth-seek": 41768, + "regions-go-to-region-09-after-current-region-finishes-playing-smooth-seek": 41769, + "regions-go-to-region-10-after-current-region-finishes-playing-smooth-seek": 41770, + "regions-go-to-region-11-after-current-region-finishes-playing-smooth-seek": 41771, + "regions-go-to-region-12-after-current-region-finishes-playing-smooth-seek": 41772, + "regions-go-to-region-13-after-current-region-finishes-playing-smooth-seek": 41773, + "regions-go-to-region-14-after-current-region-finishes-playing-smooth-seek": 41774, + "regions-go-to-region-15-after-current-region-finishes-playing-smooth-seek": 41775, + "regions-go-to-region-16-after-current-region-finishes-playing-smooth-seek": 41776, + "regions-go-to-region-17-after-current-region-finishes-playing-smooth-seek": 41777, + "regions-go-to-region-18-after-current-region-finishes-playing-smooth-seek": 41778, + "regions-go-to-region-19-after-current-region-finishes-playing-smooth-seek": 41779, + "regions-go-to-region-20-after-current-region-finishes-playing-smooth-seek": 41780, + "regions-go-to-region-21-after-current-region-finishes-playing-smooth-seek": 41781, + "regions-go-to-region-22-after-current-region-finishes-playing-smooth-seek": 41782, + "regions-go-to-region-23-after-current-region-finishes-playing-smooth-seek": 41783, + "regions-go-to-region-24-after-current-region-finishes-playing-smooth-seek": 41784, + "regions-go-to-region-25-after-current-region-finishes-playing-smooth-seek": 41785, + "regions-go-to-region-26-after-current-region-finishes-playing-smooth-seek": 41786, + "regions-go-to-region-27-after-current-region-finishes-playing-smooth-seek": 41787, + "regions-go-to-region-28-after-current-region-finishes-playing-smooth-seek": 41788, + "regions-go-to-region-29-after-current-region-finishes-playing-smooth-seek": 41789, + "regions-go-to-region-30-after-current-region-finishes-playing-smooth-seek": 41790, + "regions-go-to-region-31-after-current-region-finishes-playing-smooth-seek": 41791, + "regions-go-to-region-32-after-current-region-finishes-playing-smooth-seek": 41792, + "regions-go-to-region-33-after-current-region-finishes-playing-smooth-seek": 41793, + "regions-go-to-region-34-after-current-region-finishes-playing-smooth-seek": 41794, + "regions-go-to-region-35-after-current-region-finishes-playing-smooth-seek": 41795, + "regions-go-to-region-36-after-current-region-finishes-playing-smooth-seek": 41796, + "regions-go-to-region-37-after-current-region-finishes-playing-smooth-seek": 41797, + "regions-go-to-region-38-after-current-region-finishes-playing-smooth-seek": 41798, + "regions-go-to-region-39-after-current-region-finishes-playing-smooth-seek": 41799, + "regions-go-to-region-40-after-current-region-finishes-playing-smooth-seek": 41800, + "regions-select-unselect-all-regions-for-rendering": 42679, + "regions-set-loop-points-to-current-region": 43102, + "regions-set-loop-points-to-next-region": 43144, + "regions-set-loop-points-to-previous-region": 43103, + "remove-items-tracks-envelope-points-depending-on-focus": 40697, + "remove-items-tracks-envelope-points-depending-on-focus-no-prompting": 40184, + "render-all-queued-renders": 41207, + "reset-all-midi-control-surface-devices": 42348, + "reset-all-midi-devices": 41175, + "reset-position-cascade-all-floating-windows": 41155, + "reset-project-recording-pass-counter-recpass-wildcard": 41048, + "reset-soft-takeover-for-all-midi-controller-assignments": 41070, + "ruler-display-project-regions-markers-as-gridlines-in-arrange-view": 42328, + "ruler-display-region-number-even-if-region-is-named": 42435, + "ruler-display-region-number-name-when-region-edge-is-not-visible": 42436, + "ruler-display-selected-regions-over-unselected-regions-when-overlapping": 43206, + "ruler-display-tempo-and-time-signature-changes-in-separate-lanes-when-size-permits": 42325, + "ruler-display-tempo-changes": 42326, + "ruler-display-time-signature-changes": 42327, + "ruler-display-time-signature-changes-as-gridlines-in-arrange-view": 42329, + "ruler-reset-project-start-measure": 43348, + "ruler-reset-project-start-time": 43346, + "ruler-set-0-00-to-current-edit-cursor": 43345, + "ruler-set-measure-1-to-nearest-measure-to-current-edit-cursor": 43347, + "ruler-set-to-default-height": 42320, + "ruler-set-to-maximum-height": 42322, + "ruler-set-to-minimum-height": 42321, + "ruler-show-hide-all-project-markers": 43485, + "ruler-show-hide-all-project-regions": 43487, + "ruler-show-hide-all-project-regions-and-markers": 43489, + "ruler-show-hide-selected-project-markers": 43484, + "ruler-show-hide-selected-project-regions": 43486, + "ruler-show-hide-selected-project-regions-and-markers": 43488, + "screenset-load-track-view-number-01": 40444, + "screenset-load-track-view-number-02": 40445, + "screenset-load-track-view-number-03": 40446, + "screenset-load-track-view-number-04": 40447, + "screenset-load-track-view-number-05": 40448, + "screenset-load-track-view-number-06": 40449, + "screenset-load-track-view-number-07": 40450, + "screenset-load-track-view-number-08": 40451, + "screenset-load-track-view-number-09": 40452, + "screenset-load-track-view-number-10": 40453, + "screenset-load-window-set-number-01": 40454, + "screenset-load-window-set-number-02": 40455, + "screenset-load-window-set-number-03": 40456, + "screenset-load-window-set-number-04": 40457, + "screenset-load-window-set-number-05": 40458, + "screenset-load-window-set-number-06": 40459, + "screenset-load-window-set-number-07": 40460, + "screenset-load-window-set-number-08": 40461, + "screenset-load-window-set-number-09": 40462, + "screenset-load-window-set-number-10": 40463, + "screenset-save-track-view-number-01": 40464, + "screenset-save-track-view-number-02": 40465, + "screenset-save-track-view-number-03": 40466, + "screenset-save-track-view-number-04": 40467, + "screenset-save-track-view-number-05": 40468, + "screenset-save-track-view-number-06": 40469, + "screenset-save-track-view-number-07": 40470, + "screenset-save-track-view-number-08": 40471, + "screenset-save-track-view-number-09": 40472, + "screenset-save-track-view-number-10": 40473, + "screenset-save-window-set-number-01": 40474, + "screenset-save-window-set-number-02": 40475, + "screenset-save-window-set-number-03": 40476, + "screenset-save-window-set-number-04": 40477, + "screenset-save-window-set-number-05": 40478, + "screenset-save-window-set-number-06": 40479, + "screenset-save-window-set-number-07": 40480, + "screenset-save-window-set-number-08": 40481, + "screenset-save-window-set-number-09": 40482, + "screenset-save-window-set-number-10": 40483, + "script-default-6-0-theme-adjuster-lua": 55810, + "script-default-7-0-theme-adjuster-lua": 55811, + "script-insert-addictive-drums-track-lua": 55816, + "script-insert-addictive-drums-track-lua-55818": 55818, + "script-insert-addictive-drums-track-lua-55822": 55822, + "script-insert-armed-track-lua": 55813, + "script-insert-blank-track-lua": 55817, + "script-insert-blank-track-lua-55819": 55819, + "script-insert-blank-track-lua-55823": 55823, + "script-insert-instrument-track-lua": 55814, + "script-insert-komplete-kontrol-track-lua": 55815, + "script-insert-komplete-kontrol-track-lua-55820": 55820, + "script-insert-komplete-kontrol-track-lua-55824": 55824, + "script-lyrics-lua": 55808, + "scrub-disable-looped-segment-scrub-at-edit-cursor": 41189, + "scrub-enable-looped-segment-scrub-at-edit-cursor": 41188, + "scrub-invert-looped-segment-scrub-range": 43617, + "scrub-play-one-one-shot-segment-scrub-at-edit-cursor": 43594, + "scrub-prompt-to-edit-looped-segment-scrub-range": 43632, + "scrub-toggle-looped-segment-scrub-at-edit-cursor": 41187, + "scrub-toggle-preference-for-one-shot-segment-scrub-when-moving-edit-cursor": 43593, + "select-all-items-tracks-envelope-points-depending-on-focus": 40035, + "selection-set-load-set-number-01": 41239, + "selection-set-load-set-number-02": 41240, + "selection-set-load-set-number-03": 41241, + "selection-set-load-set-number-04": 41242, + "selection-set-load-set-number-05": 41243, + "selection-set-load-set-number-06": 41244, + "selection-set-load-set-number-07": 41245, + "selection-set-load-set-number-08": 41246, + "selection-set-load-set-number-09": 41247, + "selection-set-load-set-number-10": 41248, + "selection-set-save-set-number-01": 41229, + "selection-set-save-set-number-02": 41230, + "selection-set-save-set-number-03": 41231, + "selection-set-save-set-number-04": 41232, + "selection-set-save-set-number-05": 41233, + "selection-set-save-set-number-06": 41234, + "selection-set-save-set-number-07": 41235, + "selection-set-save-set-number-08": 41236, + "selection-set-save-set-number-09": 41237, + "selection-set-save-set-number-10": 41238, + "send-all-notes-off-and-all-sounds-off-to-all-midi-outputs-plug-ins": 40345, + "send-mute-track-receive-number-1": 41365, + "send-mute-track-receive-number-2": 41366, + "send-mute-track-receive-number-3": 41367, + "send-mute-track-receive-number-4": 41368, + "send-mute-track-receive-number-5": 41369, + "send-mute-track-receive-number-6": 41370, + "send-mute-track-receive-number-7": 41371, + "send-mute-track-receive-number-8": 41372, + "send-mute-track-send-number-1": 41357, + "send-mute-track-send-number-2": 41358, + "send-mute-track-send-number-3": 41359, + "send-mute-track-send-number-4": 41360, + "send-mute-track-send-number-5": 41361, + "send-mute-track-send-number-6": 41362, + "send-mute-track-send-number-7": 41363, + "send-mute-track-send-number-8": 41364, + "set-project-recording-pass-counter-recpass-wildcard": 42032, + "set-project-recording-tag-rectag-wildcard": 43464, + "set-project-tempo-from-time-selection-detect-tempo": 41597, + "set-project-tempo-from-time-selection-detect-tempo-align-items-and-loop-points-to-measure-start": 40002, + "set-project-tempo-from-time-selection-new-time-signature": 40843, + "set-ripple-editing-all-tracks": 40311, + "set-ripple-editing-off": 40309, + "set-ripple-editing-on": 1161, + "set-ripple-editing-per-track": 40310, + "set-tempo-coarse-latch-for-fine-midi-cc-osc-only": 983, + "set-tempo-coarse-midi-cc-osc-only": 984, + "set-tempo-fine-midi-cc-osc-only": 985, + "show-action-list": 40605, + "show-external-timecode-synchronization-settings": 40619, + "show-reaper-resource-path-in-finder": 40027, + "show-record-path-in-finder": 40024, + "show-secondary-record-path-in-finder": 40028, + "show-startup-splash-screen": 41535, + "snapping-disable-snap": 40753, + "snapping-enable-snap": 40754, + "snapping-restore-snap-state": 40756, + "snapping-save-snap-state": 40755, + "spectrogram-add-spectral-edit-to-item": 42302, + "spectrogram-adjust-brightness-midi-cc-mousewheel-osc-only": 24000, + "spectrogram-adjust-color-curve-midi-cc-mousewheel-osc-only": 24002, + "spectrogram-adjust-contrast-midi-cc-mousewheel-osc-only": 24001, + "spectrogram-adjust-frequency-log-scaling-midi-cc-mousewheel-osc-only": 24003, + "spectrogram-adjust-gain-of-selected-spectral-edits-by-0-5-db": 43683, + "spectrogram-adjust-gain-of-selected-spectral-edits-by-3-db": 43685, + "spectrogram-adjust-gain-of-selected-spectral-edits-by-plus-0-5-db": 43682, + "spectrogram-adjust-gain-of-selected-spectral-edits-by-plus-3-db": 43684, + "spectrogram-bypass-selected-spectral-edits": 43680, + "spectrogram-delete-selected-spectral-edits": 43687, + "spectrogram-reset-gain-of-selected-spectral-edits-to-plus-0-db": 43686, + "spectrogram-show-high-resolution-spectrogram-when-zoomed-in": 43679, + "spectrogram-show-selected-spectral-edit-configuration-menu": 43688, + "spectrogram-solo-selected-spectral-edits": 43681, + "spectrogram-toggle-always-show-spectrogram-for-selected-items": 42303, + "sws-about": 53929, + "sws-add-item-s-to-left-of-selected-item-s-to-selection": 53660, + "sws-add-item-s-to-right-of-selected-item-s-to-selection": 53659, + "sws-add-related-project-s": 53218, + "sws-add-selected-track-s-to-all-snapshots": 53158, + "sws-add-selected-track-s-to-current-snapshot": 53157, + "sws-analyze-and-display-item-peak-and-rms-entire-item": 53567, + "sws-apply-auto-coloring": 53006, + "sws-aw-cascade-selected-track-inputs": 53559, + "sws-aw-consolidate-selection": 53510, + "sws-aw-disable-clear-loop-points-on-click-in-ruler": 53527, + "sws-aw-disable-count-in-before-playback": 53518, + "sws-aw-disable-count-in-before-recording": 53521, + "sws-aw-disable-link-time-selection-and-edit-cursor": 53524, + "sws-aw-disable-metronome-during-playback": 53512, + "sws-aw-disable-metronome-during-recording": 53515, + "sws-aw-enable-clear-loop-points-on-click-in-ruler": 53526, + "sws-aw-enable-count-in-before-playback": 53517, + "sws-aw-enable-count-in-before-recording": 53520, + "sws-aw-enable-link-time-selection-and-edit-cursor": 53523, + "sws-aw-enable-metronome-during-playback": 53511, + "sws-aw-enable-metronome-during-recording": 53514, + "sws-aw-fade-in-out-crossfade-selected-area-of-selected-items": 53506, + "sws-aw-fill-gaps-between-selected-items-advanced": 53492, + "sws-aw-fill-gaps-between-selected-items-advanced-use-last-settings": 53493, + "sws-aw-fill-gaps-between-selected-items-quick-crossfade-using-default-fade-length": 53495, + "sws-aw-fill-gaps-between-selected-items-quick-no-crossfade": 53494, + "sws-aw-insert-click-track": 53555, + "sws-aw-nf-toggle-assign-random-colors-if-auto-group-newly-recorded-items-is-enabled": 53504, + "sws-aw-paste": 53553, + "sws-aw-play-stop-automatically-group-simultaneously-recorded-items-deprecated": 53503, + "sws-aw-record-automatically-group-simultaneously-recorded-items-deprecated": 53500, + "sws-aw-record-conditional-normal-or-time-selection-only": 53497, + "sws-aw-record-conditional-normal-or-time-selection-only-automatically-group-simultaneously-recorded-items-deprecated": 53501, + "sws-aw-record-conditional-normal-time-selection-item-selection-automatically-group-simultaneously-recorded-items-deprecated": 53502, + "sws-aw-record-conditional-normal-time-selection-or-item-selection": 53498, + "sws-aw-remove-overlaps-in-selected-items-preserving-item-starts": 53496, + "sws-aw-remove-tracks-items-env-obeying-time-selection-and-leaving-children": 53554, + "sws-aw-render-tracks-to-mono-stem-tracks-obeying-time-selection": 53558, + "sws-aw-render-tracks-to-stereo-stem-tracks-obeying-time-selection": 53557, + "sws-aw-select-all-items-in-group-if-grouping-is-enabled": 53560, + "sws-aw-select-from-cursor-to-end-of-project-items-and-time-selection": 53505, + "sws-aw-set-grid-to-1-128-preserving-grid-type": 53552, + "sws-aw-set-grid-to-1-16-preserving-grid-type": 53549, + "sws-aw-set-grid-to-1-2-preserving-grid-type": 53546, + "sws-aw-set-grid-to-1-32-preserving-grid-type": 53550, + "sws-aw-set-grid-to-1-4-preserving-grid-type": 53547, + "sws-aw-set-grid-to-1-64-preserving-grid-type": 53551, + "sws-aw-set-grid-to-1-8-preserving-grid-type": 53548, + "sws-aw-set-grid-to-1-preserving-grid-type": 53545, + "sws-aw-set-grid-to-2-preserving-grid-type": 53544, + "sws-aw-set-grid-to-4-preserving-grid-type": 53543, + "sws-aw-set-project-timebase-to-beats-position-length-rate": 53531, + "sws-aw-set-project-timebase-to-beats-position-only": 53530, + "sws-aw-set-project-timebase-to-time": 53529, + "sws-aw-set-selected-items-timebase-to-beats-auto-stretch-at-tempo-changes": 53566, + "sws-aw-set-selected-items-timebase-to-beats-position-length-rate": 53539, + "sws-aw-set-selected-items-timebase-to-beats-position-only": 53538, + "sws-aw-set-selected-items-timebase-to-project-track-default": 53536, + "sws-aw-set-selected-items-timebase-to-time": 53537, + "sws-aw-set-selected-tracks-pan-mode-to-3-x-balance": 53563, + "sws-aw-set-selected-tracks-pan-mode-to-dual-pan": 53565, + "sws-aw-set-selected-tracks-pan-mode-to-stereo-balance": 53562, + "sws-aw-set-selected-tracks-pan-mode-to-stereo-pan": 53564, + "sws-aw-set-selected-tracks-timebase-to-beats-position-length-rate": 53535, + "sws-aw-set-selected-tracks-timebase-to-beats-position-only": 53534, + "sws-aw-set-selected-tracks-timebase-to-project-default": 53532, + "sws-aw-set-selected-tracks-timebase-to-time": 53533, + "sws-aw-split-selected-items-at-edit-cursor-w-crossfade-on-left": 53561, + "sws-aw-stretch-selected-items-to-fill-selection": 53509, + "sws-aw-toggle-auto-group-newly-recorded-items": 53499, + "sws-aw-toggle-clear-loop-points-on-click-in-ruler": 53528, + "sws-aw-toggle-click-track-mute": 53556, + "sws-aw-toggle-count-in-before-playback": 53519, + "sws-aw-toggle-count-in-before-recording": 53522, + "sws-aw-toggle-dotted-grid": 53541, + "sws-aw-toggle-link-time-selection-and-edit-cursor": 53525, + "sws-aw-toggle-metronome-during-playback": 53513, + "sws-aw-toggle-metronome-during-recording": 53516, + "sws-aw-toggle-swing-grid": 53542, + "sws-aw-toggle-triplet-grid": 53540, + "sws-aw-trim-selected-items-to-fill-selection": 53508, + "sws-aw-trim-selected-items-to-selection-or-cursor-crop": 53507, + "sws-br-add-envelope-points-located-between-grid-to-existing-selection": 54041, + "sws-br-add-envelope-points-located-between-grid-to-existing-selection-obey-time-selection-if-any": 54042, + "sws-br-add-envelope-points-located-on-grid-to-existing-selection": 54039, + "sws-br-add-envelope-points-located-on-grid-to-existing-selection-obey-time-selection-if-any": 54040, + "sws-br-adjust-playrate-midi-cc-only": 54782, + "sws-br-adjust-playrate-options": 54783, + "sws-br-alter-slope-of-gradual-tempo-marker-decrease-0-001-bpm": 54826, + "sws-br-alter-slope-of-gradual-tempo-marker-decrease-0-001-percent": 54834, + "sws-br-alter-slope-of-gradual-tempo-marker-decrease-0-01-bpm": 54827, + "sws-br-alter-slope-of-gradual-tempo-marker-decrease-0-01-percent": 54835, + "sws-br-alter-slope-of-gradual-tempo-marker-decrease-0-1-bpm": 54828, + "sws-br-alter-slope-of-gradual-tempo-marker-decrease-0-1-percent": 54836, + "sws-br-alter-slope-of-gradual-tempo-marker-decrease-01-bpm": 54829, + "sws-br-alter-slope-of-gradual-tempo-marker-decrease-01-percent": 54837, + "sws-br-alter-slope-of-gradual-tempo-marker-increase-0-001-bpm": 54822, + "sws-br-alter-slope-of-gradual-tempo-marker-increase-0-001-percent": 54830, + "sws-br-alter-slope-of-gradual-tempo-marker-increase-0-01-bpm": 54823, + "sws-br-alter-slope-of-gradual-tempo-marker-increase-0-01-percent": 54831, + "sws-br-alter-slope-of-gradual-tempo-marker-increase-0-1-bpm": 54824, + "sws-br-alter-slope-of-gradual-tempo-marker-increase-0-1-percent": 54832, + "sws-br-alter-slope-of-gradual-tempo-marker-increase-01-bpm": 54825, + "sws-br-alter-slope-of-gradual-tempo-marker-increase-01-percent": 54833, + "sws-br-analyze-loudness": 54171, + "sws-br-apply-next-action-to-all-visible-envelopes-in-selected-tracks": 54100, + "sws-br-apply-next-action-to-all-visible-envelopes-in-selected-tracks-if-there-is-no-track-envelope-selected": 54102, + "sws-br-apply-next-action-to-all-visible-record-armed-envelopes-in-selected-tracks": 54101, + "sws-br-apply-next-action-to-all-visible-record-armed-envelopes-in-selected-tracks-if-there-is-no-track-envelope-selected": 54103, + "sws-br-check-for-new-sws-version": 55821, + "sws-br-contextual-toolbars": 53938, + "sws-br-convert-project-markers-to-tempo-markers": 54846, + "sws-br-convert-selected-envelope-s-curve-in-time-selection-to-cc-events-in-last-clicked-cc-lane-in-last-active-midi-editor": 54051, + "sws-br-convert-selected-envelope-s-curve-in-time-selection-to-cc-events-in-last-clicked-cc-lane-in-last-active-midi-editor-clear-existing-events": 54052, + "sws-br-convert-selected-points-in-selected-envelope-to-cc-events-in-last-clicked-cc-lane-in-last-active-midi-editor": 54049, + "sws-br-convert-selected-points-in-selected-envelope-to-cc-events-in-last-clicked-cc-lane-in-last-active-midi-editor-clear-existing-events": 54050, + "sws-br-copy-points-in-time-selection-in-selected-envelope-to-all-visible-envelopes-in-selected-tracks": 54072, + "sws-br-copy-points-in-time-selection-in-selected-envelope-to-all-visible-envelopes-in-selected-tracks-paste-at-edit-cursor": 54076, + "sws-br-copy-points-in-time-selection-in-selected-envelope-to-all-visible-record-armed-in-envelopes-of-selected-tracks": 54073, + "sws-br-copy-points-in-time-selection-in-selected-envelope-to-all-visible-record-armed-in-envelopes-of-selected-tracks-paste-at-edit-cursor": 54077, + "sws-br-copy-points-in-time-selection-in-selected-envelope-to-envelope-at-mouse-cursor": 54079, + "sws-br-copy-points-in-time-selection-in-selected-envelope-to-envelope-at-mouse-cursor-paste-at-edit-cursor": 54081, + "sws-br-copy-selected-points-in-selected-envelope-to-all-visible-envelopes-in-selected-tracks": 54070, + "sws-br-copy-selected-points-in-selected-envelope-to-all-visible-envelopes-in-selected-tracks-paste-at-edit-cursor": 54074, + "sws-br-copy-selected-points-in-selected-envelope-to-all-visible-record-armed-envelopes-in-selected-tracks": 54071, + "sws-br-copy-selected-points-in-selected-envelope-to-all-visible-record-armed-envelopes-in-selected-tracks-paste-at-edit-cursor": 54075, + "sws-br-copy-selected-points-in-selected-envelope-to-envelope-at-mouse-cursor": 54078, + "sws-br-copy-selected-points-in-selected-envelope-to-to-envelope-at-mouse-cursor-paste-at-edit-cursor": 54080, + "sws-br-copy-take-media-source-file-path-of-selected-items-to-clipboard": 54503, + "sws-br-create-project-marker-at-mouse-cursor": 54472, + "sws-br-create-project-marker-at-mouse-cursor-obey-snapping": 54473, + "sws-br-create-project-markers-from-notes-in-selected-midi-items": 54470, + "sws-br-create-project-markers-from-selected-items-name-by-item-s-notes": 54474, + "sws-br-create-project-markers-from-selected-tempo-markers": 54464, + "sws-br-create-project-markers-from-stretch-markers-in-selected-items": 54471, + "sws-br-create-regions-from-selected-items-name-by-item-s-notes": 54475, + "sws-br-create-tempo-markers-at-grid-after-every-selected-tempo-marker": 54841, + "sws-br-decrease-selected-envelope-points-by-0-1-db-volume-envelope-only": 54089, + "sws-br-decrease-selected-envelope-points-by-0-5-db-volume-envelope-only": 54090, + "sws-br-decrease-selected-envelope-points-by-1-db-volume-envelope-only": 54091, + "sws-br-decrease-selected-envelope-points-by-10-db-volume-envelope-only": 54093, + "sws-br-decrease-selected-envelope-points-by-5-db-volume-envelope-only": 54092, + "sws-br-decrease-tempo-marker-0-001-bpm-preserve-overall-tempo": 54810, + "sws-br-decrease-tempo-marker-0-001-percent-preserve-overall-tempo": 54818, + "sws-br-decrease-tempo-marker-0-01-bpm-preserve-overall-tempo": 54811, + "sws-br-decrease-tempo-marker-0-01-percent-preserve-overall-tempo": 54819, + "sws-br-decrease-tempo-marker-0-1-bpm-preserve-overall-tempo": 54812, + "sws-br-decrease-tempo-marker-0-1-percent-preserve-overall-tempo": 54820, + "sws-br-decrease-tempo-marker-01-bpm-preserve-overall-tempo": 54813, + "sws-br-decrease-tempo-marker-01-percent-preserve-overall-tempo": 54821, + "sws-br-delete-envelope-point-at-mouse-cursor": 54098, + "sws-br-delete-envelope-point-at-mouse-cursor-selected-envelope-only": 54097, + "sws-br-delete-envelope-points-between-grid": 54045, + "sws-br-delete-envelope-points-between-grid-obey-time-selection-if-any": 54046, + "sws-br-delete-envelope-points-on-grid": 54043, + "sws-br-delete-envelope-points-on-grid-obey-time-selection-if-any": 54044, + "sws-br-delete-take-under-mouse-cursor": 54504, + "sws-br-delete-tempo-marker-and-preserve-position-and-length-of-items-including-midi-events": 54839, + "sws-br-delete-tempo-marker-and-preserve-position-and-length-of-selected-items-including-midi-events": 54840, + "sws-br-delete-tempo-marker-preserve-overall-tempo-and-positions-if-possible": 54838, + "sws-br-disable-ignore-project-tempo-for-selected-midi-items": 54465, + "sws-br-disable-ignore-project-tempo-for-selected-midi-items-preserving-time-position-of-midi-events": 54466, + "sws-br-enable-ignore-project-tempo-for-selected-midi-items-preserving-time-position-of-midi-events-use-tempo-at-item-s-start": 54468, + "sws-br-enable-ignore-project-tempo-for-selected-midi-items-use-tempo-at-item-s-start": 54467, + "sws-br-exclusive-toggle-contextual-toolbar-under-mouse-cursor-preset-1": 53979, + "sws-br-exclusive-toggle-contextual-toolbar-under-mouse-cursor-preset-2": 53984, + "sws-br-exclusive-toggle-contextual-toolbar-under-mouse-cursor-preset-3": 53989, + "sws-br-exclusive-toggle-contextual-toolbar-under-mouse-cursor-preset-4": 53994, + "sws-br-exclusive-toggle-contextual-toolbar-under-mouse-cursor-preset-5": 53999, + "sws-br-exclusive-toggle-contextual-toolbar-under-mouse-cursor-preset-6": 54004, + "sws-br-exclusive-toggle-contextual-toolbar-under-mouse-cursor-preset-7": 54009, + "sws-br-exclusive-toggle-contextual-toolbar-under-mouse-cursor-preset-8": 54014, + "sws-br-expand-envelope-point-selection-to-the-left": 54028, + "sws-br-expand-envelope-point-selection-to-the-left-end-point-only": 54030, + "sws-br-expand-envelope-point-selection-to-the-right": 54027, + "sws-br-expand-envelope-point-selection-to-the-right-end-point-only": 54029, + "sws-br-fit-selected-envelope-points-to-time-selection": 54082, + "sws-br-focus-arrange": 54482, + "sws-br-focus-tracks": 54483, + "sws-br-freehand-draw-envelope-while-snapping-points-to-left-side-grid-line-perform-until-shortcut-released": 54854, + "sws-br-global-loudness-preferences": 54170, + "sws-br-hide-all-but-selected-track-envelope-for-all-tracks": 54136, + "sws-br-hide-all-but-selected-track-envelope-for-all-tracks-except-envelopes-in-separate-lanes": 54138, + "sws-br-hide-all-but-selected-track-envelope-for-all-tracks-except-envelopes-in-track-lanes": 54140, + "sws-br-hide-all-but-selected-track-envelope-for-selected-tracks": 54137, + "sws-br-hide-all-but-selected-track-envelope-for-selected-tracks-except-envelopes-in-separate-lanes": 54139, + "sws-br-hide-all-but-selected-track-envelope-for-selected-tracks-except-envelopes-in-track-lanes": 54141, + "sws-br-hide-all-fx-envelopes-for-selected-tracks": 54149, + "sws-br-hide-all-send-envelopes-for-selected-tracks": 54166, + "sws-br-hide-mute-send-envelopes-for-selected-tracks": 54169, + "sws-br-hide-pan-send-envelopes-for-selected-tracks": 54168, + "sws-br-hide-volume-send-envelopes-for-selected-tracks": 54167, + "sws-br-increase-selected-envelope-points-by-0-1-db-volume-envelope-only": 54084, + "sws-br-increase-selected-envelope-points-by-0-5-db-volume-envelope-only": 54085, + "sws-br-increase-selected-envelope-points-by-1-db-volume-envelope-only": 54086, + "sws-br-increase-selected-envelope-points-by-10-db-volume-envelope-only": 54088, + "sws-br-increase-selected-envelope-points-by-5-db-volume-envelope-only": 54087, + "sws-br-increase-tempo-marker-0-001-bpm-preserve-overall-tempo": 54806, + "sws-br-increase-tempo-marker-0-001-percent-preserve-overall-tempo": 54814, + "sws-br-increase-tempo-marker-0-01-bpm-preserve-overall-tempo": 54807, + "sws-br-increase-tempo-marker-0-01-percent-preserve-overall-tempo": 54815, + "sws-br-increase-tempo-marker-0-1-bpm-preserve-overall-tempo": 54808, + "sws-br-increase-tempo-marker-0-1-percent-preserve-overall-tempo": 54816, + "sws-br-increase-tempo-marker-01-bpm-preserve-overall-tempo": 54809, + "sws-br-increase-tempo-marker-01-percent-preserve-overall-tempo": 54817, + "sws-br-insert-2-envelope-points-at-time-selection": 54067, + "sws-br-insert-2-envelope-points-at-time-selection-to-all-visible-track-envelopes": 54068, + "sws-br-insert-2-envelope-points-at-time-selection-to-all-visible-track-envelopes-in-selected-tracks": 54069, + "sws-br-insert-envelope-points-on-grid-using-shape-of-the-previous-point": 54047, + "sws-br-insert-envelope-points-on-grid-using-shape-of-the-previous-point-obey-time-selection-if-any": 54048, + "sws-br-insert-new-envelope-point-at-mouse-cursor-using-value-at-current-position-obey-snapping": 54083, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-left-vertical-bottom": 54493, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-left-vertical-middle": 54494, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-left-vertical-top": 54495, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-middle-vertical-bottom": 54496, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-middle-vertical-middle": 54497, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-middle-vertical-top": 54498, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-right-vertical-bottom": 54499, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-right-vertical-middle": 54500, + "sws-br-move-active-floating-track-fx-window-to-mouse-cursor-horizontal-right-vertical-top": 54501, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-left-vertical-bottom": 54484, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-left-vertical-middle": 54485, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-left-vertical-top": 54486, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-middle-vertical-bottom": 54487, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-middle-vertical-middle": 54488, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-middle-vertical-top": 54489, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-right-vertical-bottom": 54490, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-right-vertical-middle": 54491, + "sws-br-move-active-floating-window-to-mouse-cursor-horizontal-right-vertical-top": 54492, + "sws-br-move-closest-envelope-point-to-edit-cursor": 54065, + "sws-br-move-closest-grid-line-to-edit-cursor": 54787, + "sws-br-move-closest-grid-line-to-mouse-cursor-perform-until-shortcut-released": 54871, + "sws-br-move-closest-grid-line-to-play-cursor": 54788, + "sws-br-move-closest-left-side-grid-line-to-edit-cursor": 54791, + "sws-br-move-closest-measure-grid-line-to-edit-cursor": 54789, + "sws-br-move-closest-measure-grid-line-to-mouse-cursor-perform-until-shortcut-released": 54872, + "sws-br-move-closest-measure-grid-line-to-play-cursor": 54790, + "sws-br-move-closest-project-marker-to-edit-cursor": 54477, + "sws-br-move-closest-project-marker-to-edit-cursor-obey-snapping": 54480, + "sws-br-move-closest-project-marker-to-mouse-cursor": 54478, + "sws-br-move-closest-project-marker-to-mouse-cursor-obey-snapping": 54481, + "sws-br-move-closest-project-marker-to-play-cursor": 54476, + "sws-br-move-closest-project-marker-to-play-cursor-obey-snapping": 54479, + "sws-br-move-closest-right-side-grid-line-to-edit-cursor": 54792, + "sws-br-move-closest-selected-envelope-point-to-edit-cursor": 54066, + "sws-br-move-closest-tempo-marker-to-edit-cursor": 54805, + "sws-br-move-closest-tempo-marker-to-mouse-cursor-perform-until-shortcut-released": 54870, + "sws-br-move-edit-cursor-to-next-envelope-point": 54019, + "sws-br-move-edit-cursor-to-next-envelope-point-and-add-to-selection": 54021, + "sws-br-move-edit-cursor-to-next-envelope-point-and-select-it": 54020, + "sws-br-move-edit-cursor-to-previous-envelope-point": 54022, + "sws-br-move-edit-cursor-to-previous-envelope-point-and-add-to-selection": 54024, + "sws-br-move-edit-cursor-to-previous-envelope-point-and-select-it": 54023, + "sws-br-move-tempo-marker-back": 54804, + "sws-br-move-tempo-marker-back-0-1-ms": 54798, + "sws-br-move-tempo-marker-back-1-ms": 54799, + "sws-br-move-tempo-marker-back-10-ms": 54800, + "sws-br-move-tempo-marker-back-100-ms": 54801, + "sws-br-move-tempo-marker-back-1000-ms": 54802, + "sws-br-move-tempo-marker-forward": 54803, + "sws-br-move-tempo-marker-forward-0-1-ms": 54793, + "sws-br-move-tempo-marker-forward-1-ms": 54794, + "sws-br-move-tempo-marker-forward-10-ms": 54795, + "sws-br-move-tempo-marker-forward-100-ms": 54796, + "sws-br-move-tempo-marker-forward-1000-ms": 54797, + "sws-br-nf-toggle-use-dual-mono-mode-for-mono-takes-channel-modes-for-loudness-analyzing": 54178, + "sws-br-nf-toggle-use-high-precision-mode-for-loudness-analyzing": 54177, + "sws-br-normalize-loudness-of-selected-items-to-0-lu": 54174, + "sws-br-normalize-loudness-of-selected-items-to-23-lufs": 54173, + "sws-br-normalize-loudness-of-selected-items-tracks": 54172, + "sws-br-normalize-loudness-of-selected-tracks-to-0-lu": 54176, + "sws-br-normalize-loudness-of-selected-tracks-to-23-lufs": 54175, + "sws-br-open-close-contextual-toolbar-under-mouse-cursor-preset-1": 53939, + "sws-br-open-close-contextual-toolbar-under-mouse-cursor-preset-2": 53944, + "sws-br-open-close-contextual-toolbar-under-mouse-cursor-preset-3": 53949, + "sws-br-open-close-contextual-toolbar-under-mouse-cursor-preset-4": 53954, + "sws-br-open-close-contextual-toolbar-under-mouse-cursor-preset-5": 53959, + "sws-br-open-close-contextual-toolbar-under-mouse-cursor-preset-6": 53964, + "sws-br-open-close-contextual-toolbar-under-mouse-cursor-preset-7": 53969, + "sws-br-open-close-contextual-toolbar-under-mouse-cursor-preset-8": 53974, + "sws-br-options-automatically-insert-stretch-markers-when-inserting-tempo-markers-with-sws-actions": 54720, + "sws-br-options-cycle-through-record-modes": 54721, + "sws-br-options-set-apply-trim-when-adding-volume-pan-envelopes-to-always": 54685, + "sws-br-options-set-apply-trim-when-adding-volume-pan-envelopes-to-in-read-write": 54686, + "sws-br-options-set-apply-trim-when-adding-volume-pan-envelopes-to-never": 54687, + "sws-br-options-set-grid-line-z-order-to-over-items": 54714, + "sws-br-options-set-grid-line-z-order-to-through-items": 54715, + "sws-br-options-set-grid-line-z-order-to-under-items": 54716, + "sws-br-options-set-marker-line-z-order-to-over-items": 54717, + "sws-br-options-set-marker-line-z-order-to-through-items": 54718, + "sws-br-options-set-marker-line-z-order-to-under-items": 54719, + "sws-br-options-set-run-fx-after-stopping-for-to-0-ms": 54696, + "sws-br-options-set-run-fx-after-stopping-for-to-100-ms": 54697, + "sws-br-options-set-run-fx-after-stopping-for-to-1000-ms": 54699, + "sws-br-options-set-run-fx-after-stopping-for-to-10000-ms": 54708, + "sws-br-options-set-run-fx-after-stopping-for-to-2000-ms": 54700, + "sws-br-options-set-run-fx-after-stopping-for-to-3000-ms": 54701, + "sws-br-options-set-run-fx-after-stopping-for-to-4000-ms": 54702, + "sws-br-options-set-run-fx-after-stopping-for-to-500-ms": 54698, + "sws-br-options-set-run-fx-after-stopping-for-to-5000-ms": 54703, + "sws-br-options-set-run-fx-after-stopping-for-to-6000-ms": 54704, + "sws-br-options-set-run-fx-after-stopping-for-to-7000-ms": 54705, + "sws-br-options-set-run-fx-after-stopping-for-to-8000-ms": 54706, + "sws-br-options-set-run-fx-after-stopping-for-to-9000-ms": 54707, + "sws-br-options-toggle-display-media-item-gain-if-set": 54690, + "sws-br-options-toggle-display-media-item-pitch-playrate-if-set": 54689, + "sws-br-options-toggle-display-media-item-take-name": 54688, + "sws-br-options-toggle-flush-fx-on-stop": 54694, + "sws-br-options-toggle-flush-fx-when-looping": 54695, + "sws-br-options-toggle-grid-snap-settings-follow-grid-visibility": 54683, + "sws-br-options-toggle-move-edit-cursor-to-end-of-recorded-items-on-record-stop": 54711, + "sws-br-options-toggle-move-edit-cursor-to-start-of-time-selection-on-time-selection-change": 54709, + "sws-br-options-toggle-move-edit-cursor-when-pasting-inserting-media": 54710, + "sws-br-options-toggle-playback-position-follows-project-timebase-when-changing-tempo": 54684, + "sws-br-options-toggle-reset-cc-on-stop-play": 54693, + "sws-br-options-toggle-reset-pitch-on-stop-play": 54692, + "sws-br-options-toggle-scroll-view-to-edit-cursor-on-stop": 54713, + "sws-br-options-toggle-send-all-notes-off-on-stop-play": 54691, + "sws-br-options-toggle-stop-repeat-playback-at-end-of-project": 54712, + "sws-br-play-from-edit-cursor-position-and-solo-item-and-track-under-mouse-for-the-duration-perform-until-shortcut-released": 54863, + "sws-br-play-from-edit-cursor-position-and-solo-track-under-mouse-for-the-duration-perform-until-shortcut-released": 54862, + "sws-br-play-from-edit-cursor-position-perform-until-shortcut-released": 54861, + "sws-br-play-from-mouse-cursor-position": 54459, + "sws-br-play-from-mouse-cursor-position-and-solo-item-and-track-under-mouse-for-the-duration-perform-until-shortcut-released": 54860, + "sws-br-play-from-mouse-cursor-position-and-solo-track-under-mouse-for-the-duration-perform-until-shortcut-released": 54859, + "sws-br-play-from-mouse-cursor-position-perform-until-shortcut-released": 54858, + "sws-br-play-pause-from-mouse-cursor-position": 54460, + "sws-br-play-stop-from-mouse-cursor-position": 54461, + "sws-br-preview-media-item-under-mouse": 54722, + "sws-br-preview-media-item-under-mouse-and-pause-during-preview": 54725, + "sws-br-preview-media-item-under-mouse-and-pause-during-preview-start-from-mouse-cursor-position": 54726, + "sws-br-preview-media-item-under-mouse-at-track-fader-volume": 54727, + "sws-br-preview-media-item-under-mouse-at-track-fader-volume-and-pause-during-preview": 54730, + "sws-br-preview-media-item-under-mouse-at-track-fader-volume-and-pause-during-preview-start-from-mouse-cursor-position": 54731, + "sws-br-preview-media-item-under-mouse-at-track-fader-volume-start-from-mouse-position": 54728, + "sws-br-preview-media-item-under-mouse-at-track-fader-volume-sync-with-next-measure": 54729, + "sws-br-preview-media-item-under-mouse-start-from-mouse-cursor-position": 54723, + "sws-br-preview-media-item-under-mouse-sync-with-next-measure": 54724, + "sws-br-preview-media-item-under-mouse-through-track": 54732, + "sws-br-preview-media-item-under-mouse-through-track-and-pause-during-preview": 54735, + "sws-br-preview-media-item-under-mouse-through-track-and-pause-during-preview-start-from-mouse-cursor-position": 54736, + "sws-br-preview-media-item-under-mouse-through-track-start-from-mouse-position": 54733, + "sws-br-preview-media-item-under-mouse-through-track-sync-with-next-measure": 54734, + "sws-br-preview-take-under-mouse": 54752, + "sws-br-preview-take-under-mouse-and-pause-during-preview": 54755, + "sws-br-preview-take-under-mouse-and-pause-during-preview-start-from-mouse-cursor-position": 54756, + "sws-br-preview-take-under-mouse-at-track-fader-volume": 54757, + "sws-br-preview-take-under-mouse-at-track-fader-volume-and-pause-during-preview": 54760, + "sws-br-preview-take-under-mouse-at-track-fader-volume-and-pause-during-preview-start-from-mouse-cursor-position": 54761, + "sws-br-preview-take-under-mouse-at-track-fader-volume-start-from-mouse-position": 54758, + "sws-br-preview-take-under-mouse-at-track-fader-volume-sync-with-next-measure": 54759, + "sws-br-preview-take-under-mouse-start-from-mouse-cursor-position": 54753, + "sws-br-preview-take-under-mouse-sync-with-next-measure": 54754, + "sws-br-preview-take-under-mouse-through-track": 54762, + "sws-br-preview-take-under-mouse-through-track-and-pause-during-preview": 54765, + "sws-br-preview-take-under-mouse-through-track-and-pause-during-preview-start-from-mouse-cursor-position": 54766, + "sws-br-preview-take-under-mouse-through-track-start-from-mouse-position": 54763, + "sws-br-preview-take-under-mouse-through-track-sync-with-next-measure": 54764, + "sws-br-project-track-selection-action-clear": 54786, + "sws-br-project-track-selection-action-set": 54784, + "sws-br-project-track-selection-action-show": 54785, + "sws-br-randomize-tempo-markers": 54848, + "sws-br-reset-position-of-selected-partial-time-signature-markers": 54843, + "sws-br-restore-edit-cursor-position-slot-01": 54539, + "sws-br-restore-edit-cursor-position-slot-02": 54540, + "sws-br-restore-edit-cursor-position-slot-03": 54541, + "sws-br-restore-edit-cursor-position-slot-04": 54542, + "sws-br-restore-edit-cursor-position-slot-05": 54543, + "sws-br-restore-edit-cursor-position-slot-06": 54544, + "sws-br-restore-edit-cursor-position-slot-07": 54545, + "sws-br-restore-edit-cursor-position-slot-08": 54546, + "sws-br-restore-edit-cursor-position-slot-09": 54547, + "sws-br-restore-edit-cursor-position-slot-10": 54548, + "sws-br-restore-edit-cursor-position-slot-11": 54549, + "sws-br-restore-edit-cursor-position-slot-12": 54550, + "sws-br-restore-edit-cursor-position-slot-13": 54551, + "sws-br-restore-edit-cursor-position-slot-14": 54552, + "sws-br-restore-edit-cursor-position-slot-15": 54553, + "sws-br-restore-edit-cursor-position-slot-16": 54554, + "sws-br-restore-envelope-point-selection-slot-01": 54120, + "sws-br-restore-envelope-point-selection-slot-02": 54121, + "sws-br-restore-envelope-point-selection-slot-03": 54122, + "sws-br-restore-envelope-point-selection-slot-04": 54123, + "sws-br-restore-envelope-point-selection-slot-05": 54124, + "sws-br-restore-envelope-point-selection-slot-06": 54125, + "sws-br-restore-envelope-point-selection-slot-07": 54126, + "sws-br-restore-envelope-point-selection-slot-08": 54127, + "sws-br-restore-envelope-point-selection-slot-09": 54128, + "sws-br-restore-envelope-point-selection-slot-10": 54129, + "sws-br-restore-envelope-point-selection-slot-11": 54130, + "sws-br-restore-envelope-point-selection-slot-12": 54131, + "sws-br-restore-envelope-point-selection-slot-13": 54132, + "sws-br-restore-envelope-point-selection-slot-14": 54133, + "sws-br-restore-envelope-point-selection-slot-15": 54134, + "sws-br-restore-envelope-point-selection-slot-16": 54135, + "sws-br-restore-items-mute-state-to-all-items-slot-01": 54603, + "sws-br-restore-items-mute-state-to-all-items-slot-02": 54604, + "sws-br-restore-items-mute-state-to-all-items-slot-03": 54605, + "sws-br-restore-items-mute-state-to-all-items-slot-04": 54606, + "sws-br-restore-items-mute-state-to-all-items-slot-05": 54607, + "sws-br-restore-items-mute-state-to-all-items-slot-06": 54608, + "sws-br-restore-items-mute-state-to-all-items-slot-07": 54609, + "sws-br-restore-items-mute-state-to-all-items-slot-08": 54610, + "sws-br-restore-items-mute-state-to-all-items-slot-09": 54611, + "sws-br-restore-items-mute-state-to-all-items-slot-10": 54612, + "sws-br-restore-items-mute-state-to-all-items-slot-11": 54613, + "sws-br-restore-items-mute-state-to-all-items-slot-12": 54614, + "sws-br-restore-items-mute-state-to-all-items-slot-13": 54615, + "sws-br-restore-items-mute-state-to-all-items-slot-14": 54616, + "sws-br-restore-items-mute-state-to-all-items-slot-15": 54617, + "sws-br-restore-items-mute-state-to-all-items-slot-16": 54618, + "sws-br-restore-items-mute-state-to-selected-items-slot-01": 54587, + "sws-br-restore-items-mute-state-to-selected-items-slot-02": 54588, + "sws-br-restore-items-mute-state-to-selected-items-slot-03": 54589, + "sws-br-restore-items-mute-state-to-selected-items-slot-04": 54590, + "sws-br-restore-items-mute-state-to-selected-items-slot-05": 54591, + "sws-br-restore-items-mute-state-to-selected-items-slot-06": 54592, + "sws-br-restore-items-mute-state-to-selected-items-slot-07": 54593, + "sws-br-restore-items-mute-state-to-selected-items-slot-08": 54594, + "sws-br-restore-items-mute-state-to-selected-items-slot-09": 54595, + "sws-br-restore-items-mute-state-to-selected-items-slot-10": 54596, + "sws-br-restore-items-mute-state-to-selected-items-slot-11": 54597, + "sws-br-restore-items-mute-state-to-selected-items-slot-12": 54598, + "sws-br-restore-items-mute-state-to-selected-items-slot-13": 54599, + "sws-br-restore-items-mute-state-to-selected-items-slot-14": 54600, + "sws-br-restore-items-mute-state-to-selected-items-slot-15": 54601, + "sws-br-restore-items-mute-state-to-selected-items-slot-16": 54602, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-01": 54667, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-02": 54668, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-03": 54669, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-04": 54670, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-05": 54671, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-06": 54672, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-07": 54673, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-08": 54674, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-09": 54675, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-10": 54676, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-11": 54677, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-12": 54678, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-13": 54679, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-14": 54680, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-15": 54681, + "sws-br-restore-tracks-solo-and-mute-state-to-all-tracks-slot-16": 54682, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-01": 54651, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-02": 54652, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-03": 54653, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-04": 54654, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-05": 54655, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-06": 54656, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-07": 54657, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-08": 54658, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-09": 54659, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-10": 54660, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-11": 54661, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-12": 54662, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-13": 54663, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-14": 54664, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-15": 54665, + "sws-br-restore-tracks-solo-and-mute-state-to-selected-tracks-slot-16": 54666, + "sws-br-save-all-items-mute-state-slot-01": 54571, + "sws-br-save-all-items-mute-state-slot-02": 54572, + "sws-br-save-all-items-mute-state-slot-03": 54573, + "sws-br-save-all-items-mute-state-slot-04": 54574, + "sws-br-save-all-items-mute-state-slot-05": 54575, + "sws-br-save-all-items-mute-state-slot-06": 54576, + "sws-br-save-all-items-mute-state-slot-07": 54577, + "sws-br-save-all-items-mute-state-slot-08": 54578, + "sws-br-save-all-items-mute-state-slot-09": 54579, + "sws-br-save-all-items-mute-state-slot-10": 54580, + "sws-br-save-all-items-mute-state-slot-11": 54581, + "sws-br-save-all-items-mute-state-slot-12": 54582, + "sws-br-save-all-items-mute-state-slot-13": 54583, + "sws-br-save-all-items-mute-state-slot-14": 54584, + "sws-br-save-all-items-mute-state-slot-15": 54585, + "sws-br-save-all-items-mute-state-slot-16": 54586, + "sws-br-save-all-tracks-solo-and-mute-state-slot-01": 54635, + "sws-br-save-all-tracks-solo-and-mute-state-slot-02": 54636, + "sws-br-save-all-tracks-solo-and-mute-state-slot-03": 54637, + "sws-br-save-all-tracks-solo-and-mute-state-slot-04": 54638, + "sws-br-save-all-tracks-solo-and-mute-state-slot-05": 54639, + "sws-br-save-all-tracks-solo-and-mute-state-slot-06": 54640, + "sws-br-save-all-tracks-solo-and-mute-state-slot-07": 54641, + "sws-br-save-all-tracks-solo-and-mute-state-slot-08": 54642, + "sws-br-save-all-tracks-solo-and-mute-state-slot-09": 54643, + "sws-br-save-all-tracks-solo-and-mute-state-slot-10": 54644, + "sws-br-save-all-tracks-solo-and-mute-state-slot-11": 54645, + "sws-br-save-all-tracks-solo-and-mute-state-slot-12": 54646, + "sws-br-save-all-tracks-solo-and-mute-state-slot-13": 54647, + "sws-br-save-all-tracks-solo-and-mute-state-slot-14": 54648, + "sws-br-save-all-tracks-solo-and-mute-state-slot-15": 54649, + "sws-br-save-all-tracks-solo-and-mute-state-slot-16": 54650, + "sws-br-save-edit-cursor-position-slot-01": 54523, + "sws-br-save-edit-cursor-position-slot-02": 54524, + "sws-br-save-edit-cursor-position-slot-03": 54525, + "sws-br-save-edit-cursor-position-slot-04": 54526, + "sws-br-save-edit-cursor-position-slot-05": 54527, + "sws-br-save-edit-cursor-position-slot-06": 54528, + "sws-br-save-edit-cursor-position-slot-07": 54529, + "sws-br-save-edit-cursor-position-slot-08": 54530, + "sws-br-save-edit-cursor-position-slot-09": 54531, + "sws-br-save-edit-cursor-position-slot-10": 54532, + "sws-br-save-edit-cursor-position-slot-11": 54533, + "sws-br-save-edit-cursor-position-slot-12": 54534, + "sws-br-save-edit-cursor-position-slot-13": 54535, + "sws-br-save-edit-cursor-position-slot-14": 54536, + "sws-br-save-edit-cursor-position-slot-15": 54537, + "sws-br-save-edit-cursor-position-slot-16": 54538, + "sws-br-save-envelope-point-selection-slot-01": 54104, + "sws-br-save-envelope-point-selection-slot-02": 54105, + "sws-br-save-envelope-point-selection-slot-03": 54106, + "sws-br-save-envelope-point-selection-slot-04": 54107, + "sws-br-save-envelope-point-selection-slot-05": 54108, + "sws-br-save-envelope-point-selection-slot-06": 54109, + "sws-br-save-envelope-point-selection-slot-07": 54110, + "sws-br-save-envelope-point-selection-slot-08": 54111, + "sws-br-save-envelope-point-selection-slot-09": 54112, + "sws-br-save-envelope-point-selection-slot-10": 54113, + "sws-br-save-envelope-point-selection-slot-11": 54114, + "sws-br-save-envelope-point-selection-slot-12": 54115, + "sws-br-save-envelope-point-selection-slot-13": 54116, + "sws-br-save-envelope-point-selection-slot-14": 54117, + "sws-br-save-envelope-point-selection-slot-15": 54118, + "sws-br-save-envelope-point-selection-slot-16": 54119, + "sws-br-save-selected-items-mute-state-slot-01": 54555, + "sws-br-save-selected-items-mute-state-slot-02": 54556, + "sws-br-save-selected-items-mute-state-slot-03": 54557, + "sws-br-save-selected-items-mute-state-slot-04": 54558, + "sws-br-save-selected-items-mute-state-slot-05": 54559, + "sws-br-save-selected-items-mute-state-slot-06": 54560, + "sws-br-save-selected-items-mute-state-slot-07": 54561, + "sws-br-save-selected-items-mute-state-slot-08": 54562, + "sws-br-save-selected-items-mute-state-slot-09": 54563, + "sws-br-save-selected-items-mute-state-slot-10": 54564, + "sws-br-save-selected-items-mute-state-slot-11": 54565, + "sws-br-save-selected-items-mute-state-slot-12": 54566, + "sws-br-save-selected-items-mute-state-slot-13": 54567, + "sws-br-save-selected-items-mute-state-slot-14": 54568, + "sws-br-save-selected-items-mute-state-slot-15": 54569, + "sws-br-save-selected-items-mute-state-slot-16": 54570, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-01": 54619, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-02": 54620, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-03": 54621, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-04": 54622, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-05": 54623, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-06": 54624, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-07": 54625, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-08": 54626, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-09": 54627, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-10": 54628, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-11": 54629, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-12": 54630, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-13": 54631, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-14": 54632, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-15": 54633, + "sws-br-save-selected-tracks-solo-and-mute-state-slot-16": 54634, + "sws-br-select-all-audio-items": 54508, + "sws-br-select-all-audio-items-obey-time-selection-if-any": 54516, + "sws-br-select-all-click-source-items": 54511, + "sws-br-select-all-click-source-items-obey-time-selection-if-any": 54519, + "sws-br-select-all-empty-items": 54507, + "sws-br-select-all-empty-items-obey-time-selection-if-any": 54515, + "sws-br-select-all-midi-items": 54509, + "sws-br-select-all-midi-items-obey-time-selection-if-any": 54517, + "sws-br-select-all-partial-time-signature-markers": 54842, + "sws-br-select-all-subproject-pip-items": 54513, + "sws-br-select-all-subproject-pip-items-obey-time-selection-if-any": 54521, + "sws-br-select-all-timecode-generator-items": 54512, + "sws-br-select-all-timecode-items-obey-time-selection-if-any": 54520, + "sws-br-select-all-video-items": 54510, + "sws-br-select-all-video-items-obey-time-selection-if-any": 54518, + "sws-br-select-all-video-processor-items": 54514, + "sws-br-select-all-video-processor-items-obey-time-selection-if-any": 54522, + "sws-br-select-and-adjust-tempo-markers": 54847, + "sws-br-select-dips-in-envelope": 54058, + "sws-br-select-dips-in-envelope-add-to-selection": 54057, + "sws-br-select-envelope-at-mouse-cursor": 54094, + "sws-br-select-envelope-at-mouse-cursor-and-freehand-draw-envelope-while-snapping-points-to-left-side-grid-line-perform-until-shortcut-released": 54857, + "sws-br-select-envelope-at-mouse-cursor-and-set-closest-envelope-point-s-value-to-mouse-cursor-perform-until-shortcut-released": 54855, + "sws-br-select-envelope-at-mouse-cursor-and-set-closest-left-side-envelope-point-s-value-to-mouse-cursor-perform-until-shortcut-released": 54856, + "sws-br-select-envelope-point-at-mouse-cursor": 54096, + "sws-br-select-envelope-point-at-mouse-cursor-selected-envelope-only": 54095, + "sws-br-select-envelope-points-between-grid": 54037, + "sws-br-select-envelope-points-between-grid-obey-time-selection-if-any": 54038, + "sws-br-select-envelope-points-on-grid": 54035, + "sws-br-select-envelope-points-on-grid-obey-time-selection-if-any": 54036, + "sws-br-select-mcp-track-under-mouse-cursor": 54506, + "sws-br-select-next-envelope-point": 54025, + "sws-br-select-peaks-in-envelope": 54056, + "sws-br-select-peaks-in-envelope-add-to-selection": 54055, + "sws-br-select-previous-envelope-point": 54026, + "sws-br-select-tcp-track-under-mouse-cursor": 54505, + "sws-br-set-closest-envelope-point-s-value-to-mouse-cursor-perform-until-shortcut-released": 54852, + "sws-br-set-closest-left-side-envelope-point-s-value-to-mouse-cursor-perform-until-shortcut-released": 54853, + "sws-br-set-selected-envelope-points-to-first-selected-point-s-value": 54064, + "sws-br-set-selected-envelope-points-to-last-selected-point-s-value": 54063, + "sws-br-set-selected-envelope-points-to-next-point-s-value": 54061, + "sws-br-set-selected-envelope-points-to-previous-point-s-value": 54062, + "sws-br-set-tempo-marker-shape-options": 54849, + "sws-br-set-tempo-marker-shape-to-linear-preserve-positions": 54850, + "sws-br-set-tempo-marker-shape-to-square-preserve-positions": 54851, + "sws-br-shift-envelope-point-selection-left": 54053, + "sws-br-shift-envelope-point-selection-right": 54054, + "sws-br-show-active-mute-send-envelopes-for-selected-tracks": 54157, + "sws-br-show-active-pan-send-envelopes-for-selected-tracks": 54156, + "sws-br-show-active-volume-send-envelopes-for-selected-tracks": 54155, + "sws-br-show-all-active-fx-envelopes-for-selected-tracks": 54147, + "sws-br-show-all-active-send-envelopes-for-selected-tracks": 54154, + "sws-br-show-all-fx-envelopes-for-selected-tracks": 54148, + "sws-br-show-all-send-envelopes-for-selected-tracks": 54162, + "sws-br-show-hide-pan-track-envelope-for-last-adjusted-send": 54144, + "sws-br-show-hide-track-envelope-for-last-adjusted-send-volume-pan-only": 54142, + "sws-br-show-hide-volume-track-envelope-for-last-adjusted-send": 54143, + "sws-br-show-mute-send-envelopes-for-selected-tracks": 54165, + "sws-br-show-pan-send-envelopes-for-selected-tracks": 54164, + "sws-br-show-volume-send-envelopes-for-selected-tracks": 54163, + "sws-br-shrink-envelope-point-selection-from-the-left": 54032, + "sws-br-shrink-envelope-point-selection-from-the-left-end-point-only": 54034, + "sws-br-shrink-envelope-point-selection-from-the-right": 54031, + "sws-br-shrink-envelope-point-selection-from-the-right-end-point-only": 54033, + "sws-br-snap-position-of-selected-partial-time-signature-markers-to-closest-grid-line": 54844, + "sws-br-split-selected-items-at-stretch-markers": 54463, + "sws-br-split-selected-items-at-tempo-markers": 54462, + "sws-br-tempo-help": 54845, + "sws-br-toggle-media-item-online-offline": 54502, + "sws-br-toggle-play-from-edit-cursor-position-and-solo-item-and-track-under-mouse-for-the-duration": 54458, + "sws-br-toggle-play-from-edit-cursor-position-and-solo-track-under-mouse-for-the-duration": 54457, + "sws-br-toggle-play-from-mouse-cursor-position": 54454, + "sws-br-toggle-play-from-mouse-cursor-position-and-solo-item-and-track-under-mouse-for-the-duration": 54456, + "sws-br-toggle-play-from-mouse-cursor-position-and-solo-track-under-mouse-for-the-duration": 54455, + "sws-br-toggle-preview-media-item-under-mouse": 54737, + "sws-br-toggle-preview-media-item-under-mouse-and-pause-during-preview": 54740, + "sws-br-toggle-preview-media-item-under-mouse-and-pause-during-preview-start-from-mouse-cursor-position": 54741, + "sws-br-toggle-preview-media-item-under-mouse-at-track-fader-volume": 54742, + "sws-br-toggle-preview-media-item-under-mouse-at-track-fader-volume-and-pause-during-preview": 54745, + "sws-br-toggle-preview-media-item-under-mouse-at-track-fader-volume-and-pause-during-preview-start-from-mouse-cursor-position": 54746, + "sws-br-toggle-preview-media-item-under-mouse-at-track-fader-volume-start-from-mouse-position": 54743, + "sws-br-toggle-preview-media-item-under-mouse-at-track-fader-volume-sync-with-next-measure": 54744, + "sws-br-toggle-preview-media-item-under-mouse-start-from-mouse-position": 54738, + "sws-br-toggle-preview-media-item-under-mouse-sync-with-next-measure": 54739, + "sws-br-toggle-preview-media-item-under-mouse-through-track": 54747, + "sws-br-toggle-preview-media-item-under-mouse-through-track-and-pause-during-preview": 54750, + "sws-br-toggle-preview-media-item-under-mouse-through-track-and-pause-during-preview-start-from-mouse-cursor-position": 54751, + "sws-br-toggle-preview-media-item-under-mouse-through-track-start-from-mouse-position": 54748, + "sws-br-toggle-preview-media-item-under-mouse-through-track-sync-with-next-measure": 54749, + "sws-br-toggle-preview-take-under-mouse": 54767, + "sws-br-toggle-preview-take-under-mouse-and-pause-during-preview": 54770, + "sws-br-toggle-preview-take-under-mouse-and-pause-during-preview-start-from-mouse-cursor-position": 54771, + "sws-br-toggle-preview-take-under-mouse-at-track-fader-volume": 54772, + "sws-br-toggle-preview-take-under-mouse-at-track-fader-volume-and-pause-during-preview": 54775, + "sws-br-toggle-preview-take-under-mouse-at-track-fader-volume-and-pause-during-preview-start-from-mouse-cursor-position": 54776, + "sws-br-toggle-preview-take-under-mouse-at-track-fader-volume-start-from-mouse-position": 54773, + "sws-br-toggle-preview-take-under-mouse-at-track-fader-volume-sync-with-next-measure": 54774, + "sws-br-toggle-preview-take-under-mouse-start-from-mouse-position": 54768, + "sws-br-toggle-preview-take-under-mouse-sync-with-next-measure": 54769, + "sws-br-toggle-preview-take-under-mouse-through-track": 54777, + "sws-br-toggle-preview-take-under-mouse-through-track-and-pause-during-preview": 54780, + "sws-br-toggle-preview-take-under-mouse-through-track-and-pause-during-preview-start-from-mouse-cursor-position": 54781, + "sws-br-toggle-preview-take-under-mouse-through-track-start-from-mouse-position": 54778, + "sws-br-toggle-preview-take-under-mouse-through-track-sync-with-next-measure": 54779, + "sws-br-toggle-show-active-mute-send-envelopes-for-selected-tracks": 54153, + "sws-br-toggle-show-active-pan-send-envelopes-for-selected-tracks": 54152, + "sws-br-toggle-show-active-volume-send-envelopes-for-selected-tracks": 54151, + "sws-br-toggle-show-all-active-fx-envelopes-for-selected-tracks": 54145, + "sws-br-toggle-show-all-active-send-envelopes-for-selected-tracks": 54150, + "sws-br-toggle-show-all-fx-envelopes-for-selected-tracks": 54146, + "sws-br-toggle-show-all-send-envelopes-for-selected-tracks": 54158, + "sws-br-toggle-show-mute-send-envelopes-for-selected-tracks": 54161, + "sws-br-toggle-show-pan-send-envelopes-for-selected-tracks": 54160, + "sws-br-toggle-show-volume-send-envelopes-for-selected-tracks": 54159, + "sws-br-trim-midi-item-to-active-content": 54469, + "sws-br-unselect-envelope": 54099, + "sws-br-unselect-envelope-points-in-time-selection": 54060, + "sws-br-unselect-envelope-points-outside-time-selection": 54059, + "sws-bypass-fx-on-selected-track-s": 53730, + "sws-clear-all-snapshot-filter-options": 53190, + "sws-clear-all-takes-preserve-pitch": 53624, + "sws-clear-tracklist-filter": 53214, + "sws-convert-markers-to-regions": 53098, + "sws-convert-regions-to-markers": 53099, + "sws-copy-current-snapshot": 53168, + "sws-copy-items-tracks-env-obey-time-selection-razor-edit-areas": 53576, + "sws-copy-marker-set-to-clipboard": 53086, + "sws-copy-markers-in-time-selection-to-clipboard-relative-to-selection-start": 53087, + "sws-copy-new-snapshot-all-track-s": 53170, + "sws-copy-new-snapshot-selected-track-s": 53169, + "sws-create-and-select-first-track": 53742, + "sws-create-regions-from-selected-items-name-by-active-take": 53110, + "sws-crossfade-adjacent-selected-items-move-edges-of-adjacent-items": 53633, + "sws-cut-items-tracks-env-obey-time-selection-razor-edit-areas": 53577, + "sws-decrease-item-rate-by-0-6-percent-10-cents-preserving-length-clear-preserve-pitch": 53635, + "sws-decrease-item-rate-by-6-percent-one-semitone-preserving-length-clear-preserve-pitch": 53637, + "sws-delete-all-items-on-selected-track-s": 53609, + "sws-delete-all-markers": 53093, + "sws-delete-all-regions": 53094, + "sws-delete-all-snapshots": 53175, + "sws-delete-current-snapshot": 53174, + "sws-delete-marker-set": 53085, + "sws-delete-related-project": 53219, + "sws-delete-selected-track-s-from-all-snapshots": 53160, + "sws-delete-selected-track-s-from-current-snapshot": 53159, + "sws-delete-track-s-with-children-prompt": 53743, + "sws-disable-checking-for-duplicate-inputs-when-recording": 53691, + "sws-disable-marker-actions": 53105, + "sws-disable-master-fx": 53735, + "sws-disable-master-parent-send-on-selected-track-s": 53694, + "sws-enable-checking-for-duplicate-inputs-when-recording": 53690, + "sws-enable-marker-actions": 53104, + "sws-enable-master-fx": 53734, + "sws-enable-master-parent-send-on-selected-track-s": 53693, + "sws-export-formatted-marker-list-to-clipboard": 53095, + "sws-export-formatted-marker-list-to-file": 53096, + "sws-exported-marker-list-format": 53097, + "sws-fng-apply-groove-to-selected-media-items-within-16th": 53893, + "sws-fng-apply-groove-to-selected-media-items-within-32nd": 53894, + "sws-fng-apply-groove-to-selected-midi-notes-in-active-midi-editor-within-16th": 53895, + "sws-fng-apply-groove-to-selected-midi-notes-in-active-midi-editor-within-32nd": 53896, + "sws-fng-apply-midi-hardware-emulation-to-selected-midi-takes": 53886, + "sws-fng-apply-selected-groove-use-curent-settings-from-opened-groove-tool": 53911, + "sws-fng-clean-selected-overlapping-media-items-on-same-track": 53863, + "sws-fng-compress-amplitude-of-selected-envelope-points-around-midpoint": 53853, + "sws-fng-contract-selected-media-items": 53857, + "sws-fng-contract-selected-media-items-by-1-2": 53862, + "sws-fng-contract-selected-media-items-fine": 53859, + "sws-fng-cycle-through-cc-lanes-in-active-midi-editor": 53912, + "sws-fng-cycle-through-cc-lanes-in-active-midi-editor-keep-lane-heights-constant": 53913, + "sws-fng-decrease-selected-midi-items-velocity-by-1": 53877, + "sws-fng-decrease-selected-midi-items-velocity-by-10": 53879, + "sws-fng-expand-amplitude-of-selected-envelope-points-around-midpoint": 53852, + "sws-fng-expand-contract-selected-media-items-to-bar": 53860, + "sws-fng-expand-selected-media-items": 53856, + "sws-fng-expand-selected-media-items-by-2": 53861, + "sws-fng-expand-selected-media-items-fine": 53858, + "sws-fng-get-groove-from-selected-media-items": 53897, + "sws-fng-get-groove-from-selected-midi-notes-in-active-midi-editor": 53898, + "sws-fng-hide-unused-cc-lanes-in-active-midi-editor": 53915, + "sws-fng-increase-selected-midi-items-velocity-by-1": 53876, + "sws-fng-increase-selected-midi-items-velocity-by-10": 53878, + "sws-fng-insert-midi-item-with-note-c4-of-size-32nd": 53870, + "sws-fng-legato-selected-media-items-on-same-track": 53864, + "sws-fng-legato-selected-media-items-on-same-track-change-rate": 53865, + "sws-fng-load-groove-template-from-file": 53900, + "sws-fng-midi-hardware-emulation-settings": 53887, + "sws-fng-move-selected-envelope-points-down": 53847, + "sws-fng-move-selected-envelope-points-left-16th": 53843, + "sws-fng-move-selected-envelope-points-left-32nd": 53845, + "sws-fng-move-selected-envelope-points-right-16th": 53842, + "sws-fng-move-selected-envelope-points-right-32nd": 53844, + "sws-fng-move-selected-envelope-points-up": 53846, + "sws-fng-move-selected-items-to-edit-cursor": 53884, + "sws-fng-quantize-item-positions-and-midi-note-positions-to-grid": 53889, + "sws-fng-rotate-selected-media-items-positions": 53866, + "sws-fng-rotate-selected-media-items-positions-and-lengths": 53867, + "sws-fng-rotate-selected-media-items-positions-and-lengths-reverse": 53869, + "sws-fng-rotate-selected-media-items-positions-reverse": 53868, + "sws-fng-save-groove-template-to-file": 53899, + "sws-fng-select-muted-midi-notes-in-active-midi-editor": 53888, + "sws-fng-select-notes-nearest-edit-cursor-in-active-midi-editor": 53890, + "sws-fng-set-groove-marker-start-to-current-bar": 53907, + "sws-fng-set-groove-marker-start-to-edit-cursor": 53906, + "sws-fng-set-selected-midi-items-name-to-first-note": 53875, + "sws-fng-shift-selected-envelope-points-down-on-left": 53851, + "sws-fng-shift-selected-envelope-points-down-on-right": 53849, + "sws-fng-shift-selected-envelope-points-up-on-left": 53850, + "sws-fng-shift-selected-envelope-points-up-on-right": 53848, + "sws-fng-show-current-groove-template": 53901, + "sws-fng-show-groove-tool": 53908, + "sws-fng-show-only-top-cc-lane-in-active-midi-editor": 53916, + "sws-fng-show-only-used-cc-lanes-in-active-midi-editor": 53914, + "sws-fng-time-compress-selected-envelope-points": 53854, + "sws-fng-time-compress-selected-items-by-1-2": 53881, + "sws-fng-time-compress-selected-items-fine": 53883, + "sws-fng-time-stretch-selected-envelope-points": 53855, + "sws-fng-time-stretch-selected-items-by-2": 53880, + "sws-fng-time-stretch-selected-items-fine": 53882, + "sws-fng-toggle-groove-markers": 53902, + "sws-fng-toggle-groove-markers-2x": 53903, + "sws-fng-toggle-groove-markers-4x": 53904, + "sws-fng-toggle-groove-markers-8x": 53905, + "sws-fng-transpose-selected-midi-items-down-a-semitone": 53872, + "sws-fng-transpose-selected-midi-items-down-an-octave": 53874, + "sws-fng-transpose-selected-midi-items-up-a-semitone": 53871, + "sws-fng-transpose-selected-midi-items-up-an-octave": 53873, + "sws-fng-unselect-items-that-do-not-start-in-time-selection": 53885, + "sws-go-to-end-of-project-including-markers-regions": 53100, + "sws-go-to-time-select-next-marker-region": 53101, + "sws-go-to-time-select-previous-marker-region": 53102, + "sws-gofer-split-selected-items-at-mouse-cursor-obey-snapping": 55165, + "sws-hide-all-tracks": 53209, + "sws-hide-dockers": 53684, + "sws-hide-master-track-in-track-control-panel": 53686, + "sws-hide-selected-track-s": 53198, + "sws-hide-selected-track-s-from-mcp": 53201, + "sws-hide-selected-track-s-from-tcp": 53202, + "sws-hide-unselected-track-s": 53213, + "sws-horizontal-scroll-to-put-edit-cursor-at-10-percent": 53780, + "sws-horizontal-scroll-to-put-edit-cursor-at-50-percent": 53781, + "sws-horizontal-scroll-to-put-play-cursor-at-10-percent": 53782, + "sws-horizontal-scroll-to-put-play-cursor-at-50-percent": 53783, + "sws-horizontal-zoom-to-selected-items": 53792, + "sws-ignore-next-marker-action": 53107, + "sws-increase-item-rate-by-0-6-percent-10-cents-preserving-length-clear-preserve-pitch": 53634, + "sws-increase-item-rate-by-6-percent-one-semitone-preserving-length-clear-preserve-pitch": 53636, + "sws-indent-selected-track-s": 53603, + "sws-insert-file-matching-selected-track-s-name": 53613, + "sws-insert-track-above-selected-tracks": 53741, + "sws-ix-import-m3u-pls-playlist": 53937, + "sws-ix-label-processor": 53936, + "sws-load-marker-set": 53083, + "sws-loop-section-of-selected-item-s": 53610, + "sws-make-folder-from-selected-tracks": 53602, + "sws-metronome-disable": 53689, + "sws-metronome-enable": 53688, + "sws-minimize-selected-track-s": 53736, + "sws-move-cursor-and-time-selection-left-to-grid": 53588, + "sws-move-cursor-and-time-selection-right-to-grid": 53589, + "sws-move-cursor-left-1-sample-on-grid": 53590, + "sws-move-cursor-left-1ms": 53592, + "sws-move-cursor-left-5ms": 53594, + "sws-move-cursor-left-by-default-fade-length": 53596, + "sws-move-cursor-right-1-sample-on-grid": 53591, + "sws-move-cursor-right-1ms": 53593, + "sws-move-cursor-right-5ms": 53595, + "sws-move-cursor-right-by-default-fade-length": 53597, + "sws-move-cursor-to-item-peak-sample": 53568, + "sws-move-selected-item-s-left-edge-to-edit-cursor": 53611, + "sws-move-selected-item-s-right-edge-to-edit-cursor": 53612, + "sws-mute-all-receives-for-selected-track-s": 53725, + "sws-mute-all-sends-from-selected-track-s": 53728, + "sws-mute-children-of-selected-folder-s": 53598, + "sws-new-snapshot-all-tracks": 53162, + "sws-new-snapshot-and-edit-name": 53173, + "sws-new-snapshot-selected-track-s": 53163, + "sws-new-snapshot-with-current-settings": 53172, + "sws-nf-bypass-fx-except-vsti-for-selected-tracks": 54923, + "sws-nf-cycle-through-midi-recording-modes": 54931, + "sws-nf-cycle-through-track-automation-modes": 54933, + "sws-nf-disable-multichannel-metering-all-tracks": 54927, + "sws-nf-disable-multichannel-metering-selected-tracks": 54928, + "sws-nf-enable-multichannel-metering-all-tracks": 54929, + "sws-nf-enable-multichannel-metering-selected-tracks": 54930, + "sws-nf-eraser-tool-marquee-sel-items-and-time-cut-on-shortcut-release": 54874, + "sws-nf-eraser-tool-marquee-sel-items-and-time-ignoring-snap-cut-on-shortcut-release": 54873, + "sws-nf-play-stop-or-play-pause-obey-sws-nf-toggle-play-stop-or-play-pause-toggle-state": 54937, + "sws-nf-toggle-obey-track-height-lock-in-vertical-zoom-and-track-height-actions": 54935, + "sws-nf-toggle-play-stop-off-or-play-pause-on": 54936, + "sws-nf-toggle-render-speed-apply-fx-render-stems-realtime-not-limited": 54934, + "sws-normalize-item-s-to-peak-rms": 53573, + "sws-normalize-items-to-overall-peak-rms": 53574, + "sws-normalize-items-to-rms-entire-item": 53572, + "sws-nudge-items-position-1-sample-left": 53263, + "sws-nudge-items-position-1-sample-right": 53262, + "sws-nudge-marker-under-cursor-left": 53108, + "sws-nudge-marker-under-cursor-right": 53109, + "sws-nudge-master-output-1-volume-1db": 53723, + "sws-nudge-master-output-1-volume-plus-1db": 53722, + "sws-open-auto-color-icon-layout-window": 53000, + "sws-open-color-management-window": 53007, + "sws-open-console": 53111, + "sws-open-console-and-copy-keystroke": 53112, + "sws-open-console-with-a-to-arm-track-s": 53116, + "sws-open-console-with-b-to-prefix-track-s": 53120, + "sws-open-console-with-c-to-color-track-s": 53122, + "sws-open-console-with-f-to-toggle-fx-enable": 53118, + "sws-open-console-with-h-to-flip-phase-on-track-s": 53123, + "sws-open-console-with-i-to-set-track-s-input": 53119, + "sws-open-console-with-l-to-set-track-s-number-channels": 53128, + "sws-open-console-with-m-to-mute-track-s": 53117, + "sws-open-console-with-n-to-name-track-s": 53114, + "sws-open-console-with-o-to-solo-track-s": 53115, + "sws-open-console-with-p-to-set-track-s-pan": 53125, + "sws-open-console-with-p-to-trim-pan-on-track-s": 53127, + "sws-open-console-with-s-to-select-track-s": 53113, + "sws-open-console-with-to-add-action-marker": 53129, + "sws-open-console-with-v-to-set-track-s-volume": 53124, + "sws-open-console-with-v-to-trim-volume-on-track-s": 53126, + "sws-open-console-with-z-to-suffix-track-s": 53121, + "sws-open-last-project": 53222, + "sws-open-marker-list": 53082, + "sws-open-project-list": 53220, + "sws-open-projects-from-list": 53217, + "sws-open-related-project-1": 53221, + "sws-open-snapshots-window": 53156, + "sws-organize-items-by-peak": 53569, + "sws-organize-items-by-peak-rms": 53571, + "sws-organize-items-by-rms-entire-item": 53570, + "sws-padre-envelope-lfo-generator": 53922, + "sws-padre-envelope-processor": 53923, + "sws-padre-shrink-selected-items-1024-samples": 53927, + "sws-padre-shrink-selected-items-128-samples": 53924, + "sws-padre-shrink-selected-items-2048-samples": 53928, + "sws-padre-shrink-selected-items-256-samples": 53925, + "sws-padre-shrink-selected-items-512-samples": 53926, + "sws-paste-marker-set-from-clipboard": 53088, + "sws-paste-snapshot": 53171, + "sws-pitch-all-takes-down-one-cent": 53630, + "sws-pitch-all-takes-down-one-octave": 53632, + "sws-pitch-all-takes-down-one-semitone": 53631, + "sws-pitch-all-takes-up-one-cent": 53627, + "sws-pitch-all-takes-up-one-octave": 53629, + "sws-pitch-all-takes-up-one-semitone": 53628, + "sws-quantize-item-s-edges-to-grid-change-length": 53618, + "sws-quantize-item-s-end-to-grid-change-length": 53617, + "sws-quantize-item-s-end-to-grid-keep-length": 53616, + "sws-quantize-item-s-start-to-grid-change-length": 53615, + "sws-quantize-item-s-start-to-grid-keep-length": 53614, + "sws-recall-current-snapshot": 53165, + "sws-recall-next-snapshot": 53167, + "sws-recall-previous-snapshot": 53166, + "sws-recall-snapshot-1": 55731, + "sws-recall-snapshot-10": 55740, + "sws-recall-snapshot-11": 55741, + "sws-recall-snapshot-12": 55742, + "sws-recall-snapshot-2": 55732, + "sws-recall-snapshot-3": 55733, + "sws-recall-snapshot-4": 55734, + "sws-recall-snapshot-5": 55735, + "sws-recall-snapshot-6": 55736, + "sws-recall-snapshot-7": 55737, + "sws-recall-snapshot-8": 55738, + "sws-recall-snapshot-9": 55739, + "sws-redo-edit-cursor-move": 53587, + "sws-redo-zoom": 53837, + "sws-remove-items-tracks-env-obey-time-selection-razor-edit-areas": 53578, + "sws-renumber-marker-ids": 53089, + "sws-renumber-region-ids": 53090, + "sws-reset-all-takes-pitch": 53626, + "sws-reset-item-rate-preserving-length-clear-preserve-pitch": 53638, + "sws-restore-active-takes-on-selected-track-s": 53133, + "sws-restore-arrange-view-slot-1": 53831, + "sws-restore-arrange-view-slot-2": 53832, + "sws-restore-arrange-view-slot-3": 53833, + "sws-restore-arrange-view-slot-4": 53834, + "sws-restore-arrange-view-slot-5": 53835, + "sws-restore-auto-crossfade-state": 53667, + "sws-restore-last-item-selection-on-selected-track-s": 53144, + "sws-restore-loop-selection-next-slot": 53150, + "sws-restore-loop-selection-slot-1": 55802, + "sws-restore-loop-selection-slot-2": 55803, + "sws-restore-loop-selection-slot-3": 55804, + "sws-restore-loop-selection-slot-4": 55805, + "sws-restore-loop-selection-slot-5": 55806, + "sws-restore-master-fx-enabled-state": 53733, + "sws-restore-saved-selected-item-s": 53146, + "sws-restore-saved-track-selection": 53750, + "sws-restore-selected-track-s-items-states": 53152, + "sws-restore-selected-track-s-mutes-plus-receives-children": 53148, + "sws-restore-selected-track-s-selected-item-s-slot-1": 53139, + "sws-restore-selected-track-s-selected-item-s-slot-2": 53140, + "sws-restore-selected-track-s-selected-item-s-slot-3": 53141, + "sws-restore-selected-track-s-selected-item-s-slot-4": 53142, + "sws-restore-selected-track-s-selected-item-s-slot-5": 53143, + "sws-restore-selected-track-s-selected-items-states": 53154, + "sws-restore-snapshot-filter-options": 53192, + "sws-restore-time-selection-next-slot": 53149, + "sws-restore-time-selection-slot-1": 55792, + "sws-restore-time-selection-slot-2": 55793, + "sws-restore-time-selection-slot-3": 55794, + "sws-restore-time-selection-slot-4": 55795, + "sws-restore-time-selection-slot-5": 55796, + "sws-restore-transport-repeat-state": 53680, + "sws-run-action-marker-under-cursor": 53106, + "sws-s-and-m-active-midi-editor-create-cc-lane": 55168, + "sws-s-and-m-active-midi-editor-hide-all-cc-lanes": 55167, + "sws-s-and-m-active-midi-editor-restore-displayed-cc-lanes-slot-1": 55515, + "sws-s-and-m-active-midi-editor-restore-displayed-cc-lanes-slot-2": 55516, + "sws-s-and-m-active-midi-editor-restore-displayed-cc-lanes-slot-3": 55517, + "sws-s-and-m-active-midi-editor-restore-displayed-cc-lanes-slot-4": 55518, + "sws-s-and-m-active-midi-editor-restore-displayed-cc-lanes-slot-5": 55519, + "sws-s-and-m-active-midi-editor-restore-displayed-cc-lanes-slot-6": 55520, + "sws-s-and-m-active-midi-editor-restore-displayed-cc-lanes-slot-7": 55521, + "sws-s-and-m-active-midi-editor-restore-displayed-cc-lanes-slot-8": 55522, + "sws-s-and-m-active-midi-editor-save-displayed-cc-lanes-slot-1": 55523, + "sws-s-and-m-active-midi-editor-save-displayed-cc-lanes-slot-2": 55524, + "sws-s-and-m-active-midi-editor-save-displayed-cc-lanes-slot-3": 55525, + "sws-s-and-m-active-midi-editor-save-displayed-cc-lanes-slot-4": 55526, + "sws-s-and-m-active-midi-editor-save-displayed-cc-lanes-slot-5": 55527, + "sws-s-and-m-active-midi-editor-save-displayed-cc-lanes-slot-6": 55528, + "sws-s-and-m-active-midi-editor-save-displayed-cc-lanes-slot-7": 55529, + "sws-s-and-m-active-midi-editor-save-displayed-cc-lanes-slot-8": 55530, + "sws-s-and-m-arm-all-active-envelopes-for-selected-tracks": 55209, + "sws-s-and-m-bypass-all-fx-except-1-for-selected-tracks": 55355, + "sws-s-and-m-bypass-all-fx-except-2-for-selected-tracks": 55356, + "sws-s-and-m-bypass-all-fx-except-3-for-selected-tracks": 55357, + "sws-s-and-m-bypass-all-fx-except-4-for-selected-tracks": 55358, + "sws-s-and-m-bypass-all-fx-except-5-for-selected-tracks": 55359, + "sws-s-and-m-bypass-all-fx-except-6-for-selected-tracks": 55360, + "sws-s-and-m-bypass-all-fx-except-7-for-selected-tracks": 55361, + "sws-s-and-m-bypass-all-fx-except-8-for-selected-tracks": 55362, + "sws-s-and-m-bypass-all-fx-for-selected-tracks": 55004, + "sws-s-and-m-bypass-all-take-fx-for-selected-items": 55012, + "sws-s-and-m-bypass-fx-1-for-selected-tracks": 55323, + "sws-s-and-m-bypass-fx-2-for-selected-tracks": 55324, + "sws-s-and-m-bypass-fx-3-for-selected-tracks": 55325, + "sws-s-and-m-bypass-fx-4-for-selected-tracks": 55326, + "sws-s-and-m-bypass-fx-5-for-selected-tracks": 55327, + "sws-s-and-m-bypass-fx-6-for-selected-tracks": 55328, + "sws-s-and-m-bypass-fx-7-for-selected-tracks": 55329, + "sws-s-and-m-bypass-fx-8-for-selected-tracks": 55330, + "sws-s-and-m-bypass-last-fx-for-selected-tracks": 54999, + "sws-s-and-m-bypass-selected-fx-for-selected-tracks": 55000, + "sws-s-and-m-clear-fx-chain-for-selected-items": 55029, + "sws-s-and-m-clear-fx-chain-for-selected-items-all-takes": 55030, + "sws-s-and-m-clear-fx-chain-for-selected-tracks": 55031, + "sws-s-and-m-clear-global-startup-action": 55046, + "sws-s-and-m-clear-image-window": 55048, + "sws-s-and-m-clear-input-fx-chain-for-selected-tracks": 55032, + "sws-s-and-m-clear-project-startup-action": 55043, + "sws-s-and-m-close-all-floating-fx-windows": 54961, + "sws-s-and-m-close-all-floating-fx-windows-except-focused-one": 54964, + "sws-s-and-m-close-all-floating-fx-windows-for-selected-tracks": 54963, + "sws-s-and-m-close-all-fx-chain-windows": 54962, + "sws-s-and-m-copy-active-takes": 55133, + "sws-s-and-m-copy-fx-chain-depending-on-focus": 55033, + "sws-s-and-m-copy-fx-chain-from-selected-item": 55015, + "sws-s-and-m-copy-fx-chain-from-selected-track": 55019, + "sws-s-and-m-copy-input-fx-chain-from-selected-track": 55025, + "sws-s-and-m-copy-selected-track-grouping": 55171, + "sws-s-and-m-copy-selected-tracks-receives": 54953, + "sws-s-and-m-copy-selected-tracks-routings": 54947, + "sws-s-and-m-copy-selected-tracks-sends": 54950, + "sws-s-and-m-copy-selected-tracks-with-routing": 54944, + "sws-s-and-m-create-cue-buss-from-track-selection-settings-1": 55291, + "sws-s-and-m-create-cue-buss-from-track-selection-settings-2": 55292, + "sws-s-and-m-create-cue-buss-from-track-selection-settings-3": 55293, + "sws-s-and-m-create-cue-buss-from-track-selection-settings-4": 55294, + "sws-s-and-m-create-cue-buss-from-track-selection-settings-5": 55295, + "sws-s-and-m-create-cue-buss-from-track-selection-settings-6": 55296, + "sws-s-and-m-create-cue-buss-from-track-selection-settings-7": 55297, + "sws-s-and-m-create-cue-buss-from-track-selection-settings-8": 55298, + "sws-s-and-m-create-cue-buss-from-track-selection-use-last-settings": 54939, + "sws-s-and-m-cut-active-takes": 55134, + "sws-s-and-m-cut-fx-chain-depending-on-focus": 55036, + "sws-s-and-m-cut-fx-chain-from-selected-items": 55016, + "sws-s-and-m-cut-fx-chain-from-selected-tracks": 55020, + "sws-s-and-m-cut-input-fx-chain-from-selected-tracks": 55026, + "sws-s-and-m-cut-selected-tracks-grouping": 55172, + "sws-s-and-m-cut-selected-tracks-receives": 54955, + "sws-s-and-m-cut-selected-tracks-routings": 54949, + "sws-s-and-m-cut-selected-tracks-sends": 54952, + "sws-s-and-m-cut-selected-tracks-with-routing": 54946, + "sws-s-and-m-decrease-metronome-volume": 55262, + "sws-s-and-m-delete-active-take-and-source-file-in-selected-items-no-undo": 55147, + "sws-s-and-m-delete-active-take-and-source-file-in-selected-items-prompt-no-undo": 55146, + "sws-s-and-m-delete-selected-items-takes-and-source-files-no-undo": 55145, + "sws-s-and-m-delete-selected-items-takes-and-source-files-prompt-no-undo": 55144, + "sws-s-and-m-disarm-all-active-envelopes-for-selected-tracks": 55210, + "sws-s-and-m-dummy-toggle-1": 55675, + "sws-s-and-m-dummy-toggle-2": 55676, + "sws-s-and-m-dummy-toggle-3": 55677, + "sws-s-and-m-dummy-toggle-4": 55678, + "sws-s-and-m-dummy-toggle-5": 55679, + "sws-s-and-m-dummy-toggle-6": 55680, + "sws-s-and-m-dummy-toggle-7": 55681, + "sws-s-and-m-dummy-toggle-8": 55682, + "sws-s-and-m-dump-action-list-all-actions": 55271, + "sws-s-and-m-dump-action-list-all-but-custom-actions": 55270, + "sws-s-and-m-dump-action-list-custom-actions-only": 55269, + "sws-s-and-m-dump-action-list-native-actions-only": 55267, + "sws-s-and-m-dump-action-list-sws-actions-only": 55268, + "sws-s-and-m-dump-alr-wiki-summary-native-actions-only": 55265, + "sws-s-and-m-dump-alr-wiki-summary-sws-actions-only": 55266, + "sws-s-and-m-exclusive-toggle-a1": 55683, + "sws-s-and-m-exclusive-toggle-a2": 55684, + "sws-s-and-m-exclusive-toggle-a3": 55685, + "sws-s-and-m-exclusive-toggle-a4": 55686, + "sws-s-and-m-exclusive-toggle-b1": 55687, + "sws-s-and-m-exclusive-toggle-b2": 55688, + "sws-s-and-m-exclusive-toggle-b3": 55689, + "sws-s-and-m-exclusive-toggle-b4": 55690, + "sws-s-and-m-exclusive-toggle-c1": 55691, + "sws-s-and-m-exclusive-toggle-c2": 55692, + "sws-s-and-m-exclusive-toggle-c3": 55693, + "sws-s-and-m-exclusive-toggle-c4": 55694, + "sws-s-and-m-exclusive-toggle-d1": 55695, + "sws-s-and-m-exclusive-toggle-d2": 55696, + "sws-s-and-m-exclusive-toggle-d3": 55697, + "sws-s-and-m-exclusive-toggle-d4": 55698, + "sws-s-and-m-find": 55227, + "sws-s-and-m-find-next": 55228, + "sws-s-and-m-find-previous": 55229, + "sws-s-and-m-float-fx-1-for-selected-tracks": 55491, + "sws-s-and-m-float-fx-2-for-selected-tracks": 55492, + "sws-s-and-m-float-fx-3-for-selected-tracks": 55493, + "sws-s-and-m-float-fx-4-for-selected-tracks": 55494, + "sws-s-and-m-float-fx-5-for-selected-tracks": 55495, + "sws-s-and-m-float-fx-6-for-selected-tracks": 55496, + "sws-s-and-m-float-fx-7-for-selected-tracks": 55497, + "sws-s-and-m-float-fx-8-for-selected-tracks": 55498, + "sws-s-and-m-float-next-fx-and-close-others-for-selected-tracks": 54972, + "sws-s-and-m-float-previous-fx-and-close-others-for-selected-tracks": 54971, + "sws-s-and-m-float-selected-fx-for-selected-tracks": 54981, + "sws-s-and-m-focus-main-window-only-valid-within-custom-actions": 54977, + "sws-s-and-m-focus-next-floating-fx-cycle": 54976, + "sws-s-and-m-focus-next-floating-fx-for-selected-tracks-cycle": 54974, + "sws-s-and-m-focus-previous-floating-fx-cycle": 54975, + "sws-s-and-m-focus-previous-floating-fx-for-selected-tracks-cycle": 54973, + "sws-s-and-m-go-to-time-select-region-1-obeys-smooth-seek": 55671, + "sws-s-and-m-go-to-time-select-region-2-obeys-smooth-seek": 55672, + "sws-s-and-m-go-to-time-select-region-3-obeys-smooth-seek": 55673, + "sws-s-and-m-go-to-time-select-region-4-obeys-smooth-seek": 55674, + "sws-s-and-m-hide-and-bypass-take-mute-envelope": 55189, + "sws-s-and-m-hide-and-bypass-take-pan-envelope": 55188, + "sws-s-and-m-hide-and-bypass-take-pitch-envelope": 55200, + "sws-s-and-m-hide-and-bypass-take-volume-envelope": 55187, + "sws-s-and-m-hide-fx-chain-windows-for-selected-tracks": 54979, + "sws-s-and-m-hide-take-mute-envelope": 55195, + "sws-s-and-m-hide-take-pan-envelope": 55194, + "sws-s-and-m-hide-take-pitch-envelope": 55202, + "sws-s-and-m-hide-take-volume-envelope": 55193, + "sws-s-and-m-increase-metronome-volume": 55261, + "sws-s-and-m-insert-marker-at-edit-cursor": 55257, + "sws-s-and-m-insert-marker-at-play-cursor": 55258, + "sws-s-and-m-insert-silence-measures-beats": 55040, + "sws-s-and-m-insert-silence-samples": 55041, + "sws-s-and-m-insert-silence-seconds": 55039, + "sws-s-and-m-live-config-number-1-apply-config-midi-osc-only": 55563, + "sws-s-and-m-live-config-number-1-apply-next-config": 55579, + "sws-s-and-m-live-config-number-1-apply-preloaded-config-swap-preload-current": 55611, + "sws-s-and-m-live-config-number-1-apply-previous-config": 55587, + "sws-s-and-m-live-config-number-1-open-close-monitoring-window": 55555, + "sws-s-and-m-live-config-number-1-preload-config-midi-osc-only": 55571, + "sws-s-and-m-live-config-number-1-preload-next-config": 55595, + "sws-s-and-m-live-config-number-1-preload-previous-config": 55603, + "sws-s-and-m-live-config-number-1-toggle-enable": 55619, + "sws-s-and-m-live-config-number-1-toggle-enable-tiny-fades": 55659, + "sws-s-and-m-live-config-number-1-toggle-option-disarm-all-but-active-track": 55643, + "sws-s-and-m-live-config-number-1-toggle-option-mute-all-but-active-track": 55627, + "sws-s-and-m-live-config-number-1-toggle-option-offline-all-but-active-preloaded-tracks": 55635, + "sws-s-and-m-live-config-number-1-toggle-option-send-all-notes-off-when-switching-configs": 55651, + "sws-s-and-m-live-config-number-2-apply-config-midi-osc-only": 55564, + "sws-s-and-m-live-config-number-2-apply-next-config": 55580, + "sws-s-and-m-live-config-number-2-apply-preloaded-config-swap-preload-current": 55612, + "sws-s-and-m-live-config-number-2-apply-previous-config": 55588, + "sws-s-and-m-live-config-number-2-open-close-monitoring-window": 55556, + "sws-s-and-m-live-config-number-2-preload-config-midi-osc-only": 55572, + "sws-s-and-m-live-config-number-2-preload-next-config": 55596, + "sws-s-and-m-live-config-number-2-preload-previous-config": 55604, + "sws-s-and-m-live-config-number-2-toggle-enable": 55620, + "sws-s-and-m-live-config-number-2-toggle-enable-tiny-fades": 55660, + "sws-s-and-m-live-config-number-2-toggle-option-disarm-all-but-active-track": 55644, + "sws-s-and-m-live-config-number-2-toggle-option-mute-all-but-active-track": 55628, + "sws-s-and-m-live-config-number-2-toggle-option-offline-all-but-active-preloaded-tracks": 55636, + "sws-s-and-m-live-config-number-2-toggle-option-send-all-notes-off-when-switching-configs": 55652, + "sws-s-and-m-live-config-number-3-apply-config-midi-osc-only": 55565, + "sws-s-and-m-live-config-number-3-apply-next-config": 55581, + "sws-s-and-m-live-config-number-3-apply-preloaded-config-swap-preload-current": 55613, + "sws-s-and-m-live-config-number-3-apply-previous-config": 55589, + "sws-s-and-m-live-config-number-3-open-close-monitoring-window": 55557, + "sws-s-and-m-live-config-number-3-preload-config-midi-osc-only": 55573, + "sws-s-and-m-live-config-number-3-preload-next-config": 55597, + "sws-s-and-m-live-config-number-3-preload-previous-config": 55605, + "sws-s-and-m-live-config-number-3-toggle-enable": 55621, + "sws-s-and-m-live-config-number-3-toggle-enable-tiny-fades": 55661, + "sws-s-and-m-live-config-number-3-toggle-option-disarm-all-but-active-track": 55645, + "sws-s-and-m-live-config-number-3-toggle-option-mute-all-but-active-track": 55629, + "sws-s-and-m-live-config-number-3-toggle-option-offline-all-but-active-preloaded-tracks": 55637, + "sws-s-and-m-live-config-number-3-toggle-option-send-all-notes-off-when-switching-configs": 55653, + "sws-s-and-m-live-config-number-4-apply-config-midi-osc-only": 55566, + "sws-s-and-m-live-config-number-4-apply-next-config": 55582, + "sws-s-and-m-live-config-number-4-apply-preloaded-config-swap-preload-current": 55614, + "sws-s-and-m-live-config-number-4-apply-previous-config": 55590, + "sws-s-and-m-live-config-number-4-open-close-monitoring-window": 55558, + "sws-s-and-m-live-config-number-4-preload-config-midi-osc-only": 55574, + "sws-s-and-m-live-config-number-4-preload-next-config": 55598, + "sws-s-and-m-live-config-number-4-preload-previous-config": 55606, + "sws-s-and-m-live-config-number-4-toggle-enable": 55622, + "sws-s-and-m-live-config-number-4-toggle-enable-tiny-fades": 55662, + "sws-s-and-m-live-config-number-4-toggle-option-disarm-all-but-active-track": 55646, + "sws-s-and-m-live-config-number-4-toggle-option-mute-all-but-active-track": 55630, + "sws-s-and-m-live-config-number-4-toggle-option-offline-all-but-active-preloaded-tracks": 55638, + "sws-s-and-m-live-config-number-4-toggle-option-send-all-notes-off-when-switching-configs": 55654, + "sws-s-and-m-live-config-number-5-apply-config-midi-osc-only": 55567, + "sws-s-and-m-live-config-number-5-apply-next-config": 55583, + "sws-s-and-m-live-config-number-5-apply-preloaded-config-swap-preload-current": 55615, + "sws-s-and-m-live-config-number-5-apply-previous-config": 55591, + "sws-s-and-m-live-config-number-5-open-close-monitoring-window": 55559, + "sws-s-and-m-live-config-number-5-preload-config-midi-osc-only": 55575, + "sws-s-and-m-live-config-number-5-preload-next-config": 55599, + "sws-s-and-m-live-config-number-5-preload-previous-config": 55607, + "sws-s-and-m-live-config-number-5-toggle-enable": 55623, + "sws-s-and-m-live-config-number-5-toggle-enable-tiny-fades": 55663, + "sws-s-and-m-live-config-number-5-toggle-option-disarm-all-but-active-track": 55647, + "sws-s-and-m-live-config-number-5-toggle-option-mute-all-but-active-track": 55631, + "sws-s-and-m-live-config-number-5-toggle-option-offline-all-but-active-preloaded-tracks": 55639, + "sws-s-and-m-live-config-number-5-toggle-option-send-all-notes-off-when-switching-configs": 55655, + "sws-s-and-m-live-config-number-6-apply-config-midi-osc-only": 55568, + "sws-s-and-m-live-config-number-6-apply-next-config": 55584, + "sws-s-and-m-live-config-number-6-apply-preloaded-config-swap-preload-current": 55616, + "sws-s-and-m-live-config-number-6-apply-previous-config": 55592, + "sws-s-and-m-live-config-number-6-open-close-monitoring-window": 55560, + "sws-s-and-m-live-config-number-6-preload-config-midi-osc-only": 55576, + "sws-s-and-m-live-config-number-6-preload-next-config": 55600, + "sws-s-and-m-live-config-number-6-preload-previous-config": 55608, + "sws-s-and-m-live-config-number-6-toggle-enable": 55624, + "sws-s-and-m-live-config-number-6-toggle-enable-tiny-fades": 55664, + "sws-s-and-m-live-config-number-6-toggle-option-disarm-all-but-active-track": 55648, + "sws-s-and-m-live-config-number-6-toggle-option-mute-all-but-active-track": 55632, + "sws-s-and-m-live-config-number-6-toggle-option-offline-all-but-active-preloaded-tracks": 55640, + "sws-s-and-m-live-config-number-6-toggle-option-send-all-notes-off-when-switching-configs": 55656, + "sws-s-and-m-live-config-number-7-apply-config-midi-osc-only": 55569, + "sws-s-and-m-live-config-number-7-apply-next-config": 55585, + "sws-s-and-m-live-config-number-7-apply-preloaded-config-swap-preload-current": 55617, + "sws-s-and-m-live-config-number-7-apply-previous-config": 55593, + "sws-s-and-m-live-config-number-7-open-close-monitoring-window": 55561, + "sws-s-and-m-live-config-number-7-preload-config-midi-osc-only": 55577, + "sws-s-and-m-live-config-number-7-preload-next-config": 55601, + "sws-s-and-m-live-config-number-7-preload-previous-config": 55609, + "sws-s-and-m-live-config-number-7-toggle-enable": 55625, + "sws-s-and-m-live-config-number-7-toggle-enable-tiny-fades": 55665, + "sws-s-and-m-live-config-number-7-toggle-option-disarm-all-but-active-track": 55649, + "sws-s-and-m-live-config-number-7-toggle-option-mute-all-but-active-track": 55633, + "sws-s-and-m-live-config-number-7-toggle-option-offline-all-but-active-preloaded-tracks": 55641, + "sws-s-and-m-live-config-number-7-toggle-option-send-all-notes-off-when-switching-configs": 55657, + "sws-s-and-m-live-config-number-8-apply-config-midi-osc-only": 55570, + "sws-s-and-m-live-config-number-8-apply-next-config": 55586, + "sws-s-and-m-live-config-number-8-apply-preloaded-config-swap-preload-current": 55618, + "sws-s-and-m-live-config-number-8-apply-previous-config": 55594, + "sws-s-and-m-live-config-number-8-open-close-monitoring-window": 55562, + "sws-s-and-m-live-config-number-8-preload-config-midi-osc-only": 55578, + "sws-s-and-m-live-config-number-8-preload-next-config": 55602, + "sws-s-and-m-live-config-number-8-preload-previous-config": 55610, + "sws-s-and-m-live-config-number-8-toggle-enable": 55626, + "sws-s-and-m-live-config-number-8-toggle-enable-tiny-fades": 55666, + "sws-s-and-m-live-config-number-8-toggle-option-disarm-all-but-active-track": 55650, + "sws-s-and-m-live-config-number-8-toggle-option-mute-all-but-active-track": 55634, + "sws-s-and-m-live-config-number-8-toggle-option-offline-all-but-active-preloaded-tracks": 55642, + "sws-s-and-m-live-config-number-8-toggle-option-send-all-notes-off-when-switching-configs": 55658, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-1": 55715, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-10": 55724, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-11": 55725, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-12": 55726, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-13": 55727, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-14": 55728, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-15": 55729, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-16": 55730, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-2": 55716, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-3": 55717, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-4": 55718, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-5": 55719, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-6": 55720, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-7": 55721, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-8": 55722, + "sws-s-and-m-map-selected-tracks-midi-input-to-channel-9": 55723, + "sws-s-and-m-map-selected-tracks-midi-input-to-source-channel": 55235, + "sws-s-and-m-move-selected-fx-down-in-chain-for-selected-tracks": 54988, + "sws-s-and-m-move-selected-fx-up-in-chain-for-selected-tracks": 54987, + "sws-s-and-m-notes-export-subtitle-file": 55162, + "sws-s-and-m-notes-import-subtitle-file": 55161, + "sws-s-and-m-notes-toggle-lock": 55160, + "sws-s-and-m-open-close-cue-buss-generator": 54940, + "sws-s-and-m-open-close-cycle-action-editor": 55231, + "sws-s-and-m-open-close-cycle-action-editor-event-list": 55232, + "sws-s-and-m-open-close-cycle-action-editor-piano-roll": 55233, + "sws-s-and-m-open-close-image-window": 55047, + "sws-s-and-m-open-close-live-configs-window": 55230, + "sws-s-and-m-open-close-notes-window": 55148, + "sws-s-and-m-open-close-notes-window-extra-project-notes": 55150, + "sws-s-and-m-open-close-notes-window-global-notes": 55151, + "sws-s-and-m-open-close-notes-window-item-notes": 55152, + "sws-s-and-m-open-close-notes-window-marker-names": 55154, + "sws-s-and-m-open-close-notes-window-marker-region-names": 55156, + "sws-s-and-m-open-close-notes-window-marker-region-subtitles": 55159, + "sws-s-and-m-open-close-notes-window-marker-subtitles": 55157, + "sws-s-and-m-open-close-notes-window-project-notes": 55149, + "sws-s-and-m-open-close-notes-window-region-names": 55155, + "sws-s-and-m-open-close-notes-window-region-subtitles": 55158, + "sws-s-and-m-open-close-notes-window-track-notes": 55153, + "sws-s-and-m-open-close-region-playlist-window": 55236, + "sws-s-and-m-open-close-resources-window": 55049, + "sws-s-and-m-open-close-resources-window-fx-chains": 55050, + "sws-s-and-m-open-close-resources-window-images": 55104, + "sws-s-and-m-open-close-resources-window-media-files": 55084, + "sws-s-and-m-open-close-resources-window-projects": 55074, + "sws-s-and-m-open-close-resources-window-themes": 55111, + "sws-s-and-m-open-close-resources-window-track-templates": 55062, + "sws-s-and-m-open-console-with-to-send-a-local-osc-message": 53131, + "sws-s-and-m-open-console-with-x-to-add-track-fx": 53130, + "sws-s-and-m-open-project-path-in-explorer-finder": 55037, + "sws-s-and-m-open-selected-item-path-in-explorer-finder": 55123, + "sws-s-and-m-pan-active-takes-of-selected-items-to-100-percent-left": 55124, + "sws-s-and-m-pan-active-takes-of-selected-items-to-100-percent-right": 55132, + "sws-s-and-m-pan-active-takes-of-selected-items-to-25-percent-left": 55127, + "sws-s-and-m-pan-active-takes-of-selected-items-to-25-percent-right": 55129, + "sws-s-and-m-pan-active-takes-of-selected-items-to-50-percent-left": 55126, + "sws-s-and-m-pan-active-takes-of-selected-items-to-50-percent-right": 55130, + "sws-s-and-m-pan-active-takes-of-selected-items-to-75-percent-left": 55125, + "sws-s-and-m-pan-active-takes-of-selected-items-to-75-percent-right": 55131, + "sws-s-and-m-pan-active-takes-of-selected-items-to-center": 55128, + "sws-s-and-m-paste-fx-chain-depending-on-focus": 55034, + "sws-s-and-m-paste-fx-chain-to-selected-items": 55022, + "sws-s-and-m-paste-fx-chain-to-selected-items-all-takes": 55023, + "sws-s-and-m-paste-fx-chain-to-selected-tracks": 55024, + "sws-s-and-m-paste-grouping-to-selected-tracks": 55173, + "sws-s-and-m-paste-input-fx-chain-to-selected-tracks": 55028, + "sws-s-and-m-paste-receives-to-selected-tracks": 54954, + "sws-s-and-m-paste-replace-fx-chain-depending-on-focus": 55035, + "sws-s-and-m-paste-replace-fx-chain-to-selected-items": 55017, + "sws-s-and-m-paste-replace-fx-chain-to-selected-items-all-takes": 55018, + "sws-s-and-m-paste-replace-fx-chain-to-selected-tracks": 55021, + "sws-s-and-m-paste-replace-input-fx-chain-to-selected-tracks": 55027, + "sws-s-and-m-paste-routings-to-selected-tracks": 54948, + "sws-s-and-m-paste-sends-to-selected-tracks": 54951, + "sws-s-and-m-paste-takes": 55135, + "sws-s-and-m-paste-takes-after-active-takes": 55136, + "sws-s-and-m-paste-tracks-with-routing-or-items": 54945, + "sws-s-and-m-reassign-midi-learned-channels-of-all-fx-for-selected-tracks-prompt": 55119, + "sws-s-and-m-reassign-midi-learned-channels-of-all-fx-to-input-channel-for-selected-tracks": 55121, + "sws-s-and-m-reassign-midi-learned-channels-of-selected-fx-for-selected-tracks-prompt": 55120, + "sws-s-and-m-recall-default-track-send-preferences": 54957, + "sws-s-and-m-region-playlist-add-all-regions-to-current-playlist": 55256, + "sws-s-and-m-region-playlist-append-playlist-to-project": 55245, + "sws-s-and-m-region-playlist-crop-project-to-playlist": 55243, + "sws-s-and-m-region-playlist-crop-project-to-playlist-new-project-tab": 55244, + "sws-s-and-m-region-playlist-number-1-play": 55667, + "sws-s-and-m-region-playlist-number-2-play": 55668, + "sws-s-and-m-region-playlist-number-3-play": 55669, + "sws-s-and-m-region-playlist-number-4-play": 55670, + "sws-s-and-m-region-playlist-options-disable-shuffle-only-in-region-playlist": 55254, + "sws-s-and-m-region-playlist-options-disable-smooth-seek-only-in-region-playlist": 55251, + "sws-s-and-m-region-playlist-options-enable-shuffle-only-in-region-playlist": 55253, + "sws-s-and-m-region-playlist-options-enable-smooth-seek-only-in-region-playlist": 55250, + "sws-s-and-m-region-playlist-options-toggle-shuffle-only-in-region-playlist": 55255, + "sws-s-and-m-region-playlist-options-toggle-smooth-seek-only-in-region-playlist": 55252, + "sws-s-and-m-region-playlist-paste-playlist-at-edit-cursor": 55246, + "sws-s-and-m-region-playlist-play": 55238, + "sws-s-and-m-region-playlist-play-next-region-based-on-current-playing-region": 55242, + "sws-s-and-m-region-playlist-play-next-region-smooth-seek": 55240, + "sws-s-and-m-region-playlist-play-previous-region-based-on-current-playing-region": 55241, + "sws-s-and-m-region-playlist-play-previous-region-smooth-seek": 55239, + "sws-s-and-m-region-playlist-set-repeat-off": 55247, + "sws-s-and-m-region-playlist-set-repeat-on": 55248, + "sws-s-and-m-region-playlist-toggle-monitoring-edition-mode": 55237, + "sws-s-and-m-region-playlist-toggle-repeat": 55249, + "sws-s-and-m-remove-all-envelopes-for-selected-tracks": 55207, + "sws-s-and-m-remove-receives-from-selected-tracks": 54941, + "sws-s-and-m-remove-routing-from-selected-tracks": 54943, + "sws-s-and-m-remove-selected-fx-for-selected-tracks": 54989, + "sws-s-and-m-remove-sends-from-selected-tracks": 54942, + "sws-s-and-m-remove-track-grouping-for-selected-tracks": 55174, + "sws-s-and-m-resources-add-media-file-to-current-track-last-slot": 55096, + "sws-s-and-m-resources-add-media-file-to-current-track-slot-1": 55435, + "sws-s-and-m-resources-add-media-file-to-current-track-slot-2": 55436, + "sws-s-and-m-resources-add-media-file-to-current-track-slot-3": 55437, + "sws-s-and-m-resources-add-media-file-to-current-track-slot-4": 55438, + "sws-s-and-m-resources-add-media-file-to-new-track-last-slot": 55097, + "sws-s-and-m-resources-add-media-file-to-new-track-slot-1": 55439, + "sws-s-and-m-resources-add-media-file-to-new-track-slot-2": 55440, + "sws-s-and-m-resources-add-media-file-to-new-track-slot-3": 55441, + "sws-s-and-m-resources-add-media-file-to-new-track-slot-4": 55442, + "sws-s-and-m-resources-add-media-file-to-selected-items-as-takes-last-slot": 55098, + "sws-s-and-m-resources-add-media-file-to-selected-items-as-takes-slot-1": 55443, + "sws-s-and-m-resources-add-media-file-to-selected-items-as-takes-slot-2": 55444, + "sws-s-and-m-resources-add-media-file-to-selected-items-as-takes-slot-3": 55445, + "sws-s-and-m-resources-add-media-file-to-selected-items-as-takes-slot-4": 55446, + "sws-s-and-m-resources-apply-track-template-plus-envelopes-items-to-selected-tracks-last-slot": 55071, + "sws-s-and-m-resources-apply-track-template-plus-envelopes-items-to-selected-tracks-prompt-for-slot": 55286, + "sws-s-and-m-resources-apply-track-template-plus-envelopes-items-to-selected-tracks-slot-1": 55391, + "sws-s-and-m-resources-apply-track-template-plus-envelopes-items-to-selected-tracks-slot-2": 55392, + "sws-s-and-m-resources-apply-track-template-plus-envelopes-items-to-selected-tracks-slot-3": 55393, + "sws-s-and-m-resources-apply-track-template-plus-envelopes-items-to-selected-tracks-slot-4": 55394, + "sws-s-and-m-resources-apply-track-template-to-selected-tracks-last-slot": 55070, + "sws-s-and-m-resources-apply-track-template-to-selected-tracks-prompt-for-slot": 55285, + "sws-s-and-m-resources-apply-track-template-to-selected-tracks-slot-1": 55387, + "sws-s-and-m-resources-apply-track-template-to-selected-tracks-slot-2": 55388, + "sws-s-and-m-resources-apply-track-template-to-selected-tracks-slot-3": 55389, + "sws-s-and-m-resources-apply-track-template-to-selected-tracks-slot-4": 55390, + "sws-s-and-m-resources-auto-save-fx-chains-for-selected-items": 55054, + "sws-s-and-m-resources-auto-save-fx-chains-for-selected-tracks": 55053, + "sws-s-and-m-resources-auto-save-input-fx-chains-for-selected-tracks": 55055, + "sws-s-and-m-resources-auto-save-media-files-for-selected-items": 55089, + "sws-s-and-m-resources-auto-save-project": 55077, + "sws-s-and-m-resources-auto-save-track-template": 55065, + "sws-s-and-m-resources-auto-save-track-template-with-envelopes": 55067, + "sws-s-and-m-resources-auto-save-track-template-with-items": 55068, + "sws-s-and-m-resources-auto-save-track-template-with-items-envelopes": 55066, + "sws-s-and-m-resources-clear-fx-chain-slot-prompt-for-slot": 55272, + "sws-s-and-m-resources-clear-image-slot-prompt-for-slot": 55276, + "sws-s-and-m-resources-clear-media-file-slot-prompt-for-slot": 55275, + "sws-s-and-m-resources-clear-project-template-slot-prompt-for-slot": 55274, + "sws-s-and-m-resources-clear-theme-slot-prompt-for-slot": 55277, + "sws-s-and-m-resources-clear-track-template-slot-prompt-for-slot": 55273, + "sws-s-and-m-resources-delete-all-fx-chain-slots": 55052, + "sws-s-and-m-resources-delete-all-image-slots": 55108, + "sws-s-and-m-resources-delete-all-media-file-slots": 55088, + "sws-s-and-m-resources-delete-all-project-slots": 55076, + "sws-s-and-m-resources-delete-all-theme-slots": 55113, + "sws-s-and-m-resources-delete-all-track-template-slots": 55064, + "sws-s-and-m-resources-delete-last-fx-chain-slot-file": 55051, + "sws-s-and-m-resources-delete-last-image-slot-file": 55107, + "sws-s-and-m-resources-delete-last-media-file-slot-file": 55087, + "sws-s-and-m-resources-delete-last-project-slot-file": 55075, + "sws-s-and-m-resources-delete-last-theme-slot-file": 55112, + "sws-s-and-m-resources-delete-last-track-template-slot-file": 55063, + "sws-s-and-m-resources-import-tracks-from-track-template-last-slot": 55069, + "sws-s-and-m-resources-import-tracks-from-track-template-prompt-for-slot": 55284, + "sws-s-and-m-resources-import-tracks-from-track-template-slot-1": 55395, + "sws-s-and-m-resources-import-tracks-from-track-template-slot-2": 55396, + "sws-s-and-m-resources-import-tracks-from-track-template-slot-3": 55397, + "sws-s-and-m-resources-import-tracks-from-track-template-slot-4": 55398, + "sws-s-and-m-resources-load-theme-last-slot": 55114, + "sws-s-and-m-resources-load-theme-slot-1": 55455, + "sws-s-and-m-resources-load-theme-slot-2": 55456, + "sws-s-and-m-resources-load-theme-slot-3": 55457, + "sws-s-and-m-resources-load-theme-slot-4": 55458, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-last-slot": 55091, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-slot-1": 55411, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-slot-2": 55412, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-slot-3": 55413, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-slot-4": 55414, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-sync-with-next-measure-slot-1": 55419, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-sync-with-next-measure-slot-2": 55420, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-sync-with-next-measure-slot-3": 55421, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-sync-with-next-measure-slot-4": 55422, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-toggle-last-slot": 55093, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-toggle-pause-last-slot": 55095, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-toggle-slot-1": 55427, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-toggle-slot-2": 55428, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-toggle-slot-3": 55429, + "sws-s-and-m-resources-loop-media-file-in-selected-tracks-toggle-slot-4": 55430, + "sws-s-and-m-resources-open-project-last-slot": 55078, + "sws-s-and-m-resources-open-project-last-slot-new-tab": 55079, + "sws-s-and-m-resources-open-project-next-slot-cycle": 55080, + "sws-s-and-m-resources-open-project-next-slot-new-tab-cycle": 55082, + "sws-s-and-m-resources-open-project-previous-slot-cycle": 55081, + "sws-s-and-m-resources-open-project-previous-slot-new-tab-cycle": 55083, + "sws-s-and-m-resources-open-project-prompt-for-slot": 55289, + "sws-s-and-m-resources-open-project-prompt-for-slot-new-tab": 55290, + "sws-s-and-m-resources-open-project-slot-1": 55399, + "sws-s-and-m-resources-open-project-slot-1-new-tab": 55403, + "sws-s-and-m-resources-open-project-slot-2": 55400, + "sws-s-and-m-resources-open-project-slot-2-new-tab": 55404, + "sws-s-and-m-resources-open-project-slot-3": 55401, + "sws-s-and-m-resources-open-project-slot-3-new-tab": 55405, + "sws-s-and-m-resources-open-project-slot-4": 55402, + "sws-s-and-m-resources-open-project-slot-4-new-tab": 55406, + "sws-s-and-m-resources-paste-fx-chain-to-selected-items-all-takes-last-slot": 55059, + "sws-s-and-m-resources-paste-fx-chain-to-selected-items-all-takes-prompt-for-slot": 55281, + "sws-s-and-m-resources-paste-fx-chain-to-selected-items-last-slot": 55058, + "sws-s-and-m-resources-paste-fx-chain-to-selected-items-prompt-for-slot": 55280, + "sws-s-and-m-resources-paste-fx-chain-to-selected-items-slot-1": 55367, + "sws-s-and-m-resources-paste-fx-chain-to-selected-items-slot-2": 55368, + "sws-s-and-m-resources-paste-fx-chain-to-selected-items-slot-3": 55369, + "sws-s-and-m-resources-paste-fx-chain-to-selected-items-slot-4": 55370, + "sws-s-and-m-resources-paste-fx-chain-to-selected-tracks-last-slot": 55061, + "sws-s-and-m-resources-paste-fx-chain-to-selected-tracks-prompt-for-slot": 55283, + "sws-s-and-m-resources-paste-fx-chain-to-selected-tracks-slot-1": 55375, + "sws-s-and-m-resources-paste-fx-chain-to-selected-tracks-slot-2": 55376, + "sws-s-and-m-resources-paste-fx-chain-to-selected-tracks-slot-3": 55377, + "sws-s-and-m-resources-paste-fx-chain-to-selected-tracks-slot-4": 55378, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-items-all-takes-last-slot": 55057, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-items-all-takes-prompt-for-slot": 55279, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-items-last-slot": 55056, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-items-prompt-for-slot": 55278, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-items-slot-1": 55363, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-items-slot-2": 55364, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-items-slot-3": 55365, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-items-slot-4": 55366, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-tracks-last-slot": 55060, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-tracks-prompt-for-slot": 55282, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-tracks-slot-1": 55371, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-tracks-slot-2": 55372, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-tracks-slot-3": 55373, + "sws-s-and-m-resources-paste-replace-fx-chain-to-selected-tracks-slot-4": 55374, + "sws-s-and-m-resources-paste-replace-template-items-to-selected-tracks-last-slot": 55072, + "sws-s-and-m-resources-paste-replace-template-items-to-selected-tracks-last-slot-55287": 55287, + "sws-s-and-m-resources-paste-replace-template-items-to-selected-tracks-slot-1": 55379, + "sws-s-and-m-resources-paste-replace-template-items-to-selected-tracks-slot-2": 55380, + "sws-s-and-m-resources-paste-replace-template-items-to-selected-tracks-slot-3": 55381, + "sws-s-and-m-resources-paste-replace-template-items-to-selected-tracks-slot-4": 55382, + "sws-s-and-m-resources-paste-template-items-to-selected-tracks-last-slot": 55073, + "sws-s-and-m-resources-paste-template-items-to-selected-tracks-last-slot-55288": 55288, + "sws-s-and-m-resources-paste-template-items-to-selected-tracks-slot-1": 55383, + "sws-s-and-m-resources-paste-template-items-to-selected-tracks-slot-2": 55384, + "sws-s-and-m-resources-paste-template-items-to-selected-tracks-slot-3": 55385, + "sws-s-and-m-resources-paste-template-items-to-selected-tracks-slot-4": 55386, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-last-slot": 55090, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-slot-1": 55407, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-slot-2": 55408, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-slot-3": 55409, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-slot-4": 55410, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-sync-with-next-measure-slot-1": 55415, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-sync-with-next-measure-slot-2": 55416, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-sync-with-next-measure-slot-3": 55417, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-sync-with-next-measure-slot-4": 55418, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-last-slot": 55092, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-pause-last-slot": 55094, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-pause-slot-1": 55431, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-pause-slot-2": 55432, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-pause-slot-3": 55433, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-pause-slot-4": 55434, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-slot-1": 55423, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-slot-2": 55424, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-slot-3": 55425, + "sws-s-and-m-resources-play-media-file-in-selected-tracks-toggle-slot-4": 55426, + "sws-s-and-m-resources-set-add-media-file-option-to-default": 55099, + "sws-s-and-m-resources-set-add-media-file-option-to-stretch-loop-to-fit-time-sel": 55100, + "sws-s-and-m-resources-set-add-media-file-option-to-try-to-match-tempo-0-5x": 55101, + "sws-s-and-m-resources-set-add-media-file-option-to-try-to-match-tempo-1x": 55102, + "sws-s-and-m-resources-set-add-media-file-option-to-try-to-match-tempo-2x": 55103, + "sws-s-and-m-resources-set-track-icon-for-selected-tracks-last-slot": 55110, + "sws-s-and-m-resources-set-track-icon-for-selected-tracks-slot-1": 55451, + "sws-s-and-m-resources-set-track-icon-for-selected-tracks-slot-2": 55452, + "sws-s-and-m-resources-set-track-icon-for-selected-tracks-slot-3": 55453, + "sws-s-and-m-resources-set-track-icon-for-selected-tracks-slot-4": 55454, + "sws-s-and-m-resources-show-image-last-slot": 55109, + "sws-s-and-m-resources-show-image-slot-1": 55447, + "sws-s-and-m-resources-show-image-slot-2": 55448, + "sws-s-and-m-resources-show-image-slot-3": 55449, + "sws-s-and-m-resources-show-image-slot-4": 55450, + "sws-s-and-m-resources-show-next-image-slot": 55105, + "sws-s-and-m-resources-show-previous-image-slot": 55106, + "sws-s-and-m-resources-stop-all-playing-media-files": 55085, + "sws-s-and-m-resources-stop-all-playing-media-files-in-selected-tracks": 55086, + "sws-s-and-m-restore-selected-tracks-folder-compact-states": 55183, + "sws-s-and-m-restore-selected-tracks-folder-states": 55177, + "sws-s-and-m-save-default-track-send-preferences": 54956, + "sws-s-and-m-save-selected-tracks-folder-compact-states": 55182, + "sws-s-and-m-save-selected-tracks-folder-states": 55176, + "sws-s-and-m-scroll-to-selected-item-no-undo": 55122, + "sws-s-and-m-select-fx-1-for-selected-tracks": 55475, + "sws-s-and-m-select-fx-2-for-selected-tracks": 55476, + "sws-s-and-m-select-fx-3-for-selected-tracks": 55477, + "sws-s-and-m-select-fx-4-for-selected-tracks": 55478, + "sws-s-and-m-select-fx-5-for-selected-tracks": 55479, + "sws-s-and-m-select-fx-6-for-selected-tracks": 55480, + "sws-s-and-m-select-fx-7-for-selected-tracks": 55481, + "sws-s-and-m-select-fx-8-for-selected-tracks": 55482, + "sws-s-and-m-select-last-fx-for-selected-tracks": 54984, + "sws-s-and-m-select-next-fx-cycling-for-selected-tracks": 54986, + "sws-s-and-m-select-only-track-with-selected-envelope": 55218, + "sws-s-and-m-select-previous-fx-cycling-for-selected-tracks": 54985, + "sws-s-and-m-select-project-midi-osc-only": 55038, + "sws-s-and-m-send-all-notes-off-to-selected-tracks": 55259, + "sws-s-and-m-send-all-sounds-off-to-selected-tracks": 55260, + "sws-s-and-m-set-active-take-pan-envelope-to-100-percent-left": 55197, + "sws-s-and-m-set-active-take-pan-envelope-to-100-percent-right": 55196, + "sws-s-and-m-set-active-take-pan-envelope-to-center": 55198, + "sws-s-and-m-set-all-fx-except-1-offline-for-selected-tracks": 55347, + "sws-s-and-m-set-all-fx-except-2-offline-for-selected-tracks": 55348, + "sws-s-and-m-set-all-fx-except-3-offline-for-selected-tracks": 55349, + "sws-s-and-m-set-all-fx-except-4-offline-for-selected-tracks": 55350, + "sws-s-and-m-set-all-fx-except-5-offline-for-selected-tracks": 55351, + "sws-s-and-m-set-all-fx-except-6-offline-for-selected-tracks": 55352, + "sws-s-and-m-set-all-fx-except-7-offline-for-selected-tracks": 55353, + "sws-s-and-m-set-all-fx-except-8-offline-for-selected-tracks": 55354, + "sws-s-and-m-set-all-take-fx-offline-for-selected-items": 55009, + "sws-s-and-m-set-all-take-fx-online-for-selected-items": 55010, + "sws-s-and-m-set-default-track-sends-to-audio-and-midi": 54958, + "sws-s-and-m-set-default-track-sends-to-audio-only": 54959, + "sws-s-and-m-set-default-track-sends-to-midi-only": 54960, + "sws-s-and-m-set-fx-1-offline-for-selected-tracks": 55307, + "sws-s-and-m-set-fx-1-online-for-selected-tracks": 55299, + "sws-s-and-m-set-fx-2-offline-for-selected-tracks": 55308, + "sws-s-and-m-set-fx-2-online-for-selected-tracks": 55300, + "sws-s-and-m-set-fx-3-offline-for-selected-tracks": 55309, + "sws-s-and-m-set-fx-3-online-for-selected-tracks": 55301, + "sws-s-and-m-set-fx-4-offline-for-selected-tracks": 55310, + "sws-s-and-m-set-fx-4-online-for-selected-tracks": 55302, + "sws-s-and-m-set-fx-5-offline-for-selected-tracks": 55311, + "sws-s-and-m-set-fx-5-online-for-selected-tracks": 55303, + "sws-s-and-m-set-fx-6-offline-for-selected-tracks": 55312, + "sws-s-and-m-set-fx-6-online-for-selected-tracks": 55304, + "sws-s-and-m-set-fx-7-offline-for-selected-tracks": 55313, + "sws-s-and-m-set-fx-7-online-for-selected-tracks": 55305, + "sws-s-and-m-set-fx-8-offline-for-selected-tracks": 55314, + "sws-s-and-m-set-fx-8-online-for-selected-tracks": 55306, + "sws-s-and-m-set-global-startup-action": 55045, + "sws-s-and-m-set-last-fx-offline-for-selected-tracks": 54994, + "sws-s-and-m-set-last-fx-online-for-selected-tracks": 54992, + "sws-s-and-m-set-project-startup-action": 55042, + "sws-s-and-m-set-selected-fx-offline-for-selected-tracks": 54995, + "sws-s-and-m-set-selected-fx-online-for-selected-tracks": 54993, + "sws-s-and-m-set-selected-tracks-folder-states-to-last-in-folder": 55179, + "sws-s-and-m-set-selected-tracks-folder-states-to-last-of-all-folders": 55178, + "sws-s-and-m-set-selected-tracks-folder-states-to-normal": 55181, + "sws-s-and-m-set-selected-tracks-folder-states-to-parent": 55180, + "sws-s-and-m-set-selected-tracks-midi-input-to-all-channels": 55234, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-1": 55699, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-10": 55708, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-11": 55709, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-12": 55710, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-13": 55711, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-14": 55712, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-15": 55713, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-16": 55714, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-2": 55700, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-3": 55701, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-4": 55702, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-5": 55703, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-6": 55704, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-7": 55705, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-8": 55706, + "sws-s-and-m-set-selected-tracks-midi-input-to-channel-9": 55707, + "sws-s-and-m-set-selected-tracks-to-first-unused-group-default-flags": 55175, + "sws-s-and-m-set-selected-tracks-to-group-1-default-flags": 55547, + "sws-s-and-m-set-selected-tracks-to-group-2-default-flags": 55548, + "sws-s-and-m-set-selected-tracks-to-group-3-default-flags": 55549, + "sws-s-and-m-set-selected-tracks-to-group-4-default-flags": 55550, + "sws-s-and-m-set-selected-tracks-to-group-5-default-flags": 55551, + "sws-s-and-m-set-selected-tracks-to-group-6-default-flags": 55552, + "sws-s-and-m-set-selected-tracks-to-group-7-default-flags": 55553, + "sws-s-and-m-set-selected-tracks-to-group-8-default-flags": 55554, + "sws-s-and-m-show-all-floating-fx-windows": 54965, + "sws-s-and-m-show-all-floating-fx-windows-for-selected-tracks": 54967, + "sws-s-and-m-show-all-fx-chain-windows": 54966, + "sws-s-and-m-show-and-unbypass-take-mute-envelope": 55186, + "sws-s-and-m-show-and-unbypass-take-pan-envelope": 55185, + "sws-s-and-m-show-and-unbypass-take-pitch-envelope": 55199, + "sws-s-and-m-show-and-unbypass-take-volume-envelope": 55184, + "sws-s-and-m-show-fx-chain-for-selected-tracks-fx-1": 55483, + "sws-s-and-m-show-fx-chain-for-selected-tracks-fx-2": 55484, + "sws-s-and-m-show-fx-chain-for-selected-tracks-fx-3": 55485, + "sws-s-and-m-show-fx-chain-for-selected-tracks-fx-4": 55486, + "sws-s-and-m-show-fx-chain-for-selected-tracks-fx-5": 55487, + "sws-s-and-m-show-fx-chain-for-selected-tracks-fx-6": 55488, + "sws-s-and-m-show-fx-chain-for-selected-tracks-fx-7": 55489, + "sws-s-and-m-show-fx-chain-for-selected-tracks-fx-8": 55490, + "sws-s-and-m-show-fx-chain-for-selected-tracks-selected-fx": 54978, + "sws-s-and-m-show-project-global-startup-actions": 55044, + "sws-s-and-m-show-take-mute-envelope": 55192, + "sws-s-and-m-show-take-pan-envelope": 55191, + "sws-s-and-m-show-take-pitch-envelope": 55201, + "sws-s-and-m-show-take-volume-envelope": 55190, + "sws-s-and-m-show-theme-helper-all-tracks": 55263, + "sws-s-and-m-show-theme-helper-selected-tracks": 55264, + "sws-s-and-m-split-and-select-items-in-region-near-cursor": 55166, + "sws-s-and-m-split-selected-items-at-edit-cursor-midi-or-prior-zero-crossing-audio": 55163, + "sws-s-and-m-split-selected-items-at-time-selection-edit-cursor-midi-or-prior-zero-crossing-audio": 55164, + "sws-s-and-m-takes-activate-lane-under-mouse-cursor": 55139, + "sws-s-and-m-takes-activate-lanes-from-selected-items": 55138, + "sws-s-and-m-takes-clear-active-takes-items": 55137, + "sws-s-and-m-takes-move-active-down-cycling-in-selected-items": 55143, + "sws-s-and-m-takes-move-active-up-cycling-in-selected-items": 55142, + "sws-s-and-m-takes-remove-empty-midi-takes-items-among-selected-items": 55141, + "sws-s-and-m-takes-remove-empty-takes-items-among-selected-items": 55140, + "sws-s-and-m-toggle-all-fx-bypass-for-selected-tracks": 55003, + "sws-s-and-m-toggle-all-fx-except-selected-bypass-for-selected-tracks": 55007, + "sws-s-and-m-toggle-all-fx-except-selected-online-offline-for-selected-tracks": 55006, + "sws-s-and-m-toggle-all-fx-online-offline-for-selected-tracks": 54996, + "sws-s-and-m-toggle-all-take-fx-bypass-for-selected-items": 55011, + "sws-s-and-m-toggle-all-take-fx-online-offline-for-selected-items": 55008, + "sws-s-and-m-toggle-arming-of-all-active-envelopes-for-selected-tracks": 55208, + "sws-s-and-m-toggle-arming-of-all-plugin-envelopes-for-selected-tracks": 55217, + "sws-s-and-m-toggle-arming-of-all-receive-mute-envelopes-for-selected-tracks": 55216, + "sws-s-and-m-toggle-arming-of-all-receive-pan-envelopes-for-selected-tracks": 55215, + "sws-s-and-m-toggle-arming-of-all-receive-volume-envelopes-for-selected-tracks": 55214, + "sws-s-and-m-toggle-arming-of-mute-envelope-for-selected-tracks": 55213, + "sws-s-and-m-toggle-arming-of-pan-envelope-for-selected-tracks": 55212, + "sws-s-and-m-toggle-arming-of-volume-envelope-for-selected-tracks": 55211, + "sws-s-and-m-toggle-auto-marker-coloring-enable": 53002, + "sws-s-and-m-toggle-auto-region-coloring-enable": 53003, + "sws-s-and-m-toggle-auto-track-icon-enable": 53004, + "sws-s-and-m-toggle-auto-track-layout-enable": 53005, + "sws-s-and-m-toggle-float-fx-1-for-selected-tracks": 55507, + "sws-s-and-m-toggle-float-fx-2-for-selected-tracks": 55508, + "sws-s-and-m-toggle-float-fx-3-for-selected-tracks": 55509, + "sws-s-and-m-toggle-float-fx-4-for-selected-tracks": 55510, + "sws-s-and-m-toggle-float-fx-5-for-selected-tracks": 55511, + "sws-s-and-m-toggle-float-fx-6-for-selected-tracks": 55512, + "sws-s-and-m-toggle-float-fx-7-for-selected-tracks": 55513, + "sws-s-and-m-toggle-float-fx-8-for-selected-tracks": 55514, + "sws-s-and-m-toggle-float-selected-fx-for-selected-tracks": 54983, + "sws-s-and-m-toggle-fx-1-bypass-for-selected-tracks": 55339, + "sws-s-and-m-toggle-fx-1-online-offline-for-selected-tracks": 55315, + "sws-s-and-m-toggle-fx-2-bypass-for-selected-tracks": 55340, + "sws-s-and-m-toggle-fx-2-online-offline-for-selected-tracks": 55316, + "sws-s-and-m-toggle-fx-3-bypass-for-selected-tracks": 55341, + "sws-s-and-m-toggle-fx-3-online-offline-for-selected-tracks": 55317, + "sws-s-and-m-toggle-fx-4-bypass-for-selected-tracks": 55342, + "sws-s-and-m-toggle-fx-4-online-offline-for-selected-tracks": 55318, + "sws-s-and-m-toggle-fx-5-bypass-for-selected-tracks": 55343, + "sws-s-and-m-toggle-fx-5-online-offline-for-selected-tracks": 55319, + "sws-s-and-m-toggle-fx-6-bypass-for-selected-tracks": 55344, + "sws-s-and-m-toggle-fx-6-online-offline-for-selected-tracks": 55320, + "sws-s-and-m-toggle-fx-7-bypass-for-selected-tracks": 55345, + "sws-s-and-m-toggle-fx-7-online-offline-for-selected-tracks": 55321, + "sws-s-and-m-toggle-fx-8-bypass-for-selected-tracks": 55346, + "sws-s-and-m-toggle-fx-8-online-offline-for-selected-tracks": 55322, + "sws-s-and-m-toggle-last-fx-bypass-for-selected-tracks": 54997, + "sws-s-and-m-toggle-last-fx-online-offline-for-selected-tracks": 54990, + "sws-s-and-m-toggle-selected-fx-bypass-for-selected-tracks": 54998, + "sws-s-and-m-toggle-selected-fx-online-offline-for-selected-tracks": 54991, + "sws-s-and-m-toggle-show-all-floating-fx": 54968, + "sws-s-and-m-toggle-show-all-floating-fx-for-selected-tracks": 54970, + "sws-s-and-m-toggle-show-all-fx-chain-windows": 54969, + "sws-s-and-m-toggle-show-fx-chain-windows-for-selected-tracks": 54980, + "sws-s-and-m-toggle-show-take-mute-envelope": 55205, + "sws-s-and-m-toggle-show-take-pan-envelope": 55204, + "sws-s-and-m-toggle-show-take-pitch-envelope": 55206, + "sws-s-and-m-toggle-show-take-volume-envelope": 55203, + "sws-s-and-m-toggle-toolbars-auto-refresh-enable": 55219, + "sws-s-and-m-toolbar-toggle-offscreen-item-selection": 55225, + "sws-s-and-m-toolbar-toggle-offscreen-item-selection-bottom": 55224, + "sws-s-and-m-toolbar-toggle-offscreen-item-selection-left": 55221, + "sws-s-and-m-toolbar-toggle-offscreen-item-selection-right": 55222, + "sws-s-and-m-toolbar-toggle-offscreen-item-selection-top": 55223, + "sws-s-and-m-toolbar-toggle-track-envelopes-in-touch-latch-latch-preview-write": 55220, + "sws-s-and-m-trigger-next-preset-for-fx-1-of-selected-tracks": 55459, + "sws-s-and-m-trigger-next-preset-for-fx-2-of-selected-tracks": 55460, + "sws-s-and-m-trigger-next-preset-for-fx-3-of-selected-tracks": 55461, + "sws-s-and-m-trigger-next-preset-for-fx-4-of-selected-tracks": 55462, + "sws-s-and-m-trigger-next-preset-for-last-touched-fx": 55117, + "sws-s-and-m-trigger-next-preset-for-selected-fx-of-selected-tracks": 55115, + "sws-s-and-m-trigger-preset-for-fx-1-of-selected-track-midi-osc-only": 55467, + "sws-s-and-m-trigger-preset-for-fx-2-of-selected-track-midi-osc-only": 55468, + "sws-s-and-m-trigger-preset-for-fx-3-of-selected-track-midi-osc-only": 55469, + "sws-s-and-m-trigger-preset-for-fx-4-of-selected-track-midi-osc-only": 55470, + "sws-s-and-m-trigger-preset-for-fx-5-of-selected-track-midi-osc-only": 55471, + "sws-s-and-m-trigger-preset-for-fx-6-of-selected-track-midi-osc-only": 55472, + "sws-s-and-m-trigger-preset-for-fx-7-of-selected-track-midi-osc-only": 55473, + "sws-s-and-m-trigger-preset-for-fx-8-of-selected-track-midi-osc-only": 55474, + "sws-s-and-m-trigger-preset-for-selected-fx-of-selected-track-midi-osc-only": 55014, + "sws-s-and-m-trigger-previous-preset-for-fx-1-of-selected-tracks": 55463, + "sws-s-and-m-trigger-previous-preset-for-fx-2-of-selected-tracks": 55464, + "sws-s-and-m-trigger-previous-preset-for-fx-3-of-selected-tracks": 55465, + "sws-s-and-m-trigger-previous-preset-for-fx-4-of-selected-tracks": 55466, + "sws-s-and-m-trigger-previous-preset-for-last-touched-fx": 55118, + "sws-s-and-m-trigger-previous-preset-for-selected-fx-of-selected-tracks": 55116, + "sws-s-and-m-unbypass-all-fx-for-selected-tracks": 55005, + "sws-s-and-m-unbypass-all-take-fx-for-selected-items": 55013, + "sws-s-and-m-unbypass-fx-1-for-selected-tracks": 55331, + "sws-s-and-m-unbypass-fx-2-for-selected-tracks": 55332, + "sws-s-and-m-unbypass-fx-3-for-selected-tracks": 55333, + "sws-s-and-m-unbypass-fx-4-for-selected-tracks": 55334, + "sws-s-and-m-unbypass-fx-5-for-selected-tracks": 55335, + "sws-s-and-m-unbypass-fx-6-for-selected-tracks": 55336, + "sws-s-and-m-unbypass-fx-7-for-selected-tracks": 55337, + "sws-s-and-m-unbypass-fx-8-for-selected-tracks": 55338, + "sws-s-and-m-unbypass-last-fx-for-selected-tracks": 55001, + "sws-s-and-m-unbypass-selected-fx-for-selected-tracks": 55002, + "sws-s-and-m-unfloat-fx-1-for-selected-tracks": 55499, + "sws-s-and-m-unfloat-fx-2-for-selected-tracks": 55500, + "sws-s-and-m-unfloat-fx-3-for-selected-tracks": 55501, + "sws-s-and-m-unfloat-fx-4-for-selected-tracks": 55502, + "sws-s-and-m-unfloat-fx-5-for-selected-tracks": 55503, + "sws-s-and-m-unfloat-fx-6-for-selected-tracks": 55504, + "sws-s-and-m-unfloat-fx-7-for-selected-tracks": 55505, + "sws-s-and-m-unfloat-fx-8-for-selected-tracks": 55506, + "sws-s-and-m-unfloat-selected-fx-for-selected-tracks": 54982, + "sws-s-and-m-unselect-offscreen-items": 55226, + "sws-s-and-m-what-s-new": 53930, + "sws-save-active-takes-on-selected-track-s": 53132, + "sws-save-as-snapshot-1": 55743, + "sws-save-as-snapshot-10": 55752, + "sws-save-as-snapshot-11": 55753, + "sws-save-as-snapshot-12": 55754, + "sws-save-as-snapshot-2": 55744, + "sws-save-as-snapshot-3": 55745, + "sws-save-as-snapshot-4": 55746, + "sws-save-as-snapshot-5": 55747, + "sws-save-as-snapshot-6": 55748, + "sws-save-as-snapshot-7": 55749, + "sws-save-as-snapshot-8": 55750, + "sws-save-as-snapshot-9": 55751, + "sws-save-auto-crossfade-state": 53666, + "sws-save-current-arrange-view-slot-1": 53826, + "sws-save-current-arrange-view-slot-2": 53827, + "sws-save-current-arrange-view-slot-3": 53828, + "sws-save-current-arrange-view-slot-4": 53829, + "sws-save-current-arrange-view-slot-5": 53830, + "sws-save-current-snapshot-filter-options": 53191, + "sws-save-current-track-selection": 53749, + "sws-save-list-of-open-projects": 53216, + "sws-save-loop-selection-slot-1": 55797, + "sws-save-loop-selection-slot-2": 55798, + "sws-save-loop-selection-slot-3": 55799, + "sws-save-loop-selection-slot-4": 55800, + "sws-save-loop-selection-slot-5": 55801, + "sws-save-marker-set": 53084, + "sws-save-master-fx-enabled-state": 53732, + "sws-save-over-current-snapshot": 53164, + "sws-save-selected-item-s": 53145, + "sws-save-selected-track-s-items-states": 53151, + "sws-save-selected-track-s-mutes-plus-receives-children": 53147, + "sws-save-selected-track-s-selected-item-s-slot-1": 53134, + "sws-save-selected-track-s-selected-item-s-slot-2": 53135, + "sws-save-selected-track-s-selected-item-s-slot-3": 53136, + "sws-save-selected-track-s-selected-item-s-slot-4": 53137, + "sws-save-selected-track-s-selected-item-s-slot-5": 53138, + "sws-save-selected-track-s-selected-items-states": 53153, + "sws-save-time-selection-slot-1": 55787, + "sws-save-time-selection-slot-2": 55788, + "sws-save-time-selection-slot-3": 55789, + "sws-save-time-selection-slot-4": 55790, + "sws-save-time-selection-slot-5": 55791, + "sws-save-transport-repeat-state": 53679, + "sws-scroll-left-1-percent": 53824, + "sws-scroll-left-10-percent": 53822, + "sws-scroll-right-1-percent": 53825, + "sws-scroll-right-10-percent": 53823, + "sws-select-all-folder-start-tracks": 53762, + "sws-select-all-folders-parents-only": 53761, + "sws-select-all-non-folders": 53763, + "sws-select-armed-tracks": 53772, + "sws-select-children-of-selected-folder-track-s": 53756, + "sws-select-current-snapshot-track-s": 53161, + "sws-select-item-s-with-saved-state-on-selected-track-s": 53155, + "sws-select-locked-items": 53657, + "sws-select-locked-items-on-selected-track-s": 53658, + "sws-select-lower-leftmost-item-on-selected-track-s": 53645, + "sws-select-master-track": 53776, + "sws-select-muted-items": 53649, + "sws-select-muted-items-on-selected-track-s": 53651, + "sws-select-muted-tracks": 53768, + "sws-select-nearest-next-folder": 53766, + "sws-select-nearest-previous-folder": 53767, + "sws-select-next-folder": 53764, + "sws-select-next-item-across-tracks": 53653, + "sws-select-next-item-keeping-current-selection-across-tracks": 53655, + "sws-select-only-children-of-selected-folders": 53755, + "sws-select-only-parent-s-of-selected-folder-track-s": 53757, + "sws-select-only-rec-armed-track-s": 53774, + "sws-select-only-track-1": 55755, + "sws-select-only-track-10": 55764, + "sws-select-only-track-11": 55765, + "sws-select-only-track-12": 55766, + "sws-select-only-track-13": 55767, + "sws-select-only-track-14": 55768, + "sws-select-only-track-15": 55769, + "sws-select-only-track-16": 55770, + "sws-select-only-track-17": 55771, + "sws-select-only-track-18": 55772, + "sws-select-only-track-19": 55773, + "sws-select-only-track-2": 55756, + "sws-select-only-track-20": 55774, + "sws-select-only-track-21": 55775, + "sws-select-only-track-22": 55776, + "sws-select-only-track-23": 55777, + "sws-select-only-track-24": 55778, + "sws-select-only-track-25": 55779, + "sws-select-only-track-26": 55780, + "sws-select-only-track-27": 55781, + "sws-select-only-track-28": 55782, + "sws-select-only-track-29": 55783, + "sws-select-only-track-3": 55757, + "sws-select-only-track-30": 55784, + "sws-select-only-track-31": 55785, + "sws-select-only-track-32": 55786, + "sws-select-only-track-4": 55758, + "sws-select-only-track-5": 55759, + "sws-select-only-track-6": 55760, + "sws-select-only-track-7": 55761, + "sws-select-only-track-8": 55762, + "sws-select-only-track-9": 55763, + "sws-select-only-track-s-with-selected-item-s": 53753, + "sws-select-parent-s-of-selected-folder-track-s": 53758, + "sws-select-previous-folder": 53765, + "sws-select-previous-item-across-tracks": 53654, + "sws-select-previous-item-keeping-current-selection-across-tracks": 53656, + "sws-select-soloed-tracks": 53770, + "sws-select-tracks-with-active-routing-to-selected-track-s": 53773, + "sws-select-tracks-with-flipped-phase": 53771, + "sws-select-unmuted-items": 53650, + "sws-select-unmuted-items-on-selected-track-s": 53652, + "sws-select-unmuted-tracks": 53769, + "sws-select-upper-leftmost-item-on-selected-track-s": 53646, + "sws-set-all-master-track-outputs-muted": 53721, + "sws-set-all-master-track-outputs-unmuted": 53720, + "sws-set-all-selected-tracks-inputs-to-match-first-selected-track": 53747, + "sws-set-all-takes-channel-mode-to-mono-downmix": 53621, + "sws-set-all-takes-channel-mode-to-mono-left": 53622, + "sws-set-all-takes-channel-mode-to-mono-right": 53623, + "sws-set-all-takes-channel-mode-to-normal": 53619, + "sws-set-all-takes-channel-mode-to-reverse-stereo": 53620, + "sws-set-all-takes-preserve-pitch": 53625, + "sws-set-all-takes-to-next-mono-channel-mode": 53639, + "sws-set-all-takes-to-next-stereo-channel-mode": 53641, + "sws-set-all-takes-to-prev-mono-channel-mode": 53640, + "sws-set-all-takes-to-prev-stereo-channel-mode": 53642, + "sws-set-auto-crossfade-off": 53669, + "sws-set-auto-crossfade-on": 53668, + "sws-set-item-fades-to-crossfade-lengths": 53385, + "sws-set-item-fades-to-default-length": 53386, + "sws-set-last-touched-track-to-match-track-selection-deprecated": 53754, + "sws-set-master-mono": 53696, + "sws-set-master-output-1-volume-to-0db": 53724, + "sws-set-master-stereo": 53697, + "sws-set-master-track-output-1-muted": 53710, + "sws-set-master-track-output-1-unmuted": 53715, + "sws-set-master-track-output-2-muted": 53711, + "sws-set-master-track-output-2-unmuted": 53716, + "sws-set-master-track-output-3-muted": 53712, + "sws-set-master-track-output-3-unmuted": 53717, + "sws-set-master-track-output-4-muted": 53713, + "sws-set-master-track-output-4-unmuted": 53718, + "sws-set-master-track-output-5-muted": 53714, + "sws-set-master-track-output-5-unmuted": 53719, + "sws-set-move-envelope-points-with-items-off": 53671, + "sws-set-move-envelope-points-with-items-on": 53670, + "sws-set-reaper-window-size-to-reaper-ini-setwndsize": 53779, + "sws-set-rms-analysis-normalize-options": 53575, + "sws-set-selected-folder-s-collapsed": 53605, + "sws-set-selected-folder-s-small": 53607, + "sws-set-selected-folder-s-uncollapsed": 53606, + "sws-set-selected-item-s-to-color-black": 53036, + "sws-set-selected-item-s-to-color-gradient": 53041, + "sws-set-selected-item-s-to-color-gradient-per-track": 53040, + "sws-set-selected-item-s-to-color-white": 53035, + "sws-set-selected-item-s-to-custom-color-1": 53045, + "sws-set-selected-item-s-to-custom-color-10": 53054, + "sws-set-selected-item-s-to-custom-color-11": 53055, + "sws-set-selected-item-s-to-custom-color-12": 53056, + "sws-set-selected-item-s-to-custom-color-13": 53057, + "sws-set-selected-item-s-to-custom-color-14": 53058, + "sws-set-selected-item-s-to-custom-color-15": 53059, + "sws-set-selected-item-s-to-custom-color-16": 53060, + "sws-set-selected-item-s-to-custom-color-2": 53046, + "sws-set-selected-item-s-to-custom-color-3": 53047, + "sws-set-selected-item-s-to-custom-color-4": 53048, + "sws-set-selected-item-s-to-custom-color-5": 53049, + "sws-set-selected-item-s-to-custom-color-6": 53050, + "sws-set-selected-item-s-to-custom-color-7": 53051, + "sws-set-selected-item-s-to-custom-color-8": 53052, + "sws-set-selected-item-s-to-custom-color-9": 53053, + "sws-set-selected-item-s-to-next-custom-color": 53037, + "sws-set-selected-item-s-to-one-random-custom-color": 53038, + "sws-set-selected-item-s-to-ordered-custom-colors": 53043, + "sws-set-selected-item-s-to-ordered-custom-colors-per-track": 53042, + "sws-set-selected-item-s-to-random-custom-color-s": 53039, + "sws-set-selected-item-s-to-respective-track-color": 53044, + "sws-set-selected-items-length": 53643, + "sws-set-selected-take-s-to-custom-color-1": 53066, + "sws-set-selected-take-s-to-custom-color-10": 53075, + "sws-set-selected-take-s-to-custom-color-11": 53076, + "sws-set-selected-take-s-to-custom-color-12": 53077, + "sws-set-selected-take-s-to-custom-color-13": 53078, + "sws-set-selected-take-s-to-custom-color-14": 53079, + "sws-set-selected-take-s-to-custom-color-15": 53080, + "sws-set-selected-take-s-to-custom-color-16": 53081, + "sws-set-selected-take-s-to-custom-color-2": 53067, + "sws-set-selected-take-s-to-custom-color-3": 53068, + "sws-set-selected-take-s-to-custom-color-4": 53069, + "sws-set-selected-take-s-to-custom-color-5": 53070, + "sws-set-selected-take-s-to-custom-color-6": 53071, + "sws-set-selected-take-s-to-custom-color-7": 53072, + "sws-set-selected-take-s-to-custom-color-8": 53073, + "sws-set-selected-take-s-to-custom-color-9": 53074, + "sws-set-selected-track-s-children-to-same-color": 53018, + "sws-set-selected-track-s-item-s-to-custom-color": 53062, + "sws-set-selected-track-s-item-s-to-one-random-color": 53061, + "sws-set-selected-track-s-monitor-track-media-while-recording": 53738, + "sws-set-selected-track-s-record-output-mode-based-on-items": 53737, + "sws-set-selected-track-s-to-color-black": 53010, + "sws-set-selected-track-s-to-color-white": 53009, + "sws-set-selected-track-s-to-custom-color-1": 53019, + "sws-set-selected-track-s-to-custom-color-10": 53028, + "sws-set-selected-track-s-to-custom-color-11": 53029, + "sws-set-selected-track-s-to-custom-color-12": 53030, + "sws-set-selected-track-s-to-custom-color-13": 53031, + "sws-set-selected-track-s-to-custom-color-14": 53032, + "sws-set-selected-track-s-to-custom-color-15": 53033, + "sws-set-selected-track-s-to-custom-color-16": 53034, + "sws-set-selected-track-s-to-custom-color-2": 53020, + "sws-set-selected-track-s-to-custom-color-3": 53021, + "sws-set-selected-track-s-to-custom-color-4": 53022, + "sws-set-selected-track-s-to-custom-color-5": 53023, + "sws-set-selected-track-s-to-custom-color-6": 53024, + "sws-set-selected-track-s-to-custom-color-7": 53025, + "sws-set-selected-track-s-to-custom-color-8": 53026, + "sws-set-selected-track-s-to-custom-color-9": 53027, + "sws-set-selected-track-s-to-next-custom-color": 53013, + "sws-set-selected-track-s-to-next-track-s-color": 53012, + "sws-set-selected-track-s-to-one-random-custom-color": 53014, + "sws-set-selected-track-s-to-ordered-custom-colors": 53017, + "sws-set-selected-track-s-to-previous-track-s-color": 53011, + "sws-set-selected-track-s-to-random-custom-color-s": 53015, + "sws-set-selected-track-s-to-same-folder-as-previous-track": 53601, + "sws-set-selected-tracks-pan-law-to-0-0-db": 53313, + "sws-set-selected-tracks-pan-law-to-2-5-db": 53317, + "sws-set-selected-tracks-pan-law-to-2-5-db-53321": 53321, + "sws-set-selected-tracks-pan-law-to-3-0-db": 53316, + "sws-set-selected-tracks-pan-law-to-3-0-db-53320": 53320, + "sws-set-selected-tracks-pan-law-to-4-5-db": 53315, + "sws-set-selected-tracks-pan-law-to-4-5-db-53319": 53319, + "sws-set-selected-tracks-pan-law-to-6-0-db": 53314, + "sws-set-selected-tracks-pan-law-to-6-0-db-53318": 53318, + "sws-set-selected-tracks-pan-law-to-default": 53312, + "sws-set-selected-tracks-to-color-gradient": 53016, + "sws-set-snapshots-to-mix-mode": 53176, + "sws-set-snapshots-to-visibility-mode": 53177, + "sws-set-takes-in-selected-item-s-to-color-gradient": 53064, + "sws-set-takes-in-selected-item-s-to-ordered-custom-colors": 53065, + "sws-set-takes-in-selected-item-s-to-random-custom-color-s": 53063, + "sws-set-time-selection-to-selected-items-skip-if-time-selection-exists": 53585, + "sws-set-track-name-from-first-selected-item-in-project": 53745, + "sws-set-track-name-from-first-selected-item-on-track": 53744, + "sws-set-transport-repeat-state": 53681, + "sws-shane-autorender-edit-project-metadata": 53932, + "sws-shane-autorender-global-preferences": 53935, + "sws-shane-autorender-open-render-path": 53933, + "sws-shane-autorender-show-instructions": 53934, + "sws-shane-batch-render-regions": 53931, + "sws-show-all-tracks": 53206, + "sws-show-all-tracks-in-mcp": 53207, + "sws-show-all-tracks-in-tcp": 53208, + "sws-show-dockers": 53683, + "sws-show-master-track-in-track-control-panel": 53685, + "sws-show-selected-track-s-hide-others": 53212, + "sws-show-selected-track-s-in-mcp": 53199, + "sws-show-selected-track-s-in-mcp-hide-others": 53210, + "sws-show-selected-track-s-in-mcp-only": 53195, + "sws-show-selected-track-s-in-tcp": 53200, + "sws-show-selected-track-s-in-tcp-and-mcp": 53197, + "sws-show-selected-track-s-in-tcp-hide-others": 53211, + "sws-show-selected-track-s-in-tcp-only": 53196, + "sws-show-tracklist": 53193, + "sws-show-tracklist-with-filter-focused": 53194, + "sws-sn-focus-midi-editor": 54938, + "sws-snapshot-current-track-visibility": 53215, + "sws-split-items-at-time-selection-razor-edit-areas-edit-cursor-also-during-playback-or-mouse-cursor": 53582, + "sws-split-items-at-time-selection-razor-edit-areas-edit-cursor-play-cursor-during-playback-or-mouse-cursor": 53581, + "sws-split-items-at-time-selection-razor-edit-areas-if-exists-else-at-edit-cursor-also-during-playback": 53580, + "sws-split-items-at-time-selection-razor-edit-areas-if-exists-play-cursor-during-playback-else-at-edit-cursor": 53579, + "sws-switch-to-last-project-tab": 53223, + "sws-switch-to-project-tab-1": 53224, + "sws-switch-to-project-tab-10": 53233, + "sws-switch-to-project-tab-2": 53225, + "sws-switch-to-project-tab-3": 53226, + "sws-switch-to-project-tab-4": 53227, + "sws-switch-to-project-tab-5": 53228, + "sws-switch-to-project-tab-6": 53229, + "sws-switch-to-project-tab-7": 53230, + "sws-switch-to-project-tab-8": 53231, + "sws-switch-to-project-tab-9": 53232, + "sws-time-select-next-region": 53091, + "sws-time-select-previous-region": 53092, + "sws-toggle-auto-add-envelopes-when-tweaking-in-write-mode": 53675, + "sws-toggle-auto-track-coloring-enable": 53001, + "sws-toggle-between-current-and-saved-track-selection": 53751, + "sws-toggle-checking-for-duplicate-inputs-when-recording": 53692, + "sws-toggle-default-fade-time-to-zero": 53687, + "sws-toggle-drag-zoom-enable-ruler-bottom-half": 53840, + "sws-toggle-drag-zoom-enable-ruler-top-half": 53841, + "sws-toggle-grid-lines-over-under-items": 53676, + "sws-toggle-horizontal-zoom-to-selected-items": 53820, + "sws-toggle-horizontal-zoom-to-selected-items-or-time-selection": 53819, + "sws-toggle-horizontal-zoom-to-time-selection": 53821, + "sws-toggle-invert-track-selection": 53752, + "sws-toggle-marker-actions-enable": 53103, + "sws-toggle-master-parent-send-on-selected-track-s": 53695, + "sws-toggle-master-track-output-1-mute": 53698, + "sws-toggle-master-track-output-10-mute": 53707, + "sws-toggle-master-track-output-11-mute": 53708, + "sws-toggle-master-track-output-12-mute": 53709, + "sws-toggle-master-track-output-2-mute": 53699, + "sws-toggle-master-track-output-3-mute": 53700, + "sws-toggle-master-track-output-4-mute": 53701, + "sws-toggle-master-track-output-5-mute": 53702, + "sws-toggle-master-track-output-6-mute": 53703, + "sws-toggle-master-track-output-7-mute": 53704, + "sws-toggle-master-track-output-8-mute": 53705, + "sws-toggle-master-track-output-9-mute": 53706, + "sws-toggle-master-track-select": 53778, + "sws-toggle-move-cursor-to-end-of-recorded-media-on-stop": 53672, + "sws-toggle-mute-of-children-of-selected-folder-s": 53600, + "sws-toggle-mute-of-items-on-selected-track-s": 53608, + "sws-toggle-mute-on-receives-for-selected-track-s": 53727, + "sws-toggle-ruler-red-while-recording": 53008, + "sws-toggle-seek-playback-on-item-move-size": 53673, + "sws-toggle-seek-playback-on-loop-point-change": 53674, + "sws-toggle-selected-track-s-fully-visible-hidden": 53205, + "sws-toggle-selected-track-s-visible-in-mcp": 53203, + "sws-toggle-selected-track-s-visible-in-tcp": 53204, + "sws-toggle-selecting-one-grouped-item-selects-group": 53677, + "sws-toggle-selection-of-items-on-selected-track-s": 53648, + "sws-toggle-snapshot-apply-filter-to-recall": 53188, + "sws-toggle-snapshot-fx": 53183, + "sws-toggle-snapshot-mute": 53178, + "sws-toggle-snapshot-pan": 53180, + "sws-toggle-snapshot-selected-only-on-recall": 53187, + "sws-toggle-snapshot-selected-only-on-save": 53186, + "sws-toggle-snapshot-selection": 53185, + "sws-toggle-snapshot-sends": 53182, + "sws-toggle-snapshot-show-only-for-selected-tracks": 53189, + "sws-toggle-snapshot-solo": 53179, + "sws-toggle-snapshot-visibility": 53184, + "sws-toggle-snapshot-vol": 53181, + "sws-toggle-zoom-to-selected-items": 53807, + "sws-toggle-zoom-to-selected-items-hide-other-tracks": 53809, + "sws-toggle-zoom-to-selected-items-hide-other-tracks-ignore-last-track-s-envelope-lanes": 53818, + "sws-toggle-zoom-to-selected-items-ignore-last-track-s-envelope-lanes": 53816, + "sws-toggle-zoom-to-selected-items-minimize-other-tracks": 53808, + "sws-toggle-zoom-to-selected-items-minimize-other-tracks-ignore-last-track-s-envelope-lanes": 53817, + "sws-toggle-zoom-to-selected-items-or-time-selection": 53804, + "sws-toggle-zoom-to-selected-items-or-time-selection-hide-other-tracks": 53806, + "sws-toggle-zoom-to-selected-items-or-time-selection-hide-other-tracks-ignore-last-track-s-envelope-lanes": 53815, + "sws-toggle-zoom-to-selected-items-or-time-selection-ignore-last-track-s-envelope-lanes": 53813, + "sws-toggle-zoom-to-selected-items-or-time-selection-minimize-other-tracks": 53805, + "sws-toggle-zoom-to-selected-items-or-time-selection-minimize-other-tracks-ignore-last-track-s-envelope-lanes": 53814, + "sws-toggle-zoom-to-selected-tracks-and-time-selection": 53801, + "sws-toggle-zoom-to-selected-tracks-and-time-selection-hide-others": 53803, + "sws-toggle-zoom-to-selected-tracks-and-time-selection-hide-others-ignore-last-track-s-envelope-lanes": 53812, + "sws-toggle-zoom-to-selected-tracks-and-time-selection-ignore-last-track-s-envelope-lanes": 53810, + "sws-toggle-zoom-to-selected-tracks-and-time-selection-minimize-others": 53802, + "sws-toggle-zoom-to-selected-tracks-and-time-selection-minimize-others-ignore-last-track-s-envelope-lanes": 53811, + "sws-toolbar-arm-toggle": 53740, + "sws-toolbar-mute-toggle": 53748, + "sws-toolbar-solo-toggle": 53746, + "sws-transport-record-stop": 53678, + "sws-unbypass-fx-on-selected-track-s": 53731, + "sws-undo-edit-cursor-move": 53586, + "sws-undo-zoom": 53836, + "sws-unindent-selected-track-s": 53604, + "sws-unmute-all-receives-for-selected-track-s": 53726, + "sws-unmute-all-sends-from-selected-track-s": 53729, + "sws-unmute-children-of-selected-folder-s": 53599, + "sws-unselect-all-items-on-selected-track-s": 53644, + "sws-unselect-all-items-tracks-env-points": 53584, + "sws-unselect-all-items-tracks-env-points-depending-on-focus": 53583, + "sws-unselect-children-of-selected-folder-track-s": 53760, + "sws-unselect-items-without-render-in-source-filename": 53662, + "sws-unselect-items-without-stems-in-source-filename": 53661, + "sws-unselect-master-track": 53777, + "sws-unselect-parent-s-of-selected-folder-track-s": 53759, + "sws-unselect-rec-armed-track-s": 53775, + "sws-unselect-upper-leftmost-item-on-selected-track-s": 53647, + "sws-unset-selected-track-s-monitor-track-media-while-recording": 53739, + "sws-unset-transport-repeat-state": 53682, + "sws-vertical-zoom-to-selected-items": 53786, + "sws-vertical-zoom-to-selected-items-ignore-last-track-s-envelope-lanes": 53790, + "sws-vertical-zoom-to-selected-items-minimize-others": 53787, + "sws-vertical-zoom-to-selected-items-minimize-others-ignore-last-track-s-envelope-lanes": 53791, + "sws-vertical-zoom-to-selected-tracks": 53784, + "sws-vertical-zoom-to-selected-tracks-ignore-last-track-s-envelope-lanes": 53788, + "sws-vertical-zoom-to-selected-tracks-minimize-others": 53785, + "sws-vertical-zoom-to-selected-tracks-minimize-others-ignore-last-track-s-envelope-lanes": 53789, + "sws-wait-for-next-bar-if-playing": 53663, + "sws-wait-for-next-beat-if-playing": 53664, + "sws-wait-until-end-of-loop-if-playing": 53665, + "sws-wol-adjust-envelope-or-track-height-under-mouse-cursor-midi-cc-relative-mousewheel": 54892, + "sws-wol-adjust-envelope-or-track-height-under-mouse-cursor-zoom-center-to-mouse-cursor-midi-cc-relative-mousewheel": 54893, + "sws-wol-adjust-selected-envelope-height-midi-cc-relative-mousewheel": 54886, + "sws-wol-adjust-selected-envelope-height-zoom-center-to-middle-arrange-midi-cc-relative-mousewheel": 54887, + "sws-wol-adjust-selected-envelope-height-zoom-center-to-mouse-cursor-midi-cc-relative-mousewheel": 54888, + "sws-wol-adjust-selected-envelope-or-last-touched-track-height-midi-cc-relative-mousewheel": 54889, + "sws-wol-adjust-selected-envelope-or-last-touched-track-height-zoom-center-to-middle-arrange-midi-cc-relative-mousewheel": 54890, + "sws-wol-adjust-selected-envelope-or-last-touched-track-height-zoom-center-to-mouse-cursor-midi-cc-relative-mousewheel": 54891, + "sws-wol-apply-height-to-selected-envelope-slot-1": 54912, + "sws-wol-apply-height-to-selected-envelope-slot-2": 54913, + "sws-wol-apply-height-to-selected-envelope-slot-3": 54914, + "sws-wol-apply-height-to-selected-envelope-slot-4": 54915, + "sws-wol-apply-height-to-selected-envelope-slot-5": 54916, + "sws-wol-apply-height-to-selected-envelope-slot-6": 54917, + "sws-wol-apply-height-to-selected-envelope-slot-7": 54918, + "sws-wol-apply-height-to-selected-envelope-slot-8": 54919, + "sws-wol-force-overlap-for-selected-envelope-in-track-lane-in-its-track-height": 54896, + "sws-wol-full-zoom-selected-envelope-in-media-lane-only-to-lower-half-in-time-selection": 54901, + "sws-wol-full-zoom-selected-envelope-in-media-lane-only-to-upper-half-in-time-selection": 54900, + "sws-wol-full-zoom-selected-envelope-in-time-selection": 54899, + "sws-wol-horizontal-zoom-selected-envelope-in-time-selection": 54898, + "sws-wol-options-set-horizontal-zoom-center-to-center-of-view": 54881, + "sws-wol-options-set-horizontal-zoom-center-to-edit-cursor": 54880, + "sws-wol-options-set-horizontal-zoom-center-to-edit-cursor-or-play-cursor-default": 54879, + "sws-wol-options-set-horizontal-zoom-center-to-mouse-cursor": 54882, + "sws-wol-options-set-vertical-zoom-center-to-last-selected-track": 54877, + "sws-wol-options-set-vertical-zoom-center-to-top-visible-track": 54876, + "sws-wol-options-set-vertical-zoom-center-to-track-at-center-of-view": 54875, + "sws-wol-options-set-vertical-zoom-center-to-track-under-mouse-cursor": 54878, + "sws-wol-put-selected-envelope-in-envelope-lane": 54922, + "sws-wol-put-selected-envelope-in-media-lane": 54921, + "sws-wol-restore-previous-envelope-overlap-settings": 54897, + "sws-wol-save-height-of-selected-envelope-slot-1": 54904, + "sws-wol-save-height-of-selected-envelope-slot-2": 54905, + "sws-wol-save-height-of-selected-envelope-slot-3": 54906, + "sws-wol-save-height-of-selected-envelope-slot-4": 54907, + "sws-wol-save-height-of-selected-envelope-slot-5": 54908, + "sws-wol-save-height-of-selected-envelope-slot-6": 54909, + "sws-wol-save-height-of-selected-envelope-slot-7": 54910, + "sws-wol-save-height-of-selected-envelope-slot-8": 54911, + "sws-wol-select-all-tracks-except-folder-parents": 54920, + "sws-wol-set-selected-envelope-height-to-default": 54883, + "sws-wol-set-selected-envelope-height-to-maximum": 54885, + "sws-wol-set-selected-envelope-height-to-minimum": 54884, + "sws-wol-toggle-enable-envelope-overlap-for-envelopes-in-track-lane": 54895, + "sws-wol-toggle-enable-extended-zoom-for-envelopes-in-track-lane": 54894, + "sws-wol-vertical-zoom-selected-envelope-in-media-lane-only-to-lower-half": 54903, + "sws-wol-vertical-zoom-selected-envelope-in-media-lane-only-to-upper-half": 54902, + "sws-zoom-preferences": 53839, + "sws-zoom-to-selected-items": 53793, + "sws-zoom-to-selected-items-ignore-last-track-s-envelope-lanes": 53797, + "sws-zoom-to-selected-items-minimize-others": 53794, + "sws-zoom-to-selected-items-minimize-others-ignore-last-track-s-envelope-lanes": 53798, + "sws-zoom-to-selected-items-or-time-selection": 53795, + "sws-zoom-to-selected-items-or-time-selection-ignore-last-track-s-envelope-lanes": 53799, + "sws-zoom-to-selected-items-or-time-selection-minimize-others": 53796, + "sws-zoom-to-selected-items-or-time-selection-minimize-others-ignore-last-track-s-envelope-lanes": 53800, + "sws-zoom-tool-marquee": 53838, + "take-activate-take-under-mouse": 41342, + "take-crop-to-active-take-in-items": 40131, + "take-cycle-items-to-next-take": 42349, + "take-cycle-items-to-previous-take": 42350, + "take-delete-active-take-from-items": 40129, + "take-delete-active-take-from-items-prompt-to-confirm": 40130, + "take-duplicate-active-take": 40639, + "take-explode-takes-of-items-across-tracks": 40224, + "take-explode-takes-of-items-in-order": 40643, + "take-explode-takes-of-items-in-place": 40642, + "take-explode-takes-on-selected-tracks-to-fixed-lanes": 42635, + "take-explode-takes-on-selected-tracks-to-fixed-lanes-and-add-comp-areas-from-active-takes": 42636, + "take-implode-items-across-tracks-into-takes": 40438, + "take-implode-items-on-same-track-into-takes": 40543, + "take-implode-selected-fixed-lane-tracks-to-takes-using-best-efforts-overlapping-items-may-be-shortened": 42637, + "take-nudge-active-takes-volume-1db": 41926, + "take-nudge-active-takes-volume-plus-1db": 41927, + "take-paste-as-takes-in-items": 40603, + "take-propagate-to-all-similarly-named-active-takes": 41978, + "take-propagate-to-similarly-named-active-takes-on-track": 41976, + "take-set-1st-take-active": 45000, + "take-set-2nd-take-active": 45001, + "take-set-3rd-take-active": 45002, + "take-set-4th-take-active": 45003, + "take-set-5th-take-active": 45004, + "take-set-6th-take-active": 45005, + "take-set-7th-take-active": 45006, + "take-set-8th-take-active": 45007, + "take-set-9th-take-active": 45008, + "take-set-active-take-to-custom-color": 41331, + "take-set-active-take-to-default-color": 41333, + "take-set-active-take-to-one-random-color": 41332, + "take-set-all-takes-created-in-the-same-recording-pass-to-custom-color": 41334, + "take-set-all-takes-created-in-the-same-recording-pass-to-default-color": 41336, + "take-set-all-takes-created-in-the-same-recording-pass-to-one-random-color": 41335, + "take-set-all-takes-of-selected-items-to-default-color": 41337, + "take-switch-items-to-next-take": 40125, + "take-switch-items-to-previous-take": 40126, + "take-toggle-take-mute-envelope": 40695, + "take-toggle-take-pan-envelope": 40694, + "take-toggle-take-pitch-envelope": 41612, + "take-toggle-take-volume-envelope": 40693, + "take-view-take-envelopes-for-last-touched-first-selected-item": 41974, + "tempo-decrease-current-project-tempo-0-1-bpm": 41138, + "tempo-decrease-current-project-tempo-01-bpm": 41130, + "tempo-decrease-current-project-tempo-10-bpm": 41136, + "tempo-decrease-current-project-tempo-10-percent": 41132, + "tempo-decrease-current-project-tempo-50-percent-half": 41134, + "tempo-envelope-decrease-all-tempo-markers-0-001-bpm": 41807, + "tempo-envelope-decrease-all-tempo-markers-0-001-percent": 41815, + "tempo-envelope-decrease-all-tempo-markers-0-01-bpm": 41220, + "tempo-envelope-decrease-all-tempo-markers-0-01-percent": 41813, + "tempo-envelope-decrease-all-tempo-markers-0-1-bpm": 41218, + "tempo-envelope-decrease-all-tempo-markers-0-1-percent": 41811, + "tempo-envelope-decrease-all-tempo-markers-01-bpm": 41216, + "tempo-envelope-decrease-all-tempo-markers-01-percent": 41809, + "tempo-envelope-increase-all-tempo-markers-0-001-bpm": 41806, + "tempo-envelope-increase-all-tempo-markers-0-001-percent": 41814, + "tempo-envelope-increase-all-tempo-markers-0-01-bpm": 41219, + "tempo-envelope-increase-all-tempo-markers-0-01-percent": 41812, + "tempo-envelope-increase-all-tempo-markers-0-1-bpm": 41217, + "tempo-envelope-increase-all-tempo-markers-0-1-percent": 41810, + "tempo-envelope-increase-all-tempo-markers-01-bpm": 41215, + "tempo-envelope-increase-all-tempo-markers-01-percent": 41808, + "tempo-envelope-insert-tempo-marker-at-edit-cursor-without-opening-tempo-edit-dialog": 42330, + "tempo-envelope-insert-tempo-time-signature-change-marker-at-edit-cursor": 40256, + "tempo-envelope-set-display-range": 40933, + "tempo-envelope-set-display-range-to-current-project-min-max-bpm": 41804, + "tempo-increase-current-project-tempo-0-1-bpm": 41137, + "tempo-increase-current-project-tempo-01-bpm": 41129, + "tempo-increase-current-project-tempo-10-bpm": 41135, + "tempo-increase-current-project-tempo-10-percent": 41131, + "tempo-increase-current-project-tempo-100-percent-double": 41133, + "theme-development-show-theme-element-finder": 40690, + "theme-development-show-theme-tweak-configuration-window": 41930, + "time-selection-copy-contents-of-time-selection-to-edit-cursor-moving-later-items": 40397, + "time-selection-crop-project-to-time-selection": 40049, + "time-selection-extend-time-selection-to-next-transient-in-items": 40802, + "time-selection-insert-empty-space-at-time-selection-moving-later-items": 40200, + "time-selection-move-contents-of-time-selection-to-edit-cursor-moving-later-items": 40396, + "time-selection-move-cursor-left-creating-time-selection": 40102, + "time-selection-move-cursor-right-creating-time-selection": 40103, + "time-selection-move-end-point-to-cursor-preserve-length": 43213, + "time-selection-move-loop-points-to-time-selection": 40622, + "time-selection-move-start-point-to-cursor-preserve-length": 43212, + "time-selection-move-time-selection-to-loop-points": 40623, + "time-selection-nudge-left": 40039, + "time-selection-nudge-left-edge-left": 40320, + "time-selection-nudge-left-edge-right": 40321, + "time-selection-nudge-right": 40040, + "time-selection-nudge-right-edge-left": 40322, + "time-selection-nudge-right-edge-right": 40323, + "time-selection-remove-contents-of-time-selection-moving-later-items": 40201, + "time-selection-remove-unselect-time-selection": 40635, + "time-selection-remove-unselect-time-selection-and-loop-points": 40020, + "time-selection-set-end-point": 40626, + "time-selection-set-start-point": 40625, + "time-selection-set-time-selection-to-items": 40290, + "time-selection-shift-left-by-time-selection-length": 40037, + "time-selection-shift-right-by-time-selection-length": 40038, + "time-selection-swap-left-edge-of-time-selection-to-next-transient-in-items": 40803, + "toggle-external-timecode-synchronization": 40620, + "toggle-fullscreen": 40346, + "toggle-ripple-editing-all-tracks": 41991, + "toggle-ripple-editing-on-off": 1162, + "toggle-ripple-editing-per-track": 41990, + "toggle-show-all-floating-windows": 41074, + "toggle-show-all-floating-windows-except-mixer": 41077, + "toggle-show-all-floating-windows-except-mixer-and-unattached-docker": 41080, + "toggle-show-all-floating-windows-except-unattached-docker": 41079, + "toggle-show-master-tempo-envelope": 41046, + "toggle-show-master-track-and-tempo-envelope": 41050, + "toolbar-customize-empty-tcp-area-toolbar": 43676, + "toolbar-open-close-main-toolbar": 41651, + "toolbar-open-close-media-explorer-toolbar": 42404, + "toolbar-open-close-midi-piano-roll-toolbar": 41676, + "toolbar-open-close-midi-toolbar-1": 41687, + "toolbar-open-close-midi-toolbar-10": 42746, + "toolbar-open-close-midi-toolbar-11": 42747, + "toolbar-open-close-midi-toolbar-12": 42748, + "toolbar-open-close-midi-toolbar-13": 42749, + "toolbar-open-close-midi-toolbar-14": 42750, + "toolbar-open-close-midi-toolbar-15": 42751, + "toolbar-open-close-midi-toolbar-16": 42752, + "toolbar-open-close-midi-toolbar-2": 41688, + "toolbar-open-close-midi-toolbar-3": 41689, + "toolbar-open-close-midi-toolbar-4": 41690, + "toolbar-open-close-midi-toolbar-5": 41944, + "toolbar-open-close-midi-toolbar-6": 41945, + "toolbar-open-close-midi-toolbar-7": 41946, + "toolbar-open-close-midi-toolbar-8": 41947, + "toolbar-open-close-midi-toolbar-9": 42745, + "toolbar-open-close-toolbar-1": 41679, + "toolbar-open-close-toolbar-10": 41937, + "toolbar-open-close-toolbar-11": 41938, + "toolbar-open-close-toolbar-12": 41939, + "toolbar-open-close-toolbar-13": 41940, + "toolbar-open-close-toolbar-14": 41941, + "toolbar-open-close-toolbar-15": 41942, + "toolbar-open-close-toolbar-16": 41943, + "toolbar-open-close-toolbar-17": 42713, + "toolbar-open-close-toolbar-18": 42714, + "toolbar-open-close-toolbar-19": 42715, + "toolbar-open-close-toolbar-2": 41680, + "toolbar-open-close-toolbar-20": 42716, + "toolbar-open-close-toolbar-21": 42717, + "toolbar-open-close-toolbar-22": 42718, + "toolbar-open-close-toolbar-23": 42719, + "toolbar-open-close-toolbar-24": 42720, + "toolbar-open-close-toolbar-25": 42721, + "toolbar-open-close-toolbar-26": 42722, + "toolbar-open-close-toolbar-27": 42723, + "toolbar-open-close-toolbar-28": 42724, + "toolbar-open-close-toolbar-29": 42725, + "toolbar-open-close-toolbar-3": 41681, + "toolbar-open-close-toolbar-30": 42726, + "toolbar-open-close-toolbar-31": 42727, + "toolbar-open-close-toolbar-32": 42728, + "toolbar-open-close-toolbar-4": 41682, + "toolbar-open-close-toolbar-5": 41683, + "toolbar-open-close-toolbar-6": 41684, + "toolbar-open-close-toolbar-7": 41685, + "toolbar-open-close-toolbar-8": 41686, + "toolbar-open-close-toolbar-9": 41936, + "toolbar-open-midi-toolbar-1-at-mouse-cursor": 41640, + "toolbar-open-midi-toolbar-10-at-mouse-cursor": 42778, + "toolbar-open-midi-toolbar-11-at-mouse-cursor": 42779, + "toolbar-open-midi-toolbar-12-at-mouse-cursor": 42780, + "toolbar-open-midi-toolbar-13-at-mouse-cursor": 42781, + "toolbar-open-midi-toolbar-14-at-mouse-cursor": 42782, + "toolbar-open-midi-toolbar-15-at-mouse-cursor": 42783, + "toolbar-open-midi-toolbar-16-at-mouse-cursor": 42784, + "toolbar-open-midi-toolbar-2-at-mouse-cursor": 41641, + "toolbar-open-midi-toolbar-3-at-mouse-cursor": 41642, + "toolbar-open-midi-toolbar-4-at-mouse-cursor": 41643, + "toolbar-open-midi-toolbar-5-at-mouse-cursor": 41968, + "toolbar-open-midi-toolbar-6-at-mouse-cursor": 41969, + "toolbar-open-midi-toolbar-7-at-mouse-cursor": 41970, + "toolbar-open-midi-toolbar-8-at-mouse-cursor": 41971, + "toolbar-open-midi-toolbar-9-at-mouse-cursor": 42777, + "toolbar-open-toolbar-1-at-mouse-cursor": 41111, + "toolbar-open-toolbar-10-at-mouse-cursor": 41961, + "toolbar-open-toolbar-11-at-mouse-cursor": 41962, + "toolbar-open-toolbar-12-at-mouse-cursor": 41963, + "toolbar-open-toolbar-13-at-mouse-cursor": 41964, + "toolbar-open-toolbar-14-at-mouse-cursor": 41965, + "toolbar-open-toolbar-15-at-mouse-cursor": 41966, + "toolbar-open-toolbar-16-at-mouse-cursor": 41967, + "toolbar-open-toolbar-17-at-mouse-cursor": 42761, + "toolbar-open-toolbar-18-at-mouse-cursor": 42762, + "toolbar-open-toolbar-19-at-mouse-cursor": 42763, + "toolbar-open-toolbar-2-at-mouse-cursor": 41112, + "toolbar-open-toolbar-20-at-mouse-cursor": 42764, + "toolbar-open-toolbar-21-at-mouse-cursor": 42765, + "toolbar-open-toolbar-22-at-mouse-cursor": 42766, + "toolbar-open-toolbar-23-at-mouse-cursor": 42767, + "toolbar-open-toolbar-24-at-mouse-cursor": 42768, + "toolbar-open-toolbar-25-at-mouse-cursor": 42769, + "toolbar-open-toolbar-26-at-mouse-cursor": 42770, + "toolbar-open-toolbar-27-at-mouse-cursor": 42771, + "toolbar-open-toolbar-28-at-mouse-cursor": 42772, + "toolbar-open-toolbar-29-at-mouse-cursor": 42773, + "toolbar-open-toolbar-3-at-mouse-cursor": 41113, + "toolbar-open-toolbar-30-at-mouse-cursor": 42774, + "toolbar-open-toolbar-31-at-mouse-cursor": 42775, + "toolbar-open-toolbar-32-at-mouse-cursor": 42776, + "toolbar-open-toolbar-4-at-mouse-cursor": 41114, + "toolbar-open-toolbar-5-at-mouse-cursor": 41655, + "toolbar-open-toolbar-6-at-mouse-cursor": 41656, + "toolbar-open-toolbar-7-at-mouse-cursor": 41657, + "toolbar-open-toolbar-8-at-mouse-cursor": 41658, + "toolbar-open-toolbar-9-at-mouse-cursor": 41960, + "toolbar-press-active-toolbar-button-01": 41085, + "toolbar-press-active-toolbar-button-02": 41086, + "toolbar-press-active-toolbar-button-03": 41087, + "toolbar-press-active-toolbar-button-04": 41088, + "toolbar-press-active-toolbar-button-05": 41089, + "toolbar-press-active-toolbar-button-06": 41090, + "toolbar-press-active-toolbar-button-07": 41091, + "toolbar-press-active-toolbar-button-08": 41092, + "toolbar-press-active-toolbar-button-09": 41093, + "toolbar-press-active-toolbar-button-10": 41094, + "toolbar-press-active-toolbar-button-11": 41095, + "toolbar-press-active-toolbar-button-12": 41096, + "toolbar-press-active-toolbar-button-13": 41097, + "toolbar-press-active-toolbar-button-14": 41098, + "toolbar-press-active-toolbar-button-15": 41099, + "toolbar-press-active-toolbar-button-16": 41100, + "toolbar-show-hide-toolbar-at-top-of-main-window": 41297, + "toolbar-show-hide-toolbar-docker": 41084, + "toolbars-customize": 40905, + "toolbars-show-midi-toolbar-1-as-menu": 43433, + "toolbars-show-midi-toolbar-10-as-menu": 43442, + "toolbars-show-midi-toolbar-11-as-menu": 43443, + "toolbars-show-midi-toolbar-12-as-menu": 43444, + "toolbars-show-midi-toolbar-13-as-menu": 43445, + "toolbars-show-midi-toolbar-14-as-menu": 43446, + "toolbars-show-midi-toolbar-15-as-menu": 43447, + "toolbars-show-midi-toolbar-16-as-menu": 43448, + "toolbars-show-midi-toolbar-2-as-menu": 43434, + "toolbars-show-midi-toolbar-3-as-menu": 43435, + "toolbars-show-midi-toolbar-4-as-menu": 43436, + "toolbars-show-midi-toolbar-5-as-menu": 43437, + "toolbars-show-midi-toolbar-6-as-menu": 43438, + "toolbars-show-midi-toolbar-7-as-menu": 43439, + "toolbars-show-midi-toolbar-8-as-menu": 43440, + "toolbars-show-midi-toolbar-9-as-menu": 43441, + "toolbars-show-toolbar-1-as-menu": 43401, + "toolbars-show-toolbar-10-as-menu": 43410, + "toolbars-show-toolbar-11-as-menu": 43411, + "toolbars-show-toolbar-12-as-menu": 43412, + "toolbars-show-toolbar-13-as-menu": 43413, + "toolbars-show-toolbar-14-as-menu": 43414, + "toolbars-show-toolbar-15-as-menu": 43415, + "toolbars-show-toolbar-16-as-menu": 43416, + "toolbars-show-toolbar-17-as-menu": 43417, + "toolbars-show-toolbar-18-as-menu": 43418, + "toolbars-show-toolbar-19-as-menu": 43419, + "toolbars-show-toolbar-2-as-menu": 43402, + "toolbars-show-toolbar-20-as-menu": 43420, + "toolbars-show-toolbar-21-as-menu": 43421, + "toolbars-show-toolbar-22-as-menu": 43422, + "toolbars-show-toolbar-23-as-menu": 43423, + "toolbars-show-toolbar-24-as-menu": 43424, + "toolbars-show-toolbar-25-as-menu": 43425, + "toolbars-show-toolbar-26-as-menu": 43426, + "toolbars-show-toolbar-27-as-menu": 43427, + "toolbars-show-toolbar-28-as-menu": 43428, + "toolbars-show-toolbar-29-as-menu": 43429, + "toolbars-show-toolbar-3-as-menu": 43403, + "toolbars-show-toolbar-30-as-menu": 43430, + "toolbars-show-toolbar-31-as-menu": 43431, + "toolbars-show-toolbar-32-as-menu": 43432, + "toolbars-show-toolbar-4-as-menu": 43404, + "toolbars-show-toolbar-5-as-menu": 43405, + "toolbars-show-toolbar-6-as-menu": 43406, + "toolbars-show-toolbar-7-as-menu": 43407, + "toolbars-show-toolbar-8-as-menu": 43408, + "toolbars-show-toolbar-9-as-menu": 43409, + "toolbars-switch-to-main-toolbar": 41646, + "toolbars-switch-to-media-explorer-toolbar": 42405, + "toolbars-switch-to-midi-piano-roll-toolbar": 40303, + "toolbars-switch-to-midi-toolbar-1": 41659, + "toolbars-switch-to-midi-toolbar-10": 42754, + "toolbars-switch-to-midi-toolbar-11": 42755, + "toolbars-switch-to-midi-toolbar-12": 42756, + "toolbars-switch-to-midi-toolbar-13": 42757, + "toolbars-switch-to-midi-toolbar-14": 42758, + "toolbars-switch-to-midi-toolbar-15": 42759, + "toolbars-switch-to-midi-toolbar-16": 42760, + "toolbars-switch-to-midi-toolbar-2": 41660, + "toolbars-switch-to-midi-toolbar-3": 41661, + "toolbars-switch-to-midi-toolbar-4": 41662, + "toolbars-switch-to-midi-toolbar-5": 41956, + "toolbars-switch-to-midi-toolbar-6": 41957, + "toolbars-switch-to-midi-toolbar-7": 41958, + "toolbars-switch-to-midi-toolbar-8": 41959, + "toolbars-switch-to-midi-toolbar-9": 42753, + "toolbars-switch-to-toolbar-1": 41105, + "toolbars-switch-to-toolbar-10": 41949, + "toolbars-switch-to-toolbar-11": 41950, + "toolbars-switch-to-toolbar-12": 41951, + "toolbars-switch-to-toolbar-13": 41952, + "toolbars-switch-to-toolbar-14": 41953, + "toolbars-switch-to-toolbar-15": 41954, + "toolbars-switch-to-toolbar-16": 41955, + "toolbars-switch-to-toolbar-17": 42729, + "toolbars-switch-to-toolbar-18": 42730, + "toolbars-switch-to-toolbar-19": 42731, + "toolbars-switch-to-toolbar-2": 41106, + "toolbars-switch-to-toolbar-20": 42732, + "toolbars-switch-to-toolbar-21": 42733, + "toolbars-switch-to-toolbar-22": 42734, + "toolbars-switch-to-toolbar-23": 42735, + "toolbars-switch-to-toolbar-24": 42736, + "toolbars-switch-to-toolbar-25": 42737, + "toolbars-switch-to-toolbar-26": 42738, + "toolbars-switch-to-toolbar-27": 42739, + "toolbars-switch-to-toolbar-28": 42740, + "toolbars-switch-to-toolbar-29": 42741, + "toolbars-switch-to-toolbar-3": 41107, + "toolbars-switch-to-toolbar-30": 42742, + "toolbars-switch-to-toolbar-31": 42743, + "toolbars-switch-to-toolbar-32": 42744, + "toolbars-switch-to-toolbar-4": 41108, + "toolbars-switch-to-toolbar-5": 41647, + "toolbars-switch-to-toolbar-6": 41648, + "toolbars-switch-to-toolbar-7": 41649, + "toolbars-switch-to-toolbar-8": 41650, + "toolbars-switch-to-toolbar-9": 41948, + "track-2nd-pass-render-selected-area-of-tracks-to-mono-post-fader-stem-tracks-and-mute-originals": 42415, + "track-2nd-pass-render-selected-area-of-tracks-to-mono-stem-tracks-and-mute-originals": 42418, + "track-2nd-pass-render-selected-area-of-tracks-to-multichannel-parent-send-only-post-fader-stem-tracks-and-mute-originals": 42593, + "track-2nd-pass-render-selected-area-of-tracks-to-multichannel-parent-send-only-stem-tracks-and-mute-originals": 42594, + "track-2nd-pass-render-selected-area-of-tracks-to-multichannel-post-fader-stem-tracks-and-mute-originals": 42414, + "track-2nd-pass-render-selected-area-of-tracks-to-multichannel-stem-tracks-and-mute-originals": 42417, + "track-2nd-pass-render-selected-area-of-tracks-to-stereo-post-fader-stem-tracks-and-mute-originals": 42413, + "track-2nd-pass-render-selected-area-of-tracks-to-stereo-stem-tracks-and-mute-originals": 42416, + "track-allow-track-anticipative-fx": 40609, + "track-allow-track-media-buffering": 40607, + "track-apply-media-playback-offset-to-receive-source-tracks": 42233, + "track-apply-trim-envelope-to-volume-envelope-clear-trim-envelope": 42018, + "track-apply-volume-envelope-to-trim-envelope-clear-volume-envelope": 42019, + "track-arm-all-tracks-for-recording": 40490, + "track-automatically-group-all-tracks-for-media-razor-editing": 42580, + "track-automatically-group-selected-tracks-for-media-razor-editing": 42581, + "track-bypass-fx-on-all-tracks": 40342, + "track-bypass-media-playback-offset": 42232, + "track-clear-automatic-record-arm": 40738, + "track-clear-up-rank-down-rank-markers-for-all-items-on-track": 43165, + "track-copy-playing-media-items-to-new-track": 42947, + "track-copy-playing-media-items-to-new-track-for-track-under-mouse": 42946, + "track-copy-tracks": 40210, + "track-create-new-track-media-razor-editing-group-for-selected-tracks": 42578, + "track-crop-to-playing-media-items": 42943, + "track-crop-to-playing-media-items-for-track-under-mouse": 42942, + "track-crop-to-playing-media-items-preserving-fixed-lanes": 42945, + "track-crop-to-playing-media-items-preserving-fixed-lanes-for-track-under-mouse": 42944, + "track-cut-tracks": 40337, + "track-cycle-folder-collapsed-state": 1042, + "track-cycle-track-folder-state": 1041, + "track-cycle-track-record-monitor": 40495, + "track-delete-takes-for-all-items-on-track-that-are-down-ranked-no-confirm": 43167, + "track-delete-takes-for-all-items-on-track-that-are-not-up-ranked-no-confirm": 43166, + "track-disable-midi-input-quantize-for-all-tracks": 42066, + "track-disable-midi-input-quantize-for-last-touched-track": 42068, + "track-disable-midi-input-quantize-for-selected-tracks": 42064, + "track-display-gain-reduction-in-track-meters-for-plug-ins-that-support-it": 42705, + "track-do-not-link-track-volume-pan-controls-to-midi-volume-pan": 41538, + "track-duplicate-tracks": 40062, + "track-enable-midi-input-quantize-for-all-tracks": 42065, + "track-enable-midi-input-quantize-for-last-touched-track": 42067, + "track-enable-midi-input-quantize-for-selected-tracks": 42063, + "track-exit-fixed-lane-view-for-all-fixed-lane-tracks-in-the-project": 42960, + "track-freeze-to-mono-render-pre-fader-save-remove-items-and-online-fx": 40901, + "track-freeze-to-multichannel-render-pre-fader-save-remove-items-and-online-fx": 40877, + "track-freeze-to-stereo-render-pre-fader-save-remove-items-and-online-fx": 41223, + "track-go-to-next-track": 40285, + "track-go-to-next-track-leaving-other-tracks-selected": 40287, + "track-go-to-previous-track": 40286, + "track-go-to-previous-track-leaving-other-tracks-selected": 40288, + "track-hide-envelope-display-next-envelope-on-same-track-cycle": 41825, + "track-hide-envelope-display-previous-envelope-on-same-track-cycle": 43672, + "track-hide-tracks-in-tcp-and-mixer": 41593, + "track-insert-display-reasurroundpan-in-mcp": 42426, + "track-insert-display-reasurroundpan-in-tcp": 42425, + "track-insert-multiple-new-tracks": 41067, + "track-insert-new-5-1-surround-track-embed-reasurroundpan-in-tcp": 41584, + "track-insert-new-7-1-2-surround-track-embed-reasurroundpan-in-tcp": 42423, + "track-insert-new-7-1-4-surround-track-embed-reasurroundpan-in-tcp": 42424, + "track-insert-new-7-1-surround-track-embed-reasurroundpan-in-tcp": 42422, + "track-insert-new-surround-track-using-selected-tracks-as-source-audio": 41585, + "track-insert-new-track": 40001, + "track-insert-new-track-as-first-track": 43093, + "track-insert-new-track-at-end-of-mixer": 41147, + "track-insert-new-track-at-end-of-track-list": 40702, + "track-insert-show-reacontrolmidi-midi-track-control": 40907, + "track-insert-show-reaeq-track-eq": 41757, + "track-insert-track-from-template": 46000, + "track-insert-visual-spacer-after-last-touched-track": 42672, + "track-insert-visual-spacer-after-tracks": 42666, + "track-insert-visual-spacer-before-and-after-tracks": 42669, + "track-insert-visual-spacer-before-last-touched-track": 42671, + "track-insert-visual-spacer-before-tracks": 42665, + "track-invert-track-polarity-phase": 40282, + "track-lanes-add-comp-areas-for-selected-items": 42652, + "track-lanes-add-empty-lane-at-bottom-of-track": 42647, + "track-lanes-comp-into-a-new-copy-of-lane-under-mouse-for-track-under-mouse": 42487, + "track-lanes-comp-into-lane-under-mouse-for-track-under-mouse": 42499, + "track-lanes-comp-into-new-empty-lane": 42797, + "track-lanes-comp-into-new-empty-lane-automatically-creating-comp-areas": 42798, + "track-lanes-comp-into-new-empty-lane-for-track-under-mouse": 42486, + "track-lanes-comp-into-new-empty-lane-for-track-under-mouse-automatically-creating-comp-areas": 42649, + "track-lanes-copy-edited-media-item-back-to-source-lane-and-re-comp-for-track-under-mouse": 42949, + "track-lanes-copy-edited-media-items-to-new-lane-and-re-comp-for-track-under-mouse": 42654, + "track-lanes-copy-edited-media-items-with-no-matching-source-lane-to-new-lane-and-re-comp": 42802, + "track-lanes-delete-all-lanes-except-lane-under-mouse-for-track-under-mouse-including-media-items": 42933, + "track-lanes-delete-all-lanes-including-media-items": 42796, + "track-lanes-delete-comp-areas": 42955, + "track-lanes-delete-comp-areas-for-track-under-mouse": 42789, + "track-lanes-delete-comp-areas-including-source-media": 42956, + "track-lanes-delete-comp-areas-including-source-media-for-track-under-mouse": 42683, + "track-lanes-delete-empty-comp-areas": 42954, + "track-lanes-delete-empty-comp-areas-for-track-under-mouse": 42953, + "track-lanes-delete-empty-lanes-with-no-media-items": 42689, + "track-lanes-delete-lane-at-bottom-of-track-including-media-items": 42648, + "track-lanes-delete-lane-at-top-of-track-including-media-items": 42501, + "track-lanes-delete-lane-under-mouse-including-media-items": 42676, + "track-lanes-delete-lanes-including-media-items-that-are-not-playing": 42691, + "track-lanes-delete-lanes-including-media-items-with-no-comp-areas": 42690, + "track-lanes-delete-source-media-within-comp-areas-and-re-comp": 42629, + "track-lanes-delete-source-media-within-comp-areas-and-re-comp-for-track-under-mouse": 42684, + "track-lanes-discard-media-item-edits-and-re-comp-from-source-lane-for-track-under-mouse": 42950, + "track-lanes-duplicate-items-from-playing-lanes-to-new-lanes": 42505, + "track-lanes-insert-empty-lane-at-top-of-track": 42500, + "track-lanes-media-items-in-higher-numbered-lanes-mask-playback-of-lower-lanes": 42941, + "track-lanes-media-items-in-higher-numbered-lanes-mask-playback-of-lower-lanes-for-track-under-mouse": 42940, + "track-lanes-move-items-down-one-lane": 40107, + "track-lanes-move-items-down-to-first-available-lane-add-lane-if-needed": 42787, + "track-lanes-move-items-to-bottom-lane": 42588, + "track-lanes-move-items-to-top-lane": 42587, + "track-lanes-move-items-up-if-possible-to-minimize-lane-usage": 42959, + "track-lanes-move-items-up-if-possible-to-minimize-lane-usage-preserve-relative-lane-positions": 42938, + "track-lanes-move-items-up-one-lane": 40068, + "track-lanes-play-all-lanes": 42799, + "track-lanes-play-all-lanes-for-track-under-mouse": 42479, + "track-lanes-play-no-lanes": 42800, + "track-lanes-play-no-lanes-for-track-under-mouse": 42490, + "track-lanes-play-only-first-lane": 42790, + "track-lanes-play-only-first-lane-for-track-under-mouse": 42791, + "track-lanes-play-only-lane-under-mouse": 42478, + "track-lanes-play-only-most-recently-playing-lane": 43701, + "track-lanes-play-only-most-recently-playing-lane-for-track-under-mouse": 43702, + "track-lanes-play-only-next-lane": 42482, + "track-lanes-play-only-next-lane-for-track-under-mouse": 42484, + "track-lanes-play-only-previous-lane": 42481, + "track-lanes-play-only-previous-lane-for-track-under-mouse": 42483, + "track-lanes-record-into-lane-under-mouse": 42471, + "track-lanes-refresh-out-of-sync-comp-areas-for-track-under-mouse": 42952, + "track-lanes-rename-lane-under-mouse": 42472, + "track-lanes-reset-all-lane-names": 42801, + "track-lanes-reset-all-lane-names-for-track-under-mouse": 42703, + "track-lanes-select-items-in-lane-under-mouse": 42469, + "track-lanes-toggle-playing-lane-under-mouse": 42480, + "track-lanes-turn-off-comping": 42692, + "track-lanes-turn-off-comping-for-track-under-mouse": 42506, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-all-channels": 41555, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-1": 41539, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-10": 41548, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-11": 41549, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-12": 41550, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-13": 41551, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-14": 41552, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-15": 41553, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-16": 41554, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-2": 41540, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-3": 41541, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-4": 41542, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-5": 41543, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-6": 41544, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-7": 41545, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-8": 41546, + "track-link-track-volume-pan-controls-to-midi-volume-pan-on-channel-9": 41547, + "track-lock-track-controls": 41312, + "track-lock-unlock-track-height": 42336, + "track-lufs-measures-first-two-channels-only": 42452, + "track-make-all-tracks-visible-in-tcp-and-mixer": 41594, + "track-move-all-media-items-from-all-hidden-child-tracks": 42454, + "track-move-all-media-items-to-new-hidden-child-track": 42453, + "track-move-tracks-down": 43648, + "track-move-tracks-to-folder": 42786, + "track-move-tracks-to-new-folder": 42785, + "track-move-tracks-to-subproject": 41997, + "track-move-tracks-up": 43647, + "track-mute-all-tracks": 40341, + "track-mute-tracks": 40730, + "track-mute-unmute-tracks": 40280, + "track-nudge-master-track-volume-down": 40744, + "track-nudge-master-track-volume-up": 40743, + "track-nudge-track-pan-left": 40283, + "track-nudge-track-pan-right": 40284, + "track-nudge-track-volume-down": 40116, + "track-nudge-track-volume-up": 40115, + "track-open-close-ui-for-fx-number-1-on-last-touched-track": 41749, + "track-open-close-ui-for-fx-number-2-on-last-touched-track": 41750, + "track-open-close-ui-for-fx-number-3-on-last-touched-track": 41751, + "track-open-close-ui-for-fx-number-4-on-last-touched-track": 41752, + "track-open-close-ui-for-fx-number-5-on-last-touched-track": 41753, + "track-open-close-ui-for-fx-number-6-on-last-touched-track": 41754, + "track-open-close-ui-for-fx-number-7-on-last-touched-track": 41755, + "track-open-close-ui-for-fx-number-8-on-last-touched-track": 41756, + "track-override-show-all-hidden-tracks-in-tcp": 43574, + "track-override-unpin-all-pinned-tracks-in-tcp": 43573, + "track-pin-tracks-to-top-of-arrange-view": 40000, + "track-pin-tracks-to-top-of-arrange-view-unpin-all-other-tracks-except-master": 40008, + "track-prevent-spectral-peaks-spectrogram": 42075, + "track-prevent-track-anticipative-fx": 40610, + "track-prevent-track-media-buffering": 40608, + "track-properties-free-item-positioning": 40641, + "track-properties-hide-fixed-lane-buttons": 40092, + "track-properties-make-fixed-item-lanes-big": 43101, + "track-properties-make-fixed-item-lanes-small": 43100, + "track-properties-set-fixed-item-lanes": 42431, + "track-properties-set-fixed-lanes-convert-takes-to-lanes": 42661, + "track-properties-set-free-item-positioning": 40751, + "track-properties-set-track-timebase-to-beats-position-length-rate": 40488, + "track-properties-set-track-timebase-to-beats-position-only": 40489, + "track-properties-set-track-timebase-to-project-default": 40486, + "track-properties-set-track-timebase-to-time": 40487, + "track-properties-show-fixed-lane-buttons": 40091, + "track-properties-show-hide-fixed-lane-buttons": 42610, + "track-properties-show-play-all-fixed-item-lanes": 43099, + "track-properties-show-play-only-one-fixed-item-lane": 43098, + "track-properties-toggle-fixed-item-lanes": 42430, + "track-properties-toggle-fixed-item-lanes-big-small": 42704, + "track-properties-toggle-fixed-item-lanes-convert-takes-to-lanes": 42660, + "track-properties-toggle-show-play-only-one-fixed-item-lane": 42638, + "track-properties-unset-free-item-positioning-fixed-item-lanes": 40752, + "track-properties-unset-free-item-positioning-fixed-item-lanes-convert-fixed-lanes-to-takes": 42662, + "track-remove-selected-tracks-from-all-track-media-razor-editing-groups": 42579, + "track-remove-track-icon": 40900, + "track-remove-track-spacers": 42670, + "track-remove-tracks": 40005, + "track-remove-visual-spacer-after-last-touched-track": 42674, + "track-remove-visual-spacer-after-tracks": 42668, + "track-remove-visual-spacer-before-last-touched-track": 42673, + "track-remove-visual-spacer-before-tracks": 42667, + "track-rename-last-touched-track": 40696, + "track-render-selected-area-of-tracks-to-mono-post-fader-stem-tracks-and-mute-originals": 41718, + "track-render-selected-area-of-tracks-to-mono-stem-tracks-and-mute-originals": 41721, + "track-render-selected-area-of-tracks-to-multichannel-parent-send-only-post-fader-stem-tracks-and-mute-originals": 42591, + "track-render-selected-area-of-tracks-to-multichannel-parent-send-only-stem-tracks-and-mute-originals": 42592, + "track-render-selected-area-of-tracks-to-multichannel-post-fader-stem-tracks-and-mute-originals": 41717, + "track-render-selected-area-of-tracks-to-multichannel-stem-tracks-and-mute-originals": 41720, + "track-render-selected-area-of-tracks-to-stereo-post-fader-stem-tracks-and-mute-originals": 41716, + "track-render-selected-area-of-tracks-to-stereo-stem-tracks-and-mute-originals": 41719, + "track-render-tracks-to-mono-post-fader-stem-tracks-and-mute-originals": 40537, + "track-render-tracks-to-mono-stem-tracks-and-mute-originals": 40789, + "track-render-tracks-to-multichannel-parent-send-only-post-fader-stem-tracks-and-mute-originals": 42589, + "track-render-tracks-to-multichannel-parent-send-only-stem-tracks-and-mute-originals": 42590, + "track-render-tracks-to-multichannel-post-fader-stem-tracks-and-mute-originals": 40892, + "track-render-tracks-to-multichannel-stem-tracks-and-mute-originals": 40893, + "track-render-tracks-to-stereo-post-fader-stem-tracks-and-mute-originals": 40405, + "track-render-tracks-to-stereo-stem-tracks-and-mute-originals": 40788, + "track-save-tracks-as-track-template": 40392, + "track-select-all-top-level-tracks": 41803, + "track-select-all-tracks": 40296, + "track-select-all-tracks-that-have-controls-locked": 41324, + "track-select-fx-envelope-01": 41872, + "track-select-fx-envelope-02": 41873, + "track-select-fx-envelope-03": 41874, + "track-select-fx-envelope-04": 41875, + "track-select-fx-envelope-05": 41876, + "track-select-fx-envelope-06": 41877, + "track-select-fx-envelope-07": 41878, + "track-select-fx-envelope-08": 41879, + "track-select-fx-envelope-09": 41880, + "track-select-fx-envelope-10": 41881, + "track-select-last-touched-track": 40505, + "track-select-mute-envelope": 41871, + "track-select-next-envelope": 41864, + "track-select-pan-envelope": 41868, + "track-select-pre-fx-pan-envelope": 41867, + "track-select-pre-fx-volume-envelope": 41865, + "track-select-pre-fx-width-envelope": 41869, + "track-select-previous-envelope": 41863, + "track-select-track-01": 40939, + "track-select-track-02": 40940, + "track-select-track-03": 40941, + "track-select-track-04": 40942, + "track-select-track-05": 40943, + "track-select-track-06": 40944, + "track-select-track-07": 40945, + "track-select-track-08": 40946, + "track-select-track-09": 40947, + "track-select-track-10": 40948, + "track-select-track-11": 40949, + "track-select-track-12": 40950, + "track-select-track-13": 40951, + "track-select-track-14": 40952, + "track-select-track-15": 40953, + "track-select-track-16": 40954, + "track-select-track-17": 40955, + "track-select-track-18": 40956, + "track-select-track-19": 40957, + "track-select-track-20": 40958, + "track-select-track-21": 40959, + "track-select-track-22": 40960, + "track-select-track-23": 40961, + "track-select-track-24": 40962, + "track-select-track-25": 40963, + "track-select-track-26": 40964, + "track-select-track-27": 40965, + "track-select-track-28": 40966, + "track-select-track-29": 40967, + "track-select-track-30": 40968, + "track-select-track-31": 40969, + "track-select-track-32": 40970, + "track-select-track-33": 40971, + "track-select-track-34": 40972, + "track-select-track-35": 40973, + "track-select-track-36": 40974, + "track-select-track-37": 40975, + "track-select-track-38": 40976, + "track-select-track-39": 40977, + "track-select-track-40": 40978, + "track-select-track-41": 40979, + "track-select-track-42": 40980, + "track-select-track-43": 40981, + "track-select-track-44": 40982, + "track-select-track-45": 40983, + "track-select-track-46": 40984, + "track-select-track-47": 40985, + "track-select-track-48": 40986, + "track-select-track-49": 40987, + "track-select-track-50": 40988, + "track-select-track-51": 40989, + "track-select-track-52": 40990, + "track-select-track-53": 40991, + "track-select-track-54": 40992, + "track-select-track-55": 40993, + "track-select-track-56": 40994, + "track-select-track-57": 40995, + "track-select-track-58": 40996, + "track-select-track-59": 40997, + "track-select-track-60": 40998, + "track-select-track-61": 40999, + "track-select-track-62": 41000, + "track-select-track-63": 41001, + "track-select-track-64": 41002, + "track-select-track-65": 41003, + "track-select-track-66": 41004, + "track-select-track-67": 41005, + "track-select-track-68": 41006, + "track-select-track-69": 41007, + "track-select-track-70": 41008, + "track-select-track-71": 41009, + "track-select-track-72": 41010, + "track-select-track-73": 41011, + "track-select-track-74": 41012, + "track-select-track-75": 41013, + "track-select-track-76": 41014, + "track-select-track-77": 41015, + "track-select-track-78": 41016, + "track-select-track-79": 41017, + "track-select-track-80": 41018, + "track-select-track-81": 41019, + "track-select-track-82": 41020, + "track-select-track-83": 41021, + "track-select-track-84": 41022, + "track-select-track-85": 41023, + "track-select-track-86": 41024, + "track-select-track-87": 41025, + "track-select-track-88": 41026, + "track-select-track-89": 41027, + "track-select-track-90": 41028, + "track-select-track-91": 41029, + "track-select-track-92": 41030, + "track-select-track-93": 41031, + "track-select-track-94": 41032, + "track-select-track-95": 41033, + "track-select-track-96": 41034, + "track-select-track-97": 41035, + "track-select-track-98": 41036, + "track-select-track-99": 41037, + "track-select-track-under-mouse": 41110, + "track-select-volume-envelope": 41866, + "track-select-width-envelope": 41870, + "track-set-all-fx-offline-for-selected-tracks": 40535, + "track-set-all-fx-online-for-selected-tracks": 40536, + "track-set-automatic-record-arm-when-track-selected": 40737, + "track-set-big-fixed-lanes-for-all-fixed-lane-tracks-in-the-project": 42963, + "track-set-clear-all-tracks-automatic-record-arm": 40740, + "track-set-first-selected-track-as-last-touched-track": 40914, + "track-set-meters-to-combined-rms": 42443, + "track-set-meters-to-lufs-m-momentary-loudness": 42444, + "track-set-meters-to-lufs-s-short-term-loudness-readout-current": 42451, + "track-set-meters-to-lufs-s-short-term-loudness-readout-max": 42445, + "track-set-meters-to-multichannel-peaks": 42450, + "track-set-meters-to-stereo-peaks": 42442, + "track-set-meters-to-stereo-rms": 42446, + "track-set-midi-input-quantize-to-1-16-for-all-tracks": 42047, + "track-set-midi-input-quantize-to-1-16-for-last-touched-track": 42055, + "track-set-midi-input-quantize-to-1-16-for-selected-tracks": 42039, + "track-set-midi-input-quantize-to-1-16-triplet-for-all-tracks": 42046, + "track-set-midi-input-quantize-to-1-16-triplet-for-last-touched-track": 42054, + "track-set-midi-input-quantize-to-1-16-triplet-for-selected-tracks": 42038, + "track-set-midi-input-quantize-to-1-32-for-all-tracks": 42045, + "track-set-midi-input-quantize-to-1-32-for-last-touched-track": 42053, + "track-set-midi-input-quantize-to-1-32-for-selected-tracks": 42037, + "track-set-midi-input-quantize-to-1-4-for-all-tracks": 42051, + "track-set-midi-input-quantize-to-1-4-for-last-touched-track": 42059, + "track-set-midi-input-quantize-to-1-4-for-selected-tracks": 42043, + "track-set-midi-input-quantize-to-1-4-triplet-for-all-tracks": 42050, + "track-set-midi-input-quantize-to-1-4-triplet-for-last-touched-track": 42058, + "track-set-midi-input-quantize-to-1-4-triplet-for-selected-tracks": 42042, + "track-set-midi-input-quantize-to-1-64-for-all-tracks": 42044, + "track-set-midi-input-quantize-to-1-64-for-last-touched-track": 42052, + "track-set-midi-input-quantize-to-1-64-for-selected-tracks": 42036, + "track-set-midi-input-quantize-to-1-8-for-all-tracks": 42049, + "track-set-midi-input-quantize-to-1-8-for-last-touched-track": 42057, + "track-set-midi-input-quantize-to-1-8-for-selected-tracks": 42041, + "track-set-midi-input-quantize-to-1-8-triplet-for-all-tracks": 42048, + "track-set-midi-input-quantize-to-1-8-triplet-for-last-touched-track": 42056, + "track-set-midi-input-quantize-to-1-8-triplet-for-selected-tracks": 42040, + "track-set-midi-input-quantize-to-grid-for-all-tracks": 42061, + "track-set-midi-input-quantize-to-grid-for-last-touched-track": 42062, + "track-set-midi-input-quantize-to-grid-for-selected-tracks": 42060, + "track-set-mute-for-last-touched-track-midi-cc-osc-only": 818, + "track-set-mute-for-master-track-midi-cc-osc-only": 18, + "track-set-mute-for-selected-tracks-midi-cc-osc-only": 10, + "track-set-mute-for-track-01-midi-cc-osc-only": 26, + "track-set-mute-for-track-02-midi-cc-osc-only": 34, + "track-set-mute-for-track-03-midi-cc-osc-only": 42, + "track-set-mute-for-track-04-midi-cc-osc-only": 50, + "track-set-mute-for-track-05-midi-cc-osc-only": 58, + "track-set-mute-for-track-06-midi-cc-osc-only": 66, + "track-set-mute-for-track-07-midi-cc-osc-only": 74, + "track-set-mute-for-track-08-midi-cc-osc-only": 82, + "track-set-mute-for-track-09-midi-cc-osc-only": 90, + "track-set-mute-for-track-10-midi-cc-osc-only": 98, + "track-set-mute-for-track-11-midi-cc-osc-only": 106, + "track-set-mute-for-track-12-midi-cc-osc-only": 114, + "track-set-mute-for-track-13-midi-cc-osc-only": 122, + "track-set-mute-for-track-14-midi-cc-osc-only": 130, + "track-set-mute-for-track-15-midi-cc-osc-only": 138, + "track-set-mute-for-track-16-midi-cc-osc-only": 146, + "track-set-mute-for-track-17-midi-cc-osc-only": 154, + "track-set-mute-for-track-18-midi-cc-osc-only": 162, + "track-set-mute-for-track-19-midi-cc-osc-only": 170, + "track-set-mute-for-track-20-midi-cc-osc-only": 178, + "track-set-mute-for-track-21-midi-cc-osc-only": 186, + "track-set-mute-for-track-22-midi-cc-osc-only": 194, + "track-set-mute-for-track-23-midi-cc-osc-only": 202, + "track-set-mute-for-track-24-midi-cc-osc-only": 210, + "track-set-mute-for-track-25-midi-cc-osc-only": 218, + "track-set-mute-for-track-26-midi-cc-osc-only": 226, + "track-set-mute-for-track-27-midi-cc-osc-only": 234, + "track-set-mute-for-track-28-midi-cc-osc-only": 242, + "track-set-mute-for-track-29-midi-cc-osc-only": 250, + "track-set-mute-for-track-30-midi-cc-osc-only": 258, + "track-set-mute-for-track-31-midi-cc-osc-only": 266, + "track-set-mute-for-track-32-midi-cc-osc-only": 274, + "track-set-mute-for-track-33-midi-cc-osc-only": 282, + "track-set-mute-for-track-34-midi-cc-osc-only": 290, + "track-set-mute-for-track-35-midi-cc-osc-only": 298, + "track-set-mute-for-track-36-midi-cc-osc-only": 306, + "track-set-mute-for-track-37-midi-cc-osc-only": 314, + "track-set-mute-for-track-38-midi-cc-osc-only": 322, + "track-set-mute-for-track-39-midi-cc-osc-only": 330, + "track-set-mute-for-track-40-midi-cc-osc-only": 338, + "track-set-mute-for-track-41-midi-cc-osc-only": 346, + "track-set-mute-for-track-42-midi-cc-osc-only": 354, + "track-set-mute-for-track-43-midi-cc-osc-only": 362, + "track-set-mute-for-track-44-midi-cc-osc-only": 370, + "track-set-mute-for-track-45-midi-cc-osc-only": 378, + "track-set-mute-for-track-46-midi-cc-osc-only": 386, + "track-set-mute-for-track-47-midi-cc-osc-only": 394, + "track-set-mute-for-track-48-midi-cc-osc-only": 402, + "track-set-mute-for-track-49-midi-cc-osc-only": 410, + "track-set-mute-for-track-50-midi-cc-osc-only": 418, + "track-set-mute-for-track-51-midi-cc-osc-only": 426, + "track-set-mute-for-track-52-midi-cc-osc-only": 434, + "track-set-mute-for-track-53-midi-cc-osc-only": 442, + "track-set-mute-for-track-54-midi-cc-osc-only": 450, + "track-set-mute-for-track-55-midi-cc-osc-only": 458, + "track-set-mute-for-track-56-midi-cc-osc-only": 466, + "track-set-mute-for-track-57-midi-cc-osc-only": 474, + "track-set-mute-for-track-58-midi-cc-osc-only": 482, + "track-set-mute-for-track-59-midi-cc-osc-only": 490, + "track-set-mute-for-track-60-midi-cc-osc-only": 498, + "track-set-mute-for-track-61-midi-cc-osc-only": 506, + "track-set-mute-for-track-62-midi-cc-osc-only": 514, + "track-set-mute-for-track-63-midi-cc-osc-only": 522, + "track-set-mute-for-track-64-midi-cc-osc-only": 530, + "track-set-mute-for-track-65-midi-cc-osc-only": 538, + "track-set-mute-for-track-66-midi-cc-osc-only": 546, + "track-set-mute-for-track-67-midi-cc-osc-only": 554, + "track-set-mute-for-track-68-midi-cc-osc-only": 562, + "track-set-mute-for-track-69-midi-cc-osc-only": 570, + "track-set-mute-for-track-70-midi-cc-osc-only": 578, + "track-set-mute-for-track-71-midi-cc-osc-only": 586, + "track-set-mute-for-track-72-midi-cc-osc-only": 594, + "track-set-mute-for-track-73-midi-cc-osc-only": 602, + "track-set-mute-for-track-74-midi-cc-osc-only": 610, + "track-set-mute-for-track-75-midi-cc-osc-only": 618, + "track-set-mute-for-track-76-midi-cc-osc-only": 626, + "track-set-mute-for-track-77-midi-cc-osc-only": 634, + "track-set-mute-for-track-78-midi-cc-osc-only": 642, + "track-set-mute-for-track-79-midi-cc-osc-only": 650, + "track-set-mute-for-track-80-midi-cc-osc-only": 658, + "track-set-mute-for-track-81-midi-cc-osc-only": 666, + "track-set-mute-for-track-82-midi-cc-osc-only": 674, + "track-set-mute-for-track-83-midi-cc-osc-only": 682, + "track-set-mute-for-track-84-midi-cc-osc-only": 690, + "track-set-mute-for-track-85-midi-cc-osc-only": 698, + "track-set-mute-for-track-86-midi-cc-osc-only": 706, + "track-set-mute-for-track-87-midi-cc-osc-only": 714, + "track-set-mute-for-track-88-midi-cc-osc-only": 722, + "track-set-mute-for-track-89-midi-cc-osc-only": 730, + "track-set-mute-for-track-90-midi-cc-osc-only": 738, + "track-set-mute-for-track-91-midi-cc-osc-only": 746, + "track-set-mute-for-track-92-midi-cc-osc-only": 754, + "track-set-mute-for-track-93-midi-cc-osc-only": 762, + "track-set-mute-for-track-94-midi-cc-osc-only": 770, + "track-set-mute-for-track-95-midi-cc-osc-only": 778, + "track-set-mute-for-track-96-midi-cc-osc-only": 786, + "track-set-mute-for-track-97-midi-cc-osc-only": 794, + "track-set-mute-for-track-98-midi-cc-osc-only": 802, + "track-set-mute-for-track-99-midi-cc-osc-only": 810, + "track-set-pan-for-last-touched-track-midi-cc-osc-only": 813, + "track-set-pan-for-master-track-midi-cc-osc-only": 13, + "track-set-pan-for-selected-tracks-midi-cc-osc-only": 5, + "track-set-pan-for-track-01-midi-cc-osc-only": 21, + "track-set-pan-for-track-02-midi-cc-osc-only": 29, + "track-set-pan-for-track-03-midi-cc-osc-only": 37, + "track-set-pan-for-track-04-midi-cc-osc-only": 45, + "track-set-pan-for-track-05-midi-cc-osc-only": 53, + "track-set-pan-for-track-06-midi-cc-osc-only": 61, + "track-set-pan-for-track-07-midi-cc-osc-only": 69, + "track-set-pan-for-track-08-midi-cc-osc-only": 77, + "track-set-pan-for-track-09-midi-cc-osc-only": 85, + "track-set-pan-for-track-10-midi-cc-osc-only": 93, + "track-set-pan-for-track-11-midi-cc-osc-only": 101, + "track-set-pan-for-track-12-midi-cc-osc-only": 109, + "track-set-pan-for-track-13-midi-cc-osc-only": 117, + "track-set-pan-for-track-14-midi-cc-osc-only": 125, + "track-set-pan-for-track-15-midi-cc-osc-only": 133, + "track-set-pan-for-track-16-midi-cc-osc-only": 141, + "track-set-pan-for-track-17-midi-cc-osc-only": 149, + "track-set-pan-for-track-18-midi-cc-osc-only": 157, + "track-set-pan-for-track-19-midi-cc-osc-only": 165, + "track-set-pan-for-track-20-midi-cc-osc-only": 173, + "track-set-pan-for-track-21-midi-cc-osc-only": 181, + "track-set-pan-for-track-22-midi-cc-osc-only": 189, + "track-set-pan-for-track-23-midi-cc-osc-only": 197, + "track-set-pan-for-track-24-midi-cc-osc-only": 205, + "track-set-pan-for-track-25-midi-cc-osc-only": 213, + "track-set-pan-for-track-26-midi-cc-osc-only": 221, + "track-set-pan-for-track-27-midi-cc-osc-only": 229, + "track-set-pan-for-track-28-midi-cc-osc-only": 237, + "track-set-pan-for-track-29-midi-cc-osc-only": 245, + "track-set-pan-for-track-30-midi-cc-osc-only": 253, + "track-set-pan-for-track-31-midi-cc-osc-only": 261, + "track-set-pan-for-track-32-midi-cc-osc-only": 269, + "track-set-pan-for-track-33-midi-cc-osc-only": 277, + "track-set-pan-for-track-34-midi-cc-osc-only": 285, + "track-set-pan-for-track-35-midi-cc-osc-only": 293, + "track-set-pan-for-track-36-midi-cc-osc-only": 301, + "track-set-pan-for-track-37-midi-cc-osc-only": 309, + "track-set-pan-for-track-38-midi-cc-osc-only": 317, + "track-set-pan-for-track-39-midi-cc-osc-only": 325, + "track-set-pan-for-track-40-midi-cc-osc-only": 333, + "track-set-pan-for-track-41-midi-cc-osc-only": 341, + "track-set-pan-for-track-42-midi-cc-osc-only": 349, + "track-set-pan-for-track-43-midi-cc-osc-only": 357, + "track-set-pan-for-track-44-midi-cc-osc-only": 365, + "track-set-pan-for-track-45-midi-cc-osc-only": 373, + "track-set-pan-for-track-46-midi-cc-osc-only": 381, + "track-set-pan-for-track-47-midi-cc-osc-only": 389, + "track-set-pan-for-track-48-midi-cc-osc-only": 397, + "track-set-pan-for-track-49-midi-cc-osc-only": 405, + "track-set-pan-for-track-50-midi-cc-osc-only": 413, + "track-set-pan-for-track-51-midi-cc-osc-only": 421, + "track-set-pan-for-track-52-midi-cc-osc-only": 429, + "track-set-pan-for-track-53-midi-cc-osc-only": 437, + "track-set-pan-for-track-54-midi-cc-osc-only": 445, + "track-set-pan-for-track-55-midi-cc-osc-only": 453, + "track-set-pan-for-track-56-midi-cc-osc-only": 461, + "track-set-pan-for-track-57-midi-cc-osc-only": 469, + "track-set-pan-for-track-58-midi-cc-osc-only": 477, + "track-set-pan-for-track-59-midi-cc-osc-only": 485, + "track-set-pan-for-track-60-midi-cc-osc-only": 493, + "track-set-pan-for-track-61-midi-cc-osc-only": 501, + "track-set-pan-for-track-62-midi-cc-osc-only": 509, + "track-set-pan-for-track-63-midi-cc-osc-only": 517, + "track-set-pan-for-track-64-midi-cc-osc-only": 525, + "track-set-pan-for-track-65-midi-cc-osc-only": 533, + "track-set-pan-for-track-66-midi-cc-osc-only": 541, + "track-set-pan-for-track-67-midi-cc-osc-only": 549, + "track-set-pan-for-track-68-midi-cc-osc-only": 557, + "track-set-pan-for-track-69-midi-cc-osc-only": 565, + "track-set-pan-for-track-70-midi-cc-osc-only": 573, + "track-set-pan-for-track-71-midi-cc-osc-only": 581, + "track-set-pan-for-track-72-midi-cc-osc-only": 589, + "track-set-pan-for-track-73-midi-cc-osc-only": 597, + "track-set-pan-for-track-74-midi-cc-osc-only": 605, + "track-set-pan-for-track-75-midi-cc-osc-only": 613, + "track-set-pan-for-track-76-midi-cc-osc-only": 621, + "track-set-pan-for-track-77-midi-cc-osc-only": 629, + "track-set-pan-for-track-78-midi-cc-osc-only": 637, + "track-set-pan-for-track-79-midi-cc-osc-only": 645, + "track-set-pan-for-track-80-midi-cc-osc-only": 653, + "track-set-pan-for-track-81-midi-cc-osc-only": 661, + "track-set-pan-for-track-82-midi-cc-osc-only": 669, + "track-set-pan-for-track-83-midi-cc-osc-only": 677, + "track-set-pan-for-track-84-midi-cc-osc-only": 685, + "track-set-pan-for-track-85-midi-cc-osc-only": 693, + "track-set-pan-for-track-86-midi-cc-osc-only": 701, + "track-set-pan-for-track-87-midi-cc-osc-only": 709, + "track-set-pan-for-track-88-midi-cc-osc-only": 717, + "track-set-pan-for-track-89-midi-cc-osc-only": 725, + "track-set-pan-for-track-90-midi-cc-osc-only": 733, + "track-set-pan-for-track-91-midi-cc-osc-only": 741, + "track-set-pan-for-track-92-midi-cc-osc-only": 749, + "track-set-pan-for-track-93-midi-cc-osc-only": 757, + "track-set-pan-for-track-94-midi-cc-osc-only": 765, + "track-set-pan-for-track-95-midi-cc-osc-only": 773, + "track-set-pan-for-track-96-midi-cc-osc-only": 781, + "track-set-pan-for-track-97-midi-cc-osc-only": 789, + "track-set-pan-for-track-98-midi-cc-osc-only": 797, + "track-set-pan-for-track-99-midi-cc-osc-only": 805, + "track-set-preserve-pdc-delayed-monitoring-in-recorded-items": 41921, + "track-set-record-path-to-primary": 41321, + "track-set-record-path-to-primary-plus-secondary": 41323, + "track-set-record-path-to-secondary": 41322, + "track-set-small-fixed-lanes-for-all-fixed-lane-tracks-in-the-project": 42962, + "track-set-solo-for-last-touched-track-midi-cc-osc-only": 819, + "track-set-solo-for-master-track-midi-cc-osc-only": 19, + "track-set-solo-for-selected-tracks-midi-cc-osc-only": 11, + "track-set-solo-for-track-01-midi-cc-osc-only": 27, + "track-set-solo-for-track-02-midi-cc-osc-only": 35, + "track-set-solo-for-track-03-midi-cc-osc-only": 43, + "track-set-solo-for-track-04-midi-cc-osc-only": 51, + "track-set-solo-for-track-05-midi-cc-osc-only": 59, + "track-set-solo-for-track-06-midi-cc-osc-only": 67, + "track-set-solo-for-track-07-midi-cc-osc-only": 75, + "track-set-solo-for-track-08-midi-cc-osc-only": 83, + "track-set-solo-for-track-09-midi-cc-osc-only": 91, + "track-set-solo-for-track-10-midi-cc-osc-only": 99, + "track-set-solo-for-track-11-midi-cc-osc-only": 107, + "track-set-solo-for-track-12-midi-cc-osc-only": 115, + "track-set-solo-for-track-13-midi-cc-osc-only": 123, + "track-set-solo-for-track-14-midi-cc-osc-only": 131, + "track-set-solo-for-track-15-midi-cc-osc-only": 139, + "track-set-solo-for-track-16-midi-cc-osc-only": 147, + "track-set-solo-for-track-17-midi-cc-osc-only": 155, + "track-set-solo-for-track-18-midi-cc-osc-only": 163, + "track-set-solo-for-track-19-midi-cc-osc-only": 171, + "track-set-solo-for-track-20-midi-cc-osc-only": 179, + "track-set-solo-for-track-21-midi-cc-osc-only": 187, + "track-set-solo-for-track-22-midi-cc-osc-only": 195, + "track-set-solo-for-track-23-midi-cc-osc-only": 203, + "track-set-solo-for-track-24-midi-cc-osc-only": 211, + "track-set-solo-for-track-25-midi-cc-osc-only": 219, + "track-set-solo-for-track-26-midi-cc-osc-only": 227, + "track-set-solo-for-track-27-midi-cc-osc-only": 235, + "track-set-solo-for-track-28-midi-cc-osc-only": 243, + "track-set-solo-for-track-29-midi-cc-osc-only": 251, + "track-set-solo-for-track-30-midi-cc-osc-only": 259, + "track-set-solo-for-track-31-midi-cc-osc-only": 267, + "track-set-solo-for-track-32-midi-cc-osc-only": 275, + "track-set-solo-for-track-33-midi-cc-osc-only": 283, + "track-set-solo-for-track-34-midi-cc-osc-only": 291, + "track-set-solo-for-track-35-midi-cc-osc-only": 299, + "track-set-solo-for-track-36-midi-cc-osc-only": 307, + "track-set-solo-for-track-37-midi-cc-osc-only": 315, + "track-set-solo-for-track-38-midi-cc-osc-only": 323, + "track-set-solo-for-track-39-midi-cc-osc-only": 331, + "track-set-solo-for-track-40-midi-cc-osc-only": 339, + "track-set-solo-for-track-41-midi-cc-osc-only": 347, + "track-set-solo-for-track-42-midi-cc-osc-only": 355, + "track-set-solo-for-track-43-midi-cc-osc-only": 363, + "track-set-solo-for-track-44-midi-cc-osc-only": 371, + "track-set-solo-for-track-45-midi-cc-osc-only": 379, + "track-set-solo-for-track-46-midi-cc-osc-only": 387, + "track-set-solo-for-track-47-midi-cc-osc-only": 395, + "track-set-solo-for-track-48-midi-cc-osc-only": 403, + "track-set-solo-for-track-49-midi-cc-osc-only": 411, + "track-set-solo-for-track-50-midi-cc-osc-only": 419, + "track-set-solo-for-track-51-midi-cc-osc-only": 427, + "track-set-solo-for-track-52-midi-cc-osc-only": 435, + "track-set-solo-for-track-53-midi-cc-osc-only": 443, + "track-set-solo-for-track-54-midi-cc-osc-only": 451, + "track-set-solo-for-track-55-midi-cc-osc-only": 459, + "track-set-solo-for-track-56-midi-cc-osc-only": 467, + "track-set-solo-for-track-57-midi-cc-osc-only": 475, + "track-set-solo-for-track-58-midi-cc-osc-only": 483, + "track-set-solo-for-track-59-midi-cc-osc-only": 491, + "track-set-solo-for-track-60-midi-cc-osc-only": 499, + "track-set-solo-for-track-61-midi-cc-osc-only": 507, + "track-set-solo-for-track-62-midi-cc-osc-only": 515, + "track-set-solo-for-track-63-midi-cc-osc-only": 523, + "track-set-solo-for-track-64-midi-cc-osc-only": 531, + "track-set-solo-for-track-65-midi-cc-osc-only": 539, + "track-set-solo-for-track-66-midi-cc-osc-only": 547, + "track-set-solo-for-track-67-midi-cc-osc-only": 555, + "track-set-solo-for-track-68-midi-cc-osc-only": 563, + "track-set-solo-for-track-69-midi-cc-osc-only": 571, + "track-set-solo-for-track-70-midi-cc-osc-only": 579, + "track-set-solo-for-track-71-midi-cc-osc-only": 587, + "track-set-solo-for-track-72-midi-cc-osc-only": 595, + "track-set-solo-for-track-73-midi-cc-osc-only": 603, + "track-set-solo-for-track-74-midi-cc-osc-only": 611, + "track-set-solo-for-track-75-midi-cc-osc-only": 619, + "track-set-solo-for-track-76-midi-cc-osc-only": 627, + "track-set-solo-for-track-77-midi-cc-osc-only": 635, + "track-set-solo-for-track-78-midi-cc-osc-only": 643, + "track-set-solo-for-track-79-midi-cc-osc-only": 651, + "track-set-solo-for-track-80-midi-cc-osc-only": 659, + "track-set-solo-for-track-81-midi-cc-osc-only": 667, + "track-set-solo-for-track-82-midi-cc-osc-only": 675, + "track-set-solo-for-track-83-midi-cc-osc-only": 683, + "track-set-solo-for-track-84-midi-cc-osc-only": 691, + "track-set-solo-for-track-85-midi-cc-osc-only": 699, + "track-set-solo-for-track-86-midi-cc-osc-only": 707, + "track-set-solo-for-track-87-midi-cc-osc-only": 715, + "track-set-solo-for-track-88-midi-cc-osc-only": 723, + "track-set-solo-for-track-89-midi-cc-osc-only": 731, + "track-set-solo-for-track-90-midi-cc-osc-only": 739, + "track-set-solo-for-track-91-midi-cc-osc-only": 747, + "track-set-solo-for-track-92-midi-cc-osc-only": 755, + "track-set-solo-for-track-93-midi-cc-osc-only": 763, + "track-set-solo-for-track-94-midi-cc-osc-only": 771, + "track-set-solo-for-track-95-midi-cc-osc-only": 779, + "track-set-solo-for-track-96-midi-cc-osc-only": 787, + "track-set-solo-for-track-97-midi-cc-osc-only": 795, + "track-set-solo-for-track-98-midi-cc-osc-only": 803, + "track-set-solo-for-track-99-midi-cc-osc-only": 811, + "track-set-stereo-width-or-right-channel-pan-for-last-touched-track-midi-cc-osc-only": 30101, + "track-set-stereo-width-or-right-channel-pan-for-master-track-midi-cc-osc-only": 30001, + "track-set-stereo-width-or-right-channel-pan-for-selected-tracks-midi-cc-osc-only": 30000, + "track-set-stereo-width-or-right-channel-pan-for-track-01-midi-cc-osc-only": 30002, + "track-set-stereo-width-or-right-channel-pan-for-track-02-midi-cc-osc-only": 30003, + "track-set-stereo-width-or-right-channel-pan-for-track-03-midi-cc-osc-only": 30004, + "track-set-stereo-width-or-right-channel-pan-for-track-04-midi-cc-osc-only": 30005, + "track-set-stereo-width-or-right-channel-pan-for-track-05-midi-cc-osc-only": 30006, + "track-set-stereo-width-or-right-channel-pan-for-track-06-midi-cc-osc-only": 30007, + "track-set-stereo-width-or-right-channel-pan-for-track-07-midi-cc-osc-only": 30008, + "track-set-stereo-width-or-right-channel-pan-for-track-08-midi-cc-osc-only": 30009, + "track-set-stereo-width-or-right-channel-pan-for-track-09-midi-cc-osc-only": 30010, + "track-set-stereo-width-or-right-channel-pan-for-track-10-midi-cc-osc-only": 30011, + "track-set-stereo-width-or-right-channel-pan-for-track-11-midi-cc-osc-only": 30012, + "track-set-stereo-width-or-right-channel-pan-for-track-12-midi-cc-osc-only": 30013, + "track-set-stereo-width-or-right-channel-pan-for-track-13-midi-cc-osc-only": 30014, + "track-set-stereo-width-or-right-channel-pan-for-track-14-midi-cc-osc-only": 30015, + "track-set-stereo-width-or-right-channel-pan-for-track-15-midi-cc-osc-only": 30016, + "track-set-stereo-width-or-right-channel-pan-for-track-16-midi-cc-osc-only": 30017, + "track-set-stereo-width-or-right-channel-pan-for-track-17-midi-cc-osc-only": 30018, + "track-set-stereo-width-or-right-channel-pan-for-track-18-midi-cc-osc-only": 30019, + "track-set-stereo-width-or-right-channel-pan-for-track-19-midi-cc-osc-only": 30020, + "track-set-stereo-width-or-right-channel-pan-for-track-20-midi-cc-osc-only": 30021, + "track-set-stereo-width-or-right-channel-pan-for-track-21-midi-cc-osc-only": 30022, + "track-set-stereo-width-or-right-channel-pan-for-track-22-midi-cc-osc-only": 30023, + "track-set-stereo-width-or-right-channel-pan-for-track-23-midi-cc-osc-only": 30024, + "track-set-stereo-width-or-right-channel-pan-for-track-24-midi-cc-osc-only": 30025, + "track-set-stereo-width-or-right-channel-pan-for-track-25-midi-cc-osc-only": 30026, + "track-set-stereo-width-or-right-channel-pan-for-track-26-midi-cc-osc-only": 30027, + "track-set-stereo-width-or-right-channel-pan-for-track-27-midi-cc-osc-only": 30028, + "track-set-stereo-width-or-right-channel-pan-for-track-28-midi-cc-osc-only": 30029, + "track-set-stereo-width-or-right-channel-pan-for-track-29-midi-cc-osc-only": 30030, + "track-set-stereo-width-or-right-channel-pan-for-track-30-midi-cc-osc-only": 30031, + "track-set-stereo-width-or-right-channel-pan-for-track-31-midi-cc-osc-only": 30032, + "track-set-stereo-width-or-right-channel-pan-for-track-32-midi-cc-osc-only": 30033, + "track-set-stereo-width-or-right-channel-pan-for-track-33-midi-cc-osc-only": 30034, + "track-set-stereo-width-or-right-channel-pan-for-track-34-midi-cc-osc-only": 30035, + "track-set-stereo-width-or-right-channel-pan-for-track-35-midi-cc-osc-only": 30036, + "track-set-stereo-width-or-right-channel-pan-for-track-36-midi-cc-osc-only": 30037, + "track-set-stereo-width-or-right-channel-pan-for-track-37-midi-cc-osc-only": 30038, + "track-set-stereo-width-or-right-channel-pan-for-track-38-midi-cc-osc-only": 30039, + "track-set-stereo-width-or-right-channel-pan-for-track-39-midi-cc-osc-only": 30040, + "track-set-stereo-width-or-right-channel-pan-for-track-40-midi-cc-osc-only": 30041, + "track-set-stereo-width-or-right-channel-pan-for-track-41-midi-cc-osc-only": 30042, + "track-set-stereo-width-or-right-channel-pan-for-track-42-midi-cc-osc-only": 30043, + "track-set-stereo-width-or-right-channel-pan-for-track-43-midi-cc-osc-only": 30044, + "track-set-stereo-width-or-right-channel-pan-for-track-44-midi-cc-osc-only": 30045, + "track-set-stereo-width-or-right-channel-pan-for-track-45-midi-cc-osc-only": 30046, + "track-set-stereo-width-or-right-channel-pan-for-track-46-midi-cc-osc-only": 30047, + "track-set-stereo-width-or-right-channel-pan-for-track-47-midi-cc-osc-only": 30048, + "track-set-stereo-width-or-right-channel-pan-for-track-48-midi-cc-osc-only": 30049, + "track-set-stereo-width-or-right-channel-pan-for-track-49-midi-cc-osc-only": 30050, + "track-set-stereo-width-or-right-channel-pan-for-track-50-midi-cc-osc-only": 30051, + "track-set-stereo-width-or-right-channel-pan-for-track-51-midi-cc-osc-only": 30052, + "track-set-stereo-width-or-right-channel-pan-for-track-52-midi-cc-osc-only": 30053, + "track-set-stereo-width-or-right-channel-pan-for-track-53-midi-cc-osc-only": 30054, + "track-set-stereo-width-or-right-channel-pan-for-track-54-midi-cc-osc-only": 30055, + "track-set-stereo-width-or-right-channel-pan-for-track-55-midi-cc-osc-only": 30056, + "track-set-stereo-width-or-right-channel-pan-for-track-56-midi-cc-osc-only": 30057, + "track-set-stereo-width-or-right-channel-pan-for-track-57-midi-cc-osc-only": 30058, + "track-set-stereo-width-or-right-channel-pan-for-track-58-midi-cc-osc-only": 30059, + "track-set-stereo-width-or-right-channel-pan-for-track-59-midi-cc-osc-only": 30060, + "track-set-stereo-width-or-right-channel-pan-for-track-60-midi-cc-osc-only": 30061, + "track-set-stereo-width-or-right-channel-pan-for-track-61-midi-cc-osc-only": 30062, + "track-set-stereo-width-or-right-channel-pan-for-track-62-midi-cc-osc-only": 30063, + "track-set-stereo-width-or-right-channel-pan-for-track-63-midi-cc-osc-only": 30064, + "track-set-stereo-width-or-right-channel-pan-for-track-64-midi-cc-osc-only": 30065, + "track-set-stereo-width-or-right-channel-pan-for-track-65-midi-cc-osc-only": 30066, + "track-set-stereo-width-or-right-channel-pan-for-track-66-midi-cc-osc-only": 30067, + "track-set-stereo-width-or-right-channel-pan-for-track-67-midi-cc-osc-only": 30068, + "track-set-stereo-width-or-right-channel-pan-for-track-68-midi-cc-osc-only": 30069, + "track-set-stereo-width-or-right-channel-pan-for-track-69-midi-cc-osc-only": 30070, + "track-set-stereo-width-or-right-channel-pan-for-track-70-midi-cc-osc-only": 30071, + "track-set-stereo-width-or-right-channel-pan-for-track-71-midi-cc-osc-only": 30072, + "track-set-stereo-width-or-right-channel-pan-for-track-72-midi-cc-osc-only": 30073, + "track-set-stereo-width-or-right-channel-pan-for-track-73-midi-cc-osc-only": 30074, + "track-set-stereo-width-or-right-channel-pan-for-track-74-midi-cc-osc-only": 30075, + "track-set-stereo-width-or-right-channel-pan-for-track-75-midi-cc-osc-only": 30076, + "track-set-stereo-width-or-right-channel-pan-for-track-76-midi-cc-osc-only": 30077, + "track-set-stereo-width-or-right-channel-pan-for-track-77-midi-cc-osc-only": 30078, + "track-set-stereo-width-or-right-channel-pan-for-track-78-midi-cc-osc-only": 30079, + "track-set-stereo-width-or-right-channel-pan-for-track-79-midi-cc-osc-only": 30080, + "track-set-stereo-width-or-right-channel-pan-for-track-80-midi-cc-osc-only": 30081, + "track-set-stereo-width-or-right-channel-pan-for-track-81-midi-cc-osc-only": 30082, + "track-set-stereo-width-or-right-channel-pan-for-track-82-midi-cc-osc-only": 30083, + "track-set-stereo-width-or-right-channel-pan-for-track-83-midi-cc-osc-only": 30084, + "track-set-stereo-width-or-right-channel-pan-for-track-84-midi-cc-osc-only": 30085, + "track-set-stereo-width-or-right-channel-pan-for-track-85-midi-cc-osc-only": 30086, + "track-set-stereo-width-or-right-channel-pan-for-track-86-midi-cc-osc-only": 30087, + "track-set-stereo-width-or-right-channel-pan-for-track-87-midi-cc-osc-only": 30088, + "track-set-stereo-width-or-right-channel-pan-for-track-88-midi-cc-osc-only": 30089, + "track-set-stereo-width-or-right-channel-pan-for-track-89-midi-cc-osc-only": 30090, + "track-set-stereo-width-or-right-channel-pan-for-track-90-midi-cc-osc-only": 30091, + "track-set-stereo-width-or-right-channel-pan-for-track-91-midi-cc-osc-only": 30092, + "track-set-stereo-width-or-right-channel-pan-for-track-92-midi-cc-osc-only": 30093, + "track-set-stereo-width-or-right-channel-pan-for-track-93-midi-cc-osc-only": 30094, + "track-set-stereo-width-or-right-channel-pan-for-track-94-midi-cc-osc-only": 30095, + "track-set-stereo-width-or-right-channel-pan-for-track-95-midi-cc-osc-only": 30096, + "track-set-stereo-width-or-right-channel-pan-for-track-96-midi-cc-osc-only": 30097, + "track-set-stereo-width-or-right-channel-pan-for-track-97-midi-cc-osc-only": 30098, + "track-set-stereo-width-or-right-channel-pan-for-track-98-midi-cc-osc-only": 30099, + "track-set-stereo-width-or-right-channel-pan-for-track-99-midi-cc-osc-only": 30100, + "track-set-to-custom-color": 40357, + "track-set-to-default-color": 40359, + "track-set-to-one-random-color": 40360, + "track-set-to-random-colors": 40358, + "track-set-track-grouping-parameters": 40772, + "track-set-track-icon": 40899, + "track-set-track-record-mode-to-input": 40496, + "track-set-track-record-mode-to-midi-latch-replace": 41727, + "track-set-track-record-mode-to-midi-output": 40500, + "track-set-track-record-mode-to-midi-overdub": 40503, + "track-set-track-record-mode-to-midi-replace": 40504, + "track-set-track-record-mode-to-midi-touch-replace": 40852, + "track-set-track-record-mode-to-none-monitoring-only": 40498, + "track-set-track-record-mode-to-output-full-multichannel": 40895, + "track-set-track-record-mode-to-output-full-multichannel-compensated": 40896, + "track-set-track-record-mode-to-output-mono": 40501, + "track-set-track-record-mode-to-output-mono-latency-compensated": 40502, + "track-set-track-record-mode-to-output-stereo": 40497, + "track-set-track-record-mode-to-output-stereo-latency-compensated": 40499, + "track-set-track-record-monitor-to-auto-tape": 40494, + "track-set-track-record-monitor-to-off": 40492, + "track-set-track-record-monitor-to-on": 40493, + "track-set-track-record-output-mode-to-post-fader": 42225, + "track-set-track-record-output-mode-to-post-fx-pre-fader": 42227, + "track-set-track-record-output-mode-to-pre-fx": 42226, + "track-set-track-solo-defeat": 41197, + "track-set-volume-for-last-touched-track-midi-cc-osc-only": 812, + "track-set-volume-for-master-track-midi-cc-osc-only": 12, + "track-set-volume-for-selected-tracks-midi-cc-osc-only": 4, + "track-set-volume-for-track-01-midi-cc-osc-only": 20, + "track-set-volume-for-track-02-midi-cc-osc-only": 28, + "track-set-volume-for-track-03-midi-cc-osc-only": 36, + "track-set-volume-for-track-04-midi-cc-osc-only": 44, + "track-set-volume-for-track-05-midi-cc-osc-only": 52, + "track-set-volume-for-track-06-midi-cc-osc-only": 60, + "track-set-volume-for-track-07-midi-cc-osc-only": 68, + "track-set-volume-for-track-08-midi-cc-osc-only": 76, + "track-set-volume-for-track-09-midi-cc-osc-only": 84, + "track-set-volume-for-track-10-midi-cc-osc-only": 92, + "track-set-volume-for-track-11-midi-cc-osc-only": 100, + "track-set-volume-for-track-12-midi-cc-osc-only": 108, + "track-set-volume-for-track-13-midi-cc-osc-only": 116, + "track-set-volume-for-track-14-midi-cc-osc-only": 124, + "track-set-volume-for-track-15-midi-cc-osc-only": 132, + "track-set-volume-for-track-16-midi-cc-osc-only": 140, + "track-set-volume-for-track-17-midi-cc-osc-only": 148, + "track-set-volume-for-track-18-midi-cc-osc-only": 156, + "track-set-volume-for-track-19-midi-cc-osc-only": 164, + "track-set-volume-for-track-20-midi-cc-osc-only": 172, + "track-set-volume-for-track-21-midi-cc-osc-only": 180, + "track-set-volume-for-track-22-midi-cc-osc-only": 188, + "track-set-volume-for-track-23-midi-cc-osc-only": 196, + "track-set-volume-for-track-24-midi-cc-osc-only": 204, + "track-set-volume-for-track-25-midi-cc-osc-only": 212, + "track-set-volume-for-track-26-midi-cc-osc-only": 220, + "track-set-volume-for-track-27-midi-cc-osc-only": 228, + "track-set-volume-for-track-28-midi-cc-osc-only": 236, + "track-set-volume-for-track-29-midi-cc-osc-only": 244, + "track-set-volume-for-track-30-midi-cc-osc-only": 252, + "track-set-volume-for-track-31-midi-cc-osc-only": 260, + "track-set-volume-for-track-32-midi-cc-osc-only": 268, + "track-set-volume-for-track-33-midi-cc-osc-only": 276, + "track-set-volume-for-track-34-midi-cc-osc-only": 284, + "track-set-volume-for-track-35-midi-cc-osc-only": 292, + "track-set-volume-for-track-36-midi-cc-osc-only": 300, + "track-set-volume-for-track-37-midi-cc-osc-only": 308, + "track-set-volume-for-track-38-midi-cc-osc-only": 316, + "track-set-volume-for-track-39-midi-cc-osc-only": 324, + "track-set-volume-for-track-40-midi-cc-osc-only": 332, + "track-set-volume-for-track-41-midi-cc-osc-only": 340, + "track-set-volume-for-track-42-midi-cc-osc-only": 348, + "track-set-volume-for-track-43-midi-cc-osc-only": 356, + "track-set-volume-for-track-44-midi-cc-osc-only": 364, + "track-set-volume-for-track-45-midi-cc-osc-only": 372, + "track-set-volume-for-track-46-midi-cc-osc-only": 380, + "track-set-volume-for-track-47-midi-cc-osc-only": 388, + "track-set-volume-for-track-48-midi-cc-osc-only": 396, + "track-set-volume-for-track-49-midi-cc-osc-only": 404, + "track-set-volume-for-track-50-midi-cc-osc-only": 412, + "track-set-volume-for-track-51-midi-cc-osc-only": 420, + "track-set-volume-for-track-52-midi-cc-osc-only": 428, + "track-set-volume-for-track-53-midi-cc-osc-only": 436, + "track-set-volume-for-track-54-midi-cc-osc-only": 444, + "track-set-volume-for-track-55-midi-cc-osc-only": 452, + "track-set-volume-for-track-56-midi-cc-osc-only": 460, + "track-set-volume-for-track-57-midi-cc-osc-only": 468, + "track-set-volume-for-track-58-midi-cc-osc-only": 476, + "track-set-volume-for-track-59-midi-cc-osc-only": 484, + "track-set-volume-for-track-60-midi-cc-osc-only": 492, + "track-set-volume-for-track-61-midi-cc-osc-only": 500, + "track-set-volume-for-track-62-midi-cc-osc-only": 508, + "track-set-volume-for-track-63-midi-cc-osc-only": 516, + "track-set-volume-for-track-64-midi-cc-osc-only": 524, + "track-set-volume-for-track-65-midi-cc-osc-only": 532, + "track-set-volume-for-track-66-midi-cc-osc-only": 540, + "track-set-volume-for-track-67-midi-cc-osc-only": 548, + "track-set-volume-for-track-68-midi-cc-osc-only": 556, + "track-set-volume-for-track-69-midi-cc-osc-only": 564, + "track-set-volume-for-track-70-midi-cc-osc-only": 572, + "track-set-volume-for-track-71-midi-cc-osc-only": 580, + "track-set-volume-for-track-72-midi-cc-osc-only": 588, + "track-set-volume-for-track-73-midi-cc-osc-only": 596, + "track-set-volume-for-track-74-midi-cc-osc-only": 604, + "track-set-volume-for-track-75-midi-cc-osc-only": 612, + "track-set-volume-for-track-76-midi-cc-osc-only": 620, + "track-set-volume-for-track-77-midi-cc-osc-only": 628, + "track-set-volume-for-track-78-midi-cc-osc-only": 636, + "track-set-volume-for-track-79-midi-cc-osc-only": 644, + "track-set-volume-for-track-80-midi-cc-osc-only": 652, + "track-set-volume-for-track-81-midi-cc-osc-only": 660, + "track-set-volume-for-track-82-midi-cc-osc-only": 668, + "track-set-volume-for-track-83-midi-cc-osc-only": 676, + "track-set-volume-for-track-84-midi-cc-osc-only": 684, + "track-set-volume-for-track-85-midi-cc-osc-only": 692, + "track-set-volume-for-track-86-midi-cc-osc-only": 700, + "track-set-volume-for-track-87-midi-cc-osc-only": 708, + "track-set-volume-for-track-88-midi-cc-osc-only": 716, + "track-set-volume-for-track-89-midi-cc-osc-only": 724, + "track-set-volume-for-track-90-midi-cc-osc-only": 732, + "track-set-volume-for-track-91-midi-cc-osc-only": 740, + "track-set-volume-for-track-92-midi-cc-osc-only": 748, + "track-set-volume-for-track-93-midi-cc-osc-only": 756, + "track-set-volume-for-track-94-midi-cc-osc-only": 764, + "track-set-volume-for-track-95-midi-cc-osc-only": 772, + "track-set-volume-for-track-96-midi-cc-osc-only": 780, + "track-set-volume-for-track-97-midi-cc-osc-only": 788, + "track-set-volume-for-track-98-midi-cc-osc-only": 796, + "track-set-volume-for-track-99-midi-cc-osc-only": 804, + "track-show-hide-all-pinned-tracks-in-tcp": 43575, + "track-show-hide-all-pinned-tracks-in-tcp-ignore-master": 43576, + "track-show-hide-children-of-selected-folder-tracks-in-mixer": 41665, + "track-show-hide-children-of-selected-folder-tracks-in-tcp": 42696, + "track-show-only-one-lane-for-all-fixed-lane-tracks-in-the-project-that-have-only-one-lane-playing": 42961, + "track-solo-tracks": 40728, + "track-solo-unsolo-tracks": 40281, + "track-swap-volume-envelope-and-trim-envelope": 42021, + "track-toggle-all-track-grouping-enabled": 40771, + "track-toggle-allow-editing-media-items-while-comping": 42597, + "track-toggle-allow-editing-media-items-while-comping-for-track-at-mouse": 42598, + "track-toggle-automatic-record-arm-when-track-selected": 40736, + "track-toggle-automatically-creating-comp-areas-for-new-recording-while-comping": 42675, + "track-toggle-automatically-delete-empty-fixed-lanes-at-bottom-of-track": 42659, + "track-toggle-comping": 42645, + "track-toggle-comping-for-track-at-mouse": 42646, + "track-toggle-full-multichannel-metering": 41726, + "track-toggle-fx-bypass-for-current-last-touched-track": 40298, + "track-toggle-fx-bypass-for-last-touched-track": 816, + "track-toggle-fx-bypass-for-master-track": 16, + "track-toggle-fx-bypass-for-selected-tracks": 8, + "track-toggle-fx-bypass-for-track-01": 24, + "track-toggle-fx-bypass-for-track-02": 32, + "track-toggle-fx-bypass-for-track-03": 40, + "track-toggle-fx-bypass-for-track-04": 48, + "track-toggle-fx-bypass-for-track-05": 56, + "track-toggle-fx-bypass-for-track-06": 64, + "track-toggle-fx-bypass-for-track-07": 72, + "track-toggle-fx-bypass-for-track-08": 80, + "track-toggle-fx-bypass-for-track-09": 88, + "track-toggle-fx-bypass-for-track-10": 96, + "track-toggle-fx-bypass-for-track-11": 104, + "track-toggle-fx-bypass-for-track-12": 112, + "track-toggle-fx-bypass-for-track-13": 120, + "track-toggle-fx-bypass-for-track-14": 128, + "track-toggle-fx-bypass-for-track-15": 136, + "track-toggle-fx-bypass-for-track-16": 144, + "track-toggle-fx-bypass-for-track-17": 152, + "track-toggle-fx-bypass-for-track-18": 160, + "track-toggle-fx-bypass-for-track-19": 168, + "track-toggle-fx-bypass-for-track-20": 176, + "track-toggle-fx-bypass-for-track-21": 184, + "track-toggle-fx-bypass-for-track-22": 192, + "track-toggle-fx-bypass-for-track-23": 200, + "track-toggle-fx-bypass-for-track-24": 208, + "track-toggle-fx-bypass-for-track-25": 216, + "track-toggle-fx-bypass-for-track-26": 224, + "track-toggle-fx-bypass-for-track-27": 232, + "track-toggle-fx-bypass-for-track-28": 240, + "track-toggle-fx-bypass-for-track-29": 248, + "track-toggle-fx-bypass-for-track-30": 256, + "track-toggle-fx-bypass-for-track-31": 264, + "track-toggle-fx-bypass-for-track-32": 272, + "track-toggle-fx-bypass-for-track-33": 280, + "track-toggle-fx-bypass-for-track-34": 288, + "track-toggle-fx-bypass-for-track-35": 296, + "track-toggle-fx-bypass-for-track-36": 304, + "track-toggle-fx-bypass-for-track-37": 312, + "track-toggle-fx-bypass-for-track-38": 320, + "track-toggle-fx-bypass-for-track-39": 328, + "track-toggle-fx-bypass-for-track-40": 336, + "track-toggle-fx-bypass-for-track-41": 344, + "track-toggle-fx-bypass-for-track-42": 352, + "track-toggle-fx-bypass-for-track-43": 360, + "track-toggle-fx-bypass-for-track-44": 368, + "track-toggle-fx-bypass-for-track-45": 376, + "track-toggle-fx-bypass-for-track-46": 384, + "track-toggle-fx-bypass-for-track-47": 392, + "track-toggle-fx-bypass-for-track-48": 400, + "track-toggle-fx-bypass-for-track-49": 408, + "track-toggle-fx-bypass-for-track-50": 416, + "track-toggle-fx-bypass-for-track-51": 424, + "track-toggle-fx-bypass-for-track-52": 432, + "track-toggle-fx-bypass-for-track-53": 440, + "track-toggle-fx-bypass-for-track-54": 448, + "track-toggle-fx-bypass-for-track-55": 456, + "track-toggle-fx-bypass-for-track-56": 464, + "track-toggle-fx-bypass-for-track-57": 472, + "track-toggle-fx-bypass-for-track-58": 480, + "track-toggle-fx-bypass-for-track-59": 488, + "track-toggle-fx-bypass-for-track-60": 496, + "track-toggle-fx-bypass-for-track-61": 504, + "track-toggle-fx-bypass-for-track-62": 512, + "track-toggle-fx-bypass-for-track-63": 520, + "track-toggle-fx-bypass-for-track-64": 528, + "track-toggle-fx-bypass-for-track-65": 536, + "track-toggle-fx-bypass-for-track-66": 544, + "track-toggle-fx-bypass-for-track-67": 552, + "track-toggle-fx-bypass-for-track-68": 560, + "track-toggle-fx-bypass-for-track-69": 568, + "track-toggle-fx-bypass-for-track-70": 576, + "track-toggle-fx-bypass-for-track-71": 584, + "track-toggle-fx-bypass-for-track-72": 592, + "track-toggle-fx-bypass-for-track-73": 600, + "track-toggle-fx-bypass-for-track-74": 608, + "track-toggle-fx-bypass-for-track-75": 616, + "track-toggle-fx-bypass-for-track-76": 624, + "track-toggle-fx-bypass-for-track-77": 632, + "track-toggle-fx-bypass-for-track-78": 640, + "track-toggle-fx-bypass-for-track-79": 648, + "track-toggle-fx-bypass-for-track-80": 656, + "track-toggle-fx-bypass-for-track-81": 664, + "track-toggle-fx-bypass-for-track-82": 672, + "track-toggle-fx-bypass-for-track-83": 680, + "track-toggle-fx-bypass-for-track-84": 688, + "track-toggle-fx-bypass-for-track-85": 696, + "track-toggle-fx-bypass-for-track-86": 704, + "track-toggle-fx-bypass-for-track-87": 712, + "track-toggle-fx-bypass-for-track-88": 720, + "track-toggle-fx-bypass-for-track-89": 728, + "track-toggle-fx-bypass-for-track-90": 736, + "track-toggle-fx-bypass-for-track-91": 744, + "track-toggle-fx-bypass-for-track-92": 752, + "track-toggle-fx-bypass-for-track-93": 760, + "track-toggle-fx-bypass-for-track-94": 768, + "track-toggle-fx-bypass-for-track-95": 776, + "track-toggle-fx-bypass-for-track-96": 784, + "track-toggle-fx-bypass-for-track-97": 792, + "track-toggle-fx-bypass-for-track-98": 800, + "track-toggle-fx-bypass-for-track-99": 808, + "track-toggle-fx-bypass-on-all-tracks": 40344, + "track-toggle-link-unlink-track-volume-pan-controls-to-midi-volume-pan-on-all-channels": 41556, + "track-toggle-lock-unlock-track-controls": 41314, + "track-toggle-midi-input-quantize-for-all-tracks": 42034, + "track-toggle-midi-input-quantize-for-last-touched-track": 42035, + "track-toggle-midi-input-quantize-for-selected-tracks": 42033, + "track-toggle-mute-for-last-touched-track": 814, + "track-toggle-mute-for-master-track": 14, + "track-toggle-mute-for-selected-tracks": 6, + "track-toggle-mute-for-track-01": 22, + "track-toggle-mute-for-track-02": 30, + "track-toggle-mute-for-track-03": 38, + "track-toggle-mute-for-track-04": 46, + "track-toggle-mute-for-track-05": 54, + "track-toggle-mute-for-track-06": 62, + "track-toggle-mute-for-track-07": 70, + "track-toggle-mute-for-track-08": 78, + "track-toggle-mute-for-track-09": 86, + "track-toggle-mute-for-track-10": 94, + "track-toggle-mute-for-track-11": 102, + "track-toggle-mute-for-track-12": 110, + "track-toggle-mute-for-track-13": 118, + "track-toggle-mute-for-track-14": 126, + "track-toggle-mute-for-track-15": 134, + "track-toggle-mute-for-track-16": 142, + "track-toggle-mute-for-track-17": 150, + "track-toggle-mute-for-track-18": 158, + "track-toggle-mute-for-track-19": 166, + "track-toggle-mute-for-track-20": 174, + "track-toggle-mute-for-track-21": 182, + "track-toggle-mute-for-track-22": 190, + "track-toggle-mute-for-track-23": 198, + "track-toggle-mute-for-track-24": 206, + "track-toggle-mute-for-track-25": 214, + "track-toggle-mute-for-track-26": 222, + "track-toggle-mute-for-track-27": 230, + "track-toggle-mute-for-track-28": 238, + "track-toggle-mute-for-track-29": 246, + "track-toggle-mute-for-track-30": 254, + "track-toggle-mute-for-track-31": 262, + "track-toggle-mute-for-track-32": 270, + "track-toggle-mute-for-track-33": 278, + "track-toggle-mute-for-track-34": 286, + "track-toggle-mute-for-track-35": 294, + "track-toggle-mute-for-track-36": 302, + "track-toggle-mute-for-track-37": 310, + "track-toggle-mute-for-track-38": 318, + "track-toggle-mute-for-track-39": 326, + "track-toggle-mute-for-track-40": 334, + "track-toggle-mute-for-track-41": 342, + "track-toggle-mute-for-track-42": 350, + "track-toggle-mute-for-track-43": 358, + "track-toggle-mute-for-track-44": 366, + "track-toggle-mute-for-track-45": 374, + "track-toggle-mute-for-track-46": 382, + "track-toggle-mute-for-track-47": 390, + "track-toggle-mute-for-track-48": 398, + "track-toggle-mute-for-track-49": 406, + "track-toggle-mute-for-track-50": 414, + "track-toggle-mute-for-track-51": 422, + "track-toggle-mute-for-track-52": 430, + "track-toggle-mute-for-track-53": 438, + "track-toggle-mute-for-track-54": 446, + "track-toggle-mute-for-track-55": 454, + "track-toggle-mute-for-track-56": 462, + "track-toggle-mute-for-track-57": 470, + "track-toggle-mute-for-track-58": 478, + "track-toggle-mute-for-track-59": 486, + "track-toggle-mute-for-track-60": 494, + "track-toggle-mute-for-track-61": 502, + "track-toggle-mute-for-track-62": 510, + "track-toggle-mute-for-track-63": 518, + "track-toggle-mute-for-track-64": 526, + "track-toggle-mute-for-track-65": 534, + "track-toggle-mute-for-track-66": 542, + "track-toggle-mute-for-track-67": 550, + "track-toggle-mute-for-track-68": 558, + "track-toggle-mute-for-track-69": 566, + "track-toggle-mute-for-track-70": 574, + "track-toggle-mute-for-track-71": 582, + "track-toggle-mute-for-track-72": 590, + "track-toggle-mute-for-track-73": 598, + "track-toggle-mute-for-track-74": 606, + "track-toggle-mute-for-track-75": 614, + "track-toggle-mute-for-track-76": 622, + "track-toggle-mute-for-track-77": 630, + "track-toggle-mute-for-track-78": 638, + "track-toggle-mute-for-track-79": 646, + "track-toggle-mute-for-track-80": 654, + "track-toggle-mute-for-track-81": 662, + "track-toggle-mute-for-track-82": 670, + "track-toggle-mute-for-track-83": 678, + "track-toggle-mute-for-track-84": 686, + "track-toggle-mute-for-track-85": 694, + "track-toggle-mute-for-track-86": 702, + "track-toggle-mute-for-track-87": 710, + "track-toggle-mute-for-track-88": 718, + "track-toggle-mute-for-track-89": 726, + "track-toggle-mute-for-track-90": 734, + "track-toggle-mute-for-track-91": 742, + "track-toggle-mute-for-track-92": 750, + "track-toggle-mute-for-track-93": 758, + "track-toggle-mute-for-track-94": 766, + "track-toggle-mute-for-track-95": 774, + "track-toggle-mute-for-track-96": 782, + "track-toggle-mute-for-track-97": 790, + "track-toggle-mute-for-track-98": 798, + "track-toggle-mute-for-track-99": 806, + "track-toggle-preserve-pdc-delayed-monitoring-in-recorded-items": 41919, + "track-toggle-record-arm-for-last-touched-track": 817, + "track-toggle-record-arm-for-selected-tracks": 9, + "track-toggle-record-arm-for-track-01": 25, + "track-toggle-record-arm-for-track-02": 33, + "track-toggle-record-arm-for-track-03": 41, + "track-toggle-record-arm-for-track-04": 49, + "track-toggle-record-arm-for-track-05": 57, + "track-toggle-record-arm-for-track-06": 65, + "track-toggle-record-arm-for-track-07": 73, + "track-toggle-record-arm-for-track-08": 81, + "track-toggle-record-arm-for-track-09": 89, + "track-toggle-record-arm-for-track-10": 97, + "track-toggle-record-arm-for-track-11": 105, + "track-toggle-record-arm-for-track-12": 113, + "track-toggle-record-arm-for-track-13": 121, + "track-toggle-record-arm-for-track-14": 129, + "track-toggle-record-arm-for-track-15": 137, + "track-toggle-record-arm-for-track-16": 145, + "track-toggle-record-arm-for-track-17": 153, + "track-toggle-record-arm-for-track-18": 161, + "track-toggle-record-arm-for-track-19": 169, + "track-toggle-record-arm-for-track-20": 177, + "track-toggle-record-arm-for-track-21": 185, + "track-toggle-record-arm-for-track-22": 193, + "track-toggle-record-arm-for-track-23": 201, + "track-toggle-record-arm-for-track-24": 209, + "track-toggle-record-arm-for-track-25": 217, + "track-toggle-record-arm-for-track-26": 225, + "track-toggle-record-arm-for-track-27": 233, + "track-toggle-record-arm-for-track-28": 241, + "track-toggle-record-arm-for-track-29": 249, + "track-toggle-record-arm-for-track-30": 257, + "track-toggle-record-arm-for-track-31": 265, + "track-toggle-record-arm-for-track-32": 273, + "track-toggle-record-arm-for-track-33": 281, + "track-toggle-record-arm-for-track-34": 289, + "track-toggle-record-arm-for-track-35": 297, + "track-toggle-record-arm-for-track-36": 305, + "track-toggle-record-arm-for-track-37": 313, + "track-toggle-record-arm-for-track-38": 321, + "track-toggle-record-arm-for-track-39": 329, + "track-toggle-record-arm-for-track-40": 337, + "track-toggle-record-arm-for-track-41": 345, + "track-toggle-record-arm-for-track-42": 353, + "track-toggle-record-arm-for-track-43": 361, + "track-toggle-record-arm-for-track-44": 369, + "track-toggle-record-arm-for-track-45": 377, + "track-toggle-record-arm-for-track-46": 385, + "track-toggle-record-arm-for-track-47": 393, + "track-toggle-record-arm-for-track-48": 401, + "track-toggle-record-arm-for-track-49": 409, + "track-toggle-record-arm-for-track-50": 417, + "track-toggle-record-arm-for-track-51": 425, + "track-toggle-record-arm-for-track-52": 433, + "track-toggle-record-arm-for-track-53": 441, + "track-toggle-record-arm-for-track-54": 449, + "track-toggle-record-arm-for-track-55": 457, + "track-toggle-record-arm-for-track-56": 465, + "track-toggle-record-arm-for-track-57": 473, + "track-toggle-record-arm-for-track-58": 481, + "track-toggle-record-arm-for-track-59": 489, + "track-toggle-record-arm-for-track-60": 497, + "track-toggle-record-arm-for-track-61": 505, + "track-toggle-record-arm-for-track-62": 513, + "track-toggle-record-arm-for-track-63": 521, + "track-toggle-record-arm-for-track-64": 529, + "track-toggle-record-arm-for-track-65": 537, + "track-toggle-record-arm-for-track-66": 545, + "track-toggle-record-arm-for-track-67": 553, + "track-toggle-record-arm-for-track-68": 561, + "track-toggle-record-arm-for-track-69": 569, + "track-toggle-record-arm-for-track-70": 577, + "track-toggle-record-arm-for-track-71": 585, + "track-toggle-record-arm-for-track-72": 593, + "track-toggle-record-arm-for-track-73": 601, + "track-toggle-record-arm-for-track-74": 609, + "track-toggle-record-arm-for-track-75": 617, + "track-toggle-record-arm-for-track-76": 625, + "track-toggle-record-arm-for-track-77": 633, + "track-toggle-record-arm-for-track-78": 641, + "track-toggle-record-arm-for-track-79": 649, + "track-toggle-record-arm-for-track-80": 657, + "track-toggle-record-arm-for-track-81": 665, + "track-toggle-record-arm-for-track-82": 673, + "track-toggle-record-arm-for-track-83": 681, + "track-toggle-record-arm-for-track-84": 689, + "track-toggle-record-arm-for-track-85": 697, + "track-toggle-record-arm-for-track-86": 705, + "track-toggle-record-arm-for-track-87": 713, + "track-toggle-record-arm-for-track-88": 721, + "track-toggle-record-arm-for-track-89": 729, + "track-toggle-record-arm-for-track-90": 737, + "track-toggle-record-arm-for-track-91": 745, + "track-toggle-record-arm-for-track-92": 753, + "track-toggle-record-arm-for-track-93": 761, + "track-toggle-record-arm-for-track-94": 769, + "track-toggle-record-arm-for-track-95": 777, + "track-toggle-record-arm-for-track-96": 785, + "track-toggle-record-arm-for-track-97": 793, + "track-toggle-record-arm-for-track-98": 801, + "track-toggle-record-arm-for-track-99": 809, + "track-toggle-record-arming-for-current-last-touched-track": 40294, + "track-toggle-show-hide-in-mixer": 40250, + "track-toggle-show-hide-in-tcp": 40853, + "track-toggle-solo-for-last-touched-track": 815, + "track-toggle-solo-for-master-track": 15, + "track-toggle-solo-for-selected-tracks": 7, + "track-toggle-solo-for-track-01": 23, + "track-toggle-solo-for-track-02": 31, + "track-toggle-solo-for-track-03": 39, + "track-toggle-solo-for-track-04": 47, + "track-toggle-solo-for-track-05": 55, + "track-toggle-solo-for-track-06": 63, + "track-toggle-solo-for-track-07": 71, + "track-toggle-solo-for-track-08": 79, + "track-toggle-solo-for-track-09": 87, + "track-toggle-solo-for-track-10": 95, + "track-toggle-solo-for-track-11": 103, + "track-toggle-solo-for-track-12": 111, + "track-toggle-solo-for-track-13": 119, + "track-toggle-solo-for-track-14": 127, + "track-toggle-solo-for-track-15": 135, + "track-toggle-solo-for-track-16": 143, + "track-toggle-solo-for-track-17": 151, + "track-toggle-solo-for-track-18": 159, + "track-toggle-solo-for-track-19": 167, + "track-toggle-solo-for-track-20": 175, + "track-toggle-solo-for-track-21": 183, + "track-toggle-solo-for-track-22": 191, + "track-toggle-solo-for-track-23": 199, + "track-toggle-solo-for-track-24": 207, + "track-toggle-solo-for-track-25": 215, + "track-toggle-solo-for-track-26": 223, + "track-toggle-solo-for-track-27": 231, + "track-toggle-solo-for-track-28": 239, + "track-toggle-solo-for-track-29": 247, + "track-toggle-solo-for-track-30": 255, + "track-toggle-solo-for-track-31": 263, + "track-toggle-solo-for-track-32": 271, + "track-toggle-solo-for-track-33": 279, + "track-toggle-solo-for-track-34": 287, + "track-toggle-solo-for-track-35": 295, + "track-toggle-solo-for-track-36": 303, + "track-toggle-solo-for-track-37": 311, + "track-toggle-solo-for-track-38": 319, + "track-toggle-solo-for-track-39": 327, + "track-toggle-solo-for-track-40": 335, + "track-toggle-solo-for-track-41": 343, + "track-toggle-solo-for-track-42": 351, + "track-toggle-solo-for-track-43": 359, + "track-toggle-solo-for-track-44": 367, + "track-toggle-solo-for-track-45": 375, + "track-toggle-solo-for-track-46": 383, + "track-toggle-solo-for-track-47": 391, + "track-toggle-solo-for-track-48": 399, + "track-toggle-solo-for-track-49": 407, + "track-toggle-solo-for-track-50": 415, + "track-toggle-solo-for-track-51": 423, + "track-toggle-solo-for-track-52": 431, + "track-toggle-solo-for-track-53": 439, + "track-toggle-solo-for-track-54": 447, + "track-toggle-solo-for-track-55": 455, + "track-toggle-solo-for-track-56": 463, + "track-toggle-solo-for-track-57": 471, + "track-toggle-solo-for-track-58": 479, + "track-toggle-solo-for-track-59": 487, + "track-toggle-solo-for-track-60": 495, + "track-toggle-solo-for-track-61": 503, + "track-toggle-solo-for-track-62": 511, + "track-toggle-solo-for-track-63": 519, + "track-toggle-solo-for-track-64": 527, + "track-toggle-solo-for-track-65": 535, + "track-toggle-solo-for-track-66": 543, + "track-toggle-solo-for-track-67": 551, + "track-toggle-solo-for-track-68": 559, + "track-toggle-solo-for-track-69": 567, + "track-toggle-solo-for-track-70": 575, + "track-toggle-solo-for-track-71": 583, + "track-toggle-solo-for-track-72": 591, + "track-toggle-solo-for-track-73": 599, + "track-toggle-solo-for-track-74": 607, + "track-toggle-solo-for-track-75": 615, + "track-toggle-solo-for-track-76": 623, + "track-toggle-solo-for-track-77": 631, + "track-toggle-solo-for-track-78": 639, + "track-toggle-solo-for-track-79": 647, + "track-toggle-solo-for-track-80": 655, + "track-toggle-solo-for-track-81": 663, + "track-toggle-solo-for-track-82": 671, + "track-toggle-solo-for-track-83": 679, + "track-toggle-solo-for-track-84": 687, + "track-toggle-solo-for-track-85": 695, + "track-toggle-solo-for-track-86": 703, + "track-toggle-solo-for-track-87": 711, + "track-toggle-solo-for-track-88": 719, + "track-toggle-solo-for-track-89": 727, + "track-toggle-solo-for-track-90": 735, + "track-toggle-solo-for-track-91": 743, + "track-toggle-solo-for-track-92": 751, + "track-toggle-solo-for-track-93": 759, + "track-toggle-solo-for-track-94": 767, + "track-toggle-solo-for-track-95": 775, + "track-toggle-solo-for-track-96": 783, + "track-toggle-solo-for-track-97": 791, + "track-toggle-solo-for-track-98": 799, + "track-toggle-solo-for-track-99": 807, + "track-toggle-track-metering": 41744, + "track-toggle-track-mute-envelope-active": 40866, + "track-toggle-track-mute-envelope-visible": 40867, + "track-toggle-track-pan-envelope-active": 40053, + "track-toggle-track-pan-envelope-visible": 40407, + "track-toggle-track-pre-fx-pan-envelope-active": 40051, + "track-toggle-track-pre-fx-pan-envelope-visible": 40409, + "track-toggle-track-pre-fx-volume-envelope-active": 40050, + "track-toggle-track-pre-fx-volume-envelope-visible": 40408, + "track-toggle-track-solo-defeat": 41199, + "track-toggle-track-trim-envelope-visible": 42020, + "track-toggle-track-volume-envelope-active": 40052, + "track-toggle-track-volume-envelope-visible": 40406, + "track-turn-off-automatic-track-grouping": 42585, + "track-unarm-all-tracks-for-recording": 40491, + "track-unbypass-fx-on-all-tracks": 40343, + "track-unfreeze-tracks-restore-previously-saved-items-and-fx": 41644, + "track-unlock-track-controls": 41313, + "track-unmute-all-tracks": 40339, + "track-unmute-tracks": 40731, + "track-unselect-clear-selection-of-all-tracks": 40297, + "track-unset-preserve-pdc-delayed-monitoring-in-recorded-items": 41920, + "track-unset-track-solo-defeat": 41198, + "track-unset-track-solo-defeat-all-tracks": 40770, + "track-unsolo-all-tracks": 40340, + "track-unsolo-tracks": 40729, + "track-vertical-scroll-selected-tracks-into-view": 40913, + "track-view-envelopes-for-current-last-touched-track": 40292, + "track-view-envelopes-for-current-last-touched-track-at-mouse-cursor": 41975, + "track-view-fx-chain-for-current-last-touched-track": 40291, + "track-view-fx-chain-for-master-track": 40846, + "track-view-input-fx-chain-for-current-last-touched-track": 40844, + "track-view-routing-and-i-o-for-current-last-touched-track": 40293, + "track-view-routing-and-i-o-for-master-track": 42235, + "track-view-track-recording-settings-midi-quantize-file-format-path-for-last-touched-track": 40604, + "tracks-copy-items-on-currently-playing-lanes-on-selected-fixed-lane-tracks-to-one-new-track-per-lane": 42694, + "tracks-explode-items-on-selected-fixed-lane-tracks-to-one-new-track-per-lane": 42695, + "tracks-explode-selected-items-on-fixed-lane-tracks-to-one-new-track-per-lane": 42639, + "tracks-implode-selected-items-across-tracks-to-one-fixed-lane-track": 42596, + "transient-detection-sensitivity-adjust-midi-cc-mousewheel-only": 967, + "transient-detection-sensitivity-decrease": 41537, + "transient-detection-sensitivity-increase": 41536, + "transient-detection-sensitivity-threshold-adjust": 41208, + "transient-detection-threshold-adjust-midi-cc-mousewheel-only": 968, + "transient-detection-threshold-decrease": 40219, + "transient-detection-threshold-increase": 40218, + "transport-apply-playrate-to-current-bpm": 40672, + "transport-apply-playrate-to-current-bpm-no-reset-playrate": 40526, + "transport-center-transport-controls": 40533, + "transport-decrease-playrate-by-0-6-percent-10-cents": 40525, + "transport-decrease-playrate-by-6-percent-one-semitone": 40523, + "transport-fast-forward-a-little-bit": 40085, + "transport-flash-transport-yellow-on-possible-audio-device-underrun": 42305, + "transport-go-to-end-of-project": 40043, + "transport-go-to-start-of-project": 40042, + "transport-increase-playrate-by-0-6-percent-10-cents": 40524, + "transport-increase-playrate-by-6-percent-one-semitone": 40522, + "transport-pause": 1008, + "transport-play": 1007, + "transport-play-pause": 40073, + "transport-play-skip-time-selection": 40317, + "transport-play-stop": 40044, + "transport-play-stop-move-edit-cursor-on-stop": 40328, + "transport-record": 1013, + "transport-rewind-a-little-bit": 40084, + "transport-scrub-jog-fine-control-midi-cc-relative-only": 974, + "transport-scrub-jog-midi-cc-relative-absolute-only": 992, + "transport-secondary-time-unit-absolute-frames": 42371, + "transport-secondary-time-unit-hours-minutes-seconds-frames": 42370, + "transport-secondary-time-unit-measures-beats": 42792, + "transport-secondary-time-unit-minutes-seconds": 42367, + "transport-secondary-time-unit-none": 42366, + "transport-secondary-time-unit-samples": 42369, + "transport-secondary-time-unit-seconds": 42368, + "transport-set-playrate-to-1-0": 40521, + "transport-show-play-state-as-text": 40532, + "transport-show-playrate-control": 40531, + "transport-show-time-signature": 40680, + "transport-show-transport-docked-above-ruler": 41604, + "transport-show-transport-docked-below-arrange": 41603, + "transport-show-transport-docked-to-bottom-of-main-window": 41605, + "transport-show-transport-docked-to-top-of-main-window": 41606, + "transport-show-transport-in-docker": 41608, + "transport-start-stop-recording-after-2-beats": 40067, + "transport-start-stop-recording-at-edit-cursor": 40046, + "transport-start-stop-recording-at-next-beat": 40045, + "transport-start-stop-recording-at-next-measure": 40003, + "transport-start-stop-recording-at-next-project-marker": 40056, + "transport-stop": 1016, + "transport-stop-delete-all-recorded-media": 40668, + "transport-stop-save-all-recorded-media": 40667, + "transport-tap-tempo": 1134, + "transport-time-unit-absolute-frames": 41972, + "transport-time-unit-hours-minutes-seconds-frames": 40414, + "transport-time-unit-measures-beats": 40411, + "transport-time-unit-measures-beats-minutes-seconds": 40534, + "transport-time-unit-minutes-seconds": 40410, + "transport-time-unit-samples": 40413, + "transport-time-unit-seconds": 40412, + "transport-time-unit-to-ruler": 40379, + "transport-toggle-preserve-pitch-in-audio-items-when-changing-master-playrate": 40671, + "transport-toggle-repeat": 1068, + "transport-toggle-stop-playback-at-end-of-loop-if-repeat-is-disabled": 41834, + "transport-toggle-transport-docked-to-main-window": 40260, + "transport-toggle-transport-home-end-marker-navigation": 40868, + "unselect-clear-selection-of-all-tracks-items-envelope-points": 40769, + "video-clear-video-cache-re-render-frames": 50123, + "video-fullscreen": 50122, + "video-show-hide-video-window": 50125, + "view-adjust-horizontal-scroll-midi-cc-osc-only-relative-recommended": 997, + "view-adjust-horizontal-zoom-midi-cc-osc-only": 998, + "view-adjust-selected-track-heights-a-little-bit-midi-cc-relative-mousewheel": 970, + "view-adjust-selected-track-heights-midi-cc-osc-only": 971, + "view-adjust-selected-track-heights-midi-cc-relative-mousewheel": 972, + "view-adjust-vertical-scroll-midi-cc-osc-only": 995, + "view-adjust-vertical-zoom-midi-cc-osc-only": 994, + "view-attach-unattach-docker-to-from-main-window": 40313, + "view-clear-all-peak-indicators": 40527, + "view-continuous-scrolling-during-playback": 41817, + "view-cycle-track-zoom-between-minimum-default-and-maximum-height-even-if-over-100-percent-of-arrange-view": 42701, + "view-cycle-track-zoom-between-minimum-default-and-maximum-height-limit-to-100-percent-of-arrange-view": 42698, + "view-decrease-selected-track-heights": 41326, + "view-decrease-selected-track-heights-a-little-bit": 41328, + "view-expand-selected-track-height-minimize-others": 40723, + "view-go-to-edit-cursor": 40151, + "view-go-to-play-cursor-position": 40150, + "view-go-to-track-midi-cc-osc-only": 993, + "view-hide-item-labels": 40708, + "view-if-displayed-toggle-mouse-position-indicator-vertical-line-respects-toolbar-snap-button": 43203, + "view-increase-selected-track-heights": 41325, + "view-increase-selected-track-heights-a-little-bit": 41327, + "view-jump-go-to-time-window": 40069, + "view-minimize-all-tracks": 40727, + "view-move-cursor-left-8-pixels": 41666, + "view-move-cursor-left-by-grid-division": 43614, + "view-move-cursor-left-one-pixel": 40104, + "view-move-cursor-left-to-grid-division": 40646, + "view-move-cursor-right-8-pixels": 41667, + "view-move-cursor-right-by-grid-division": 43615, + "view-move-cursor-right-one-pixel": 40105, + "view-move-cursor-right-to-grid-division": 40647, + "view-move-edit-cursor-midi-cc-osc-only-relative-recommended": 996, + "view-move-edit-cursor-to-mouse-cursor": 40513, + "view-move-edit-cursor-to-mouse-cursor-no-snapping": 40514, + "view-move-edit-cursor-to-play-cursor": 40434, + "view-restore-next-zoom-level": 40875, + "view-restore-next-zoom-scroll-position": 40762, + "view-restore-previous-zoom-level": 40869, + "view-restore-previous-zoom-scroll-position": 40848, + "view-scale-finder-window": 40301, + "view-scroll-horizontally-midi-cc-relative-mousewheel": 988, + "view-scroll-horizontally-reversed-midi-cc-relative-mousewheel": 977, + "view-scroll-vertically-midi-cc-relative-mousewheel": 989, + "view-scroll-vertically-reversed-midi-cc-relative-mousewheel": 978, + "view-scroll-view-down": 40139, + "view-scroll-view-horizontally-one-page-midi-cc-relative-mousewheel": 981, + "view-scroll-view-horizontally-one-page-reversed-midi-cc-relative-mousewheel": 975, + "view-scroll-view-left": 40140, + "view-scroll-view-right": 40141, + "view-scroll-view-up": 40138, + "view-scroll-view-vertically-one-page-midi-cc-relative-mousewheel": 976, + "view-scroll-view-vertically-one-page-reversed-midi-cc-relative-mousewheel": 982, + "view-secondary-time-unit-for-ruler-absolute-frames": 42365, + "view-secondary-time-unit-for-ruler-hours-minutes-seconds-frames": 42364, + "view-secondary-time-unit-for-ruler-minutes-seconds": 42361, + "view-secondary-time-unit-for-ruler-minutes-seconds-minimal": 43705, + "view-secondary-time-unit-for-ruler-none": 42360, + "view-secondary-time-unit-for-ruler-samples": 42363, + "view-secondary-time-unit-for-ruler-seconds": 42362, + "view-set-horizontal-zoom-to-default-project-setting": 41190, + "view-show-big-clock-plus-window": 40378, + "view-show-crossfade-editor-window": 41827, + "view-show-docker": 40279, + "view-show-envelope-manager-window": 42678, + "view-show-fx-browser-window": 40271, + "view-show-item-labels": 40703, + "view-show-monitoring-fx-chain": 41882, + "view-show-navigator-window": 40268, + "view-show-peaks-display-settings": 42074, + "view-show-performance-meter-window": 40240, + "view-show-project-bay-window": 41157, + "view-show-project-bay-window-2": 41628, + "view-show-project-bay-window-3": 41629, + "view-show-project-bay-window-4": 41630, + "view-show-project-bay-window-5": 41631, + "view-show-project-bay-window-6": 41632, + "view-show-project-bay-window-7": 41633, + "view-show-project-bay-window-8": 41634, + "view-show-region-marker-manager-window": 40326, + "view-show-region-render-matrix-window": 41888, + "view-show-routing-matrix-window": 40251, + "view-show-screensets-layouts-window": 40422, + "view-show-tcp-on-right-side-of-arrange": 42373, + "view-show-track-freeze-details": 41654, + "view-show-track-group-manager-window": 40327, + "view-show-track-grouping-matrix-window": 40768, + "view-show-track-manager-window": 40906, + "view-show-track-wiring-diagram": 42031, + "view-show-undo-history-window": 40072, + "view-show-virtual-midi-keyboard": 40377, + "view-time-unit-for-ruler-absolute-frames": 41973, + "view-time-unit-for-ruler-hours-minutes-seconds-frames": 40370, + "view-time-unit-for-ruler-measures-beats": 40367, + "view-time-unit-for-ruler-measures-beats-minimal": 41916, + "view-time-unit-for-ruler-measures-beats-minimal-minutes-seconds": 41918, + "view-time-unit-for-ruler-measures-beats-minutes-seconds": 40366, + "view-time-unit-for-ruler-measures-fractions": 43205, + "view-time-unit-for-ruler-minutes-seconds": 40365, + "view-time-unit-for-ruler-minutes-seconds-minimal": 43204, + "view-time-unit-for-ruler-samples": 40369, + "view-time-unit-for-ruler-seconds": 40368, + "view-toggle-auto-view-scroll-during-playback": 40036, + "view-toggle-auto-view-scroll-while-recording": 40262, + "view-toggle-display-mouse-position-indicator-vertical-line-in-arrange-view": 43194, + "view-toggle-displaying-labels-above-within-media-items": 40258, + "view-toggle-master-track-in-separate-docked-window": 41609, + "view-toggle-master-track-visible": 40075, + "view-toggle-mixer-visible": 40078, + "view-toggle-show-hide-item-labels": 40651, + "view-toggle-show-hide-media-item-timebase-buttons": 43642, + "view-toggle-show-hide-media-item-timebase-buttons-if-overridden-for-the-track-or-item": 43643, + "view-toggle-show-media-cues-in-items": 40691, + "view-toggle-show-midi-editor-windows": 40716, + "view-toggle-show-tcp-area": 43185, + "view-toggle-to-alternate-tcp-area-width-alternate-is-zero-by-default": 43188, + "view-toggle-track-zoom-to-default-height": 42697, + "view-toggle-track-zoom-to-default-height-ignore-pinned-tracks": 43678, + "view-toggle-track-zoom-to-maximum-height-even-if-over-100-percent-of-arrange-view": 42700, + "view-toggle-track-zoom-to-maximum-height-limit-to-100-percent-of-arrange-view": 40113, + "view-toggle-track-zoom-to-minimum-height": 40110, + "view-toggle-track-zoom-to-minimum-height-ignore-pinned-tracks": 43677, + "view-toggle-transport-visible-play-record-stop": 40259, + "view-toggle-zoom-to-selected-items": 41622, + "view-zoom-horizontally-midi-cc-relative-mousewheel": 990, + "view-zoom-horizontally-reversed-midi-cc-relative-mousewheel": 979, + "view-zoom-in-horizontal": 1012, + "view-zoom-in-vertical": 40111, + "view-zoom-out-horizontal": 1011, + "view-zoom-out-project": 40295, + "view-zoom-out-vertical": 40112, + "view-zoom-time-selection": 40031, + "view-zoom-vertically-midi-cc-relative-mousewheel": 1000, + "view-zoom-vertically-reversed-midi-cc-relative-mousewheel": 1001, + "view-zoom-vertically-reversed-snap-to-theme-defined-sizes-midi-cc-relative-mousewheel": 980, + "view-zoom-vertically-snap-to-theme-defined-sizes-midi-cc-relative-mousewheel": 991, + "virtual-midi-keyboard-send-all-input-to-vkb": 40637, + "xenakios-sws-apply-track-fx-to-items-and-reset-volume": 53300, + "xenakios-sws-apply-track-fx-to-items-mono-and-reset-volume": 53301, + "xenakios-sws-auto-rename-selected-takes": 53271, + "xenakios-sws-bypass-fx-of-selected-tracks": 53328, + "xenakios-sws-choose-files-for-random-insert": 53254, + "xenakios-sws-choose-new-source-file-for-selected-takes": 53273, + "xenakios-sws-command-parameters": 53491, + "xenakios-sws-create-markers-from-selected-items-name-by-take-source-file-name": 53452, + "xenakios-sws-deprecated-create-new-tracks": 53441, + "xenakios-sws-deprecated-delete-active-take-of-item-and-send-source-media-to-recycle-bin": 53380, + "xenakios-sws-deprecated-delete-active-take-of-item-and-take-source-media-immediately": 53379, + "xenakios-sws-deprecated-delete-selected-item-and-send-active-take-s-source-media-to-recycle-bin": 53378, + "xenakios-sws-deprecated-delete-selected-item-and-source-media-immediately": 53377, + "xenakios-sws-deprecated-load-project-template-01": 53459, + "xenakios-sws-deprecated-load-project-template-02": 53460, + "xenakios-sws-deprecated-load-project-template-03": 53461, + "xenakios-sws-deprecated-load-project-template-04": 53462, + "xenakios-sws-deprecated-load-project-template-05": 53463, + "xenakios-sws-deprecated-load-project-template-06": 53464, + "xenakios-sws-deprecated-load-project-template-07": 53465, + "xenakios-sws-deprecated-load-project-template-08": 53466, + "xenakios-sws-deprecated-load-project-template-09": 53467, + "xenakios-sws-deprecated-load-project-template-10": 53468, + "xenakios-sws-deprecated-load-track-template-01": 53394, + "xenakios-sws-deprecated-load-track-template-02": 53395, + "xenakios-sws-deprecated-load-track-template-03": 53396, + "xenakios-sws-deprecated-load-track-template-04": 53397, + "xenakios-sws-deprecated-load-track-template-05": 53398, + "xenakios-sws-deprecated-load-track-template-06": 53399, + "xenakios-sws-deprecated-load-track-template-07": 53400, + "xenakios-sws-deprecated-load-track-template-08": 53401, + "xenakios-sws-deprecated-load-track-template-09": 53402, + "xenakios-sws-deprecated-load-track-template-10": 53403, + "xenakios-sws-deprecated-search-takes": 53356, + "xenakios-sws-deprecated-toggle-stop-playback-at-end-of-loop": 53480, + "xenakios-sws-disk-space-calculator": 53490, + "xenakios-sws-dismantle-selected-folder": 53337, + "xenakios-sws-erase-from-item-beat-based": 53355, + "xenakios-sws-erase-from-item-time-based": 53354, + "xenakios-sws-explode-selected-items-to-new-tracks-keeping-positions": 53393, + "xenakios-sws-find-missing-media-for-project-s-takes": 53389, + "xenakios-sws-give-tracks-default-label": 53408, + "xenakios-sws-implode-items-to-takes-and-pan-symmetrically": 53298, + "xenakios-sws-implode-selected-items-in-place": 53417, + "xenakios-sws-insert-media-file-from-clipboard-deprecated": 53353, + "xenakios-sws-insert-new-track-at-the-top-of-track-list": 53407, + "xenakios-sws-insert-prefix-to-track-labels": 53409, + "xenakios-sws-insert-random-file": 53255, + "xenakios-sws-insert-random-file-at-time-selection": 53412, + "xenakios-sws-insert-random-file-at-time-selection-randomize-offset": 53414, + "xenakios-sws-insert-random-file-randomize-length": 53411, + "xenakios-sws-insert-random-file-randomize-start-offset": 53413, + "xenakios-sws-insert-shuffled-random-file": 53256, + "xenakios-sws-insert-suffix-to-track-labels": 53410, + "xenakios-sws-invert-item-selection": 53234, + "xenakios-sws-item-property-interpolator": 53422, + "xenakios-sws-jump-edit-cursor-by-random-amount-exp-distribution": 53346, + "xenakios-sws-launch-external-tool-1": 53344, + "xenakios-sws-launch-external-tool-2": 53345, + "xenakios-sws-loop-and-play-selected-items": 53347, + "xenakios-sws-maximize-selected-tracks-fx-panel-height-in-mixer": 53342, + "xenakios-sws-minimize-selected-tracks-send-and-fx-panel-height-in-mixer": 53341, + "xenakios-sws-minimize-selected-tracks-send-panel-height-in-mixer": 53340, + "xenakios-sws-move-cursor-left-10-pixels": 53358, + "xenakios-sws-move-cursor-left-10-pixels-creating-time-selection": 53359, + "xenakios-sws-move-cursor-left-configured-pixels": 53369, + "xenakios-sws-move-cursor-left-configured-pixels-creating-time-selection": 53371, + "xenakios-sws-move-cursor-left-configured-seconds": 53373, + "xenakios-sws-move-cursor-right-10-pixels": 53357, + "xenakios-sws-move-cursor-right-10-pixels-creating-time-selection": 53360, + "xenakios-sws-move-cursor-right-configured-pixels": 53368, + "xenakios-sws-move-cursor-right-configured-pixels-creating-time-selection": 53370, + "xenakios-sws-move-cursor-right-configured-seconds": 53374, + "xenakios-sws-move-cursor-to-next-transient-minus-default-fade-time": 53302, + "xenakios-sws-move-cursor-to-previous-transient-minus-default-fade-time": 53303, + "xenakios-sws-move-edit-cursor-32nd-note-left": 53486, + "xenakios-sws-move-edit-cursor-32nd-note-right": 53487, + "xenakios-sws-move-edit-cursor-64th-note-left": 53488, + "xenakios-sws-move-edit-cursor-64th-note-right": 53489, + "xenakios-sws-move-selected-items-left-by-item-length": 53265, + "xenakios-sws-move-selected-items-to-edit-cursor": 53264, + "xenakios-sws-normalize-selected-takes-to-db-value": 53458, + "xenakios-sws-nudge-active-take-volume-down": 53286, + "xenakios-sws-nudge-active-take-volume-up": 53287, + "xenakios-sws-nudge-item-contents-1-sample-left": 53433, + "xenakios-sws-nudge-item-contents-1-sample-right": 53434, + "xenakios-sws-nudge-item-pitch-down": 53280, + "xenakios-sws-nudge-item-pitch-down-b": 53282, + "xenakios-sws-nudge-item-pitch-down-resampled-a": 53277, + "xenakios-sws-nudge-item-pitch-down-resampled-b": 53279, + "xenakios-sws-nudge-item-pitch-up": 53281, + "xenakios-sws-nudge-item-pitch-up-b": 53283, + "xenakios-sws-nudge-item-pitch-up-resampled-a": 53276, + "xenakios-sws-nudge-item-pitch-up-resampled-b": 53278, + "xenakios-sws-nudge-item-positions-left-beat-based": 53260, + "xenakios-sws-nudge-item-positions-left-time-based": 53258, + "xenakios-sws-nudge-item-positions-right-beat-based": 53261, + "xenakios-sws-nudge-item-positions-right-time-based": 53259, + "xenakios-sws-nudge-item-volume-down": 53284, + "xenakios-sws-nudge-item-volume-up": 53285, + "xenakios-sws-nudge-master-volume-1-db-down": 53471, + "xenakios-sws-nudge-master-volume-1-db-up": 53470, + "xenakios-sws-nudge-section-loop-length-longer": 53423, + "xenakios-sws-nudge-section-loop-length-shorter": 53424, + "xenakios-sws-nudge-section-loop-overlap-longer": 53427, + "xenakios-sws-nudge-section-loop-overlap-shorter": 53428, + "xenakios-sws-nudge-section-loop-start-earlier": 53426, + "xenakios-sws-nudge-section-loop-start-later": 53425, + "xenakios-sws-nudge-volume-of-selected-tracks-down": 53474, + "xenakios-sws-nudge-volume-of-selected-tracks-up": 53473, + "xenakios-sws-open-associated-reaper-project-of-item": 53351, + "xenakios-sws-open-audio-take-in-external-editor-3": 53420, + "xenakios-sws-open-audio-take-in-external-editor-4": 53421, + "xenakios-sws-open-reaper-project-in-item-bwav-info-autosearch-for-rpp-if-necessary": 53404, + "xenakios-sws-pan-selected-tracks-randomly": 53308, + "xenakios-sws-pan-selected-tracks-symmetrically-left-to-right": 53306, + "xenakios-sws-pan-selected-tracks-symmetrically-right-to-left": 53307, + "xenakios-sws-pan-selected-tracks-to-center": 53309, + "xenakios-sws-pan-selected-tracks-to-left": 53310, + "xenakios-sws-pan-selected-tracks-to-right": 53311, + "xenakios-sws-pan-takes-of-item-symmetrically": 53297, + "xenakios-sws-play-selected-items-once": 53348, + "xenakios-sws-preview-selected-media-item": 53362, + "xenakios-sws-preview-selected-media-item-at-track-fader-volume": 53364, + "xenakios-sws-preview-selected-media-item-at-track-fader-volume-toggle": 53365, + "xenakios-sws-preview-selected-media-item-through-track": 53366, + "xenakios-sws-preview-selected-media-item-through-track-toggle": 53367, + "xenakios-sws-preview-selected-media-item-toggle": 53363, + "xenakios-sws-randomize-item-positions": 53257, + "xenakios-sws-recall-edit-cursor-position": 53376, + "xenakios-sws-recall-render-speed": 53438, + "xenakios-sws-recall-selected-takes": 53252, + "xenakios-sws-recall-selected-tracks-heights": 53333, + "xenakios-sws-remap-item-positions": 53372, + "xenakios-sws-remove-muted-items": 53469, + "xenakios-sws-remove-time-selection-leave-loop-selection": 53415, + "xenakios-sws-rename-project-markers-with-ascending-numbers": 53481, + "xenakios-sws-rename-selected-takes-deprecated": 53270, + "xenakios-sws-rename-selected-takes-with-bwav-description": 53272, + "xenakios-sws-rename-selected-tracks": 53339, + "xenakios-sws-rename-take-source-files-no-undo": 53453, + "xenakios-sws-rename-takes": 53455, + "xenakios-sws-rename-takes-and-source-files-no-undo": 53454, + "xenakios-sws-rename-takes-with-same-name": 53456, + "xenakios-sws-render-item-to-new-take-with-tail": 53350, + "xenakios-sws-render-receives-of-selected-track-as-stems": 53442, + "xenakios-sws-repeat-paste": 53253, + "xenakios-sws-reposition-selected-items": 53269, + "xenakios-sws-resample-pitch-shift-item-one-semitone-down": 53274, + "xenakios-sws-resample-pitch-shift-item-one-semitone-up": 53275, + "xenakios-sws-reset-active-take-volume-to-0-0-db": 53289, + "xenakios-sws-reset-item-length-and-media-offset": 53475, + "xenakios-sws-reset-item-volume-to-0-0-db": 53288, + "xenakios-sws-reset-volume-and-pan-of-selected-tracks": 53304, + "xenakios-sws-reverse-order-of-selected-items": 53449, + "xenakios-sws-save-item-as-audio-file": 53457, + "xenakios-sws-save-project-markers-as-text": 53343, + "xenakios-sws-scale-item-positions-lengths-by-percentage": 53268, + "xenakios-sws-scroll-track-view-down-page": 53429, + "xenakios-sws-scroll-track-view-to-end": 53432, + "xenakios-sws-scroll-track-view-to-home": 53431, + "xenakios-sws-scroll-track-view-up-page": 53430, + "xenakios-sws-select-first-items-of-selected-tracks": 53239, + "xenakios-sws-select-first-of-selected-tracks": 53405, + "xenakios-sws-select-first-take-in-selected-items": 53247, + "xenakios-sws-select-items-to-end-of-track": 53238, + "xenakios-sws-select-items-to-start-of-track": 53237, + "xenakios-sws-select-items-under-edit-cursor-on-selected-tracks": 53439, + "xenakios-sws-select-last-of-selected-tracks": 53406, + "xenakios-sws-select-last-take-in-selected-items": 53248, + "xenakios-sws-select-next-tracks": 53324, + "xenakios-sws-select-next-tracks-keeping-current-selection": 53326, + "xenakios-sws-select-previous-tracks": 53325, + "xenakios-sws-select-previous-tracks-keeping-current-selection": 53327, + "xenakios-sws-select-takes-in-selected-items-shuffled-random": 53249, + "xenakios-sws-select-takes-of-selected-items-cyclically": 53250, + "xenakios-sws-select-tracks-with-buss-in-name": 53335, + "xenakios-sws-select-tracks-with-no-items": 53334, + "xenakios-sws-set-fades-of-selected-items-to-0-0": 53294, + "xenakios-sws-set-fades-of-selected-items-to-configuration-a": 53295, + "xenakios-sws-set-fades-of-selected-items-to-configuration-b": 53296, + "xenakios-sws-set-fades-of-selected-items-to-configuration-c": 53482, + "xenakios-sws-set-fades-of-selected-items-to-configuration-d": 53483, + "xenakios-sws-set-fades-of-selected-items-to-configuration-e": 53484, + "xenakios-sws-set-fades-of-selected-items-to-configuration-f": 53485, + "xenakios-sws-set-item-pitch-based-on-item-playrate": 53388, + "xenakios-sws-set-item-playrate-based-on-item-pitch-and-reset-pitch": 53387, + "xenakios-sws-set-item-rate-to-1-0-and-pitch-to-0-0": 53290, + "xenakios-sws-set-master-volume-to-0-db": 53472, + "xenakios-sws-set-next-fade-in-shape-for-items": 53381, + "xenakios-sws-set-next-fade-out-shape-for-items": 53383, + "xenakios-sws-set-previous-fade-in-shape-for-items": 53382, + "xenakios-sws-set-previous-fade-out-shape-for-items": 53384, + "xenakios-sws-set-render-speed-to-not-limited": 53436, + "xenakios-sws-set-render-speed-to-realtime": 53435, + "xenakios-sws-set-selected-track-as-reference-track": 53477, + "xenakios-sws-set-selected-tracks-as-folder": 53338, + "xenakios-sws-set-selected-tracks-heights-to-a": 53330, + "xenakios-sws-set-selected-tracks-heights-to-b": 53331, + "xenakios-sws-set-selected-tracks-record-armed": 53322, + "xenakios-sws-set-selected-tracks-record-unarmed": 53323, + "xenakios-sws-set-volume-and-pan-of-selected-takes": 53291, + "xenakios-sws-set-volume-of-selected-items": 53292, + "xenakios-sws-set-volume-of-selected-tracks-to-0-0-db": 53305, + "xenakios-sws-shift-all-points-in-selected-envelope-to-left-by-1-second": 53479, + "xenakios-sws-shift-all-points-in-selected-envelope-to-right-by-1-second": 53478, + "xenakios-sws-show-hide-floating-item-track-info": 53390, + "xenakios-sws-shuffle-order-of-selected-items": 53451, + "xenakios-sws-shuffle-order-of-selected-items-keep-relative-positions": 53450, + "xenakios-sws-skip-select-items-from-selected-items": 53236, + "xenakios-sws-skip-select-items-in-selected-tracks": 53235, + "xenakios-sws-split-items-at-transients": 53299, + "xenakios-sws-spread-selected-items-over-4-tracks": 53391, + "xenakios-sws-spread-selected-items-over-tracks": 53392, + "xenakios-sws-stop-current-media-item-take-preview": 53361, + "xenakios-sws-store-current-selected-takes": 53251, + "xenakios-sws-store-edit-cursor-position": 53375, + "xenakios-sws-store-render-speed": 53437, + "xenakios-sws-store-selected-tracks-heights": 53332, + "xenakios-sws-swing-item-positions": 53443, + "xenakios-sws-switch-item-contents-to-first-cue": 53244, + "xenakios-sws-switch-item-contents-to-next-cue": 53240, + "xenakios-sws-switch-item-contents-to-next-cue-preserve-item-length": 53241, + "xenakios-sws-switch-item-contents-to-previous-cue": 53242, + "xenakios-sws-switch-item-contents-to-previous-cue-preserve-item-length": 53243, + "xenakios-sws-switch-item-contents-to-random-cue": 53245, + "xenakios-sws-switch-item-contents-to-random-cue-preserve-item-length": 53246, + "xenakios-sws-switch-item-source-file-to-next-in-folder": 53444, + "xenakios-sws-switch-item-source-file-to-next-rpp-in-folder": 53447, + "xenakios-sws-switch-item-source-file-to-previous-in-folder": 53445, + "xenakios-sws-switch-item-source-file-to-previous-rpp-in-folder": 53448, + "xenakios-sws-switch-item-source-file-to-random-in-folder": 53446, + "xenakios-sws-take-mixer": 53352, + "xenakios-sws-time-selection-adaptive-delete": 53440, + "xenakios-sws-toggle-reference-track": 53476, + "xenakios-sws-toggle-ripple-edit-all-tracks-on-off": 53419, + "xenakios-sws-toggle-ripple-edit-one-track-on-off": 53418, + "xenakios-sws-toggle-selected-items-selected-randomly": 53349, + "xenakios-sws-toggle-selected-takes-normalized-unity-gain": 53293, + "xenakios-sws-toggle-selected-tracks-height-a-b": 53416, + "xenakios-sws-trim-untrim-item-left-edge-to-edit-cursor": 53266, + "xenakios-sws-trim-untrim-item-right-edge-to-edit-cursor": 53267, + "xenakios-sws-unbypass-fx-of-selected-tracks": 53329, + "xenakios-sws-unselect-tracks-with-buss-in-name": 53336, +} as const satisfies Record; + +export type ReaperActionId = keyof typeof REAPER_ACTIONS; diff --git a/src/Reaper/enumerate_actions.lua b/src/Reaper/enumerate_actions.lua new file mode 100644 index 0000000000000000000000000000000000000000..62013866120e0c6c151e09af897cf92ec4a475be --- /dev/null +++ b/src/Reaper/enumerate_actions.lua @@ -0,0 +1,69 @@ +local output_path = OUTPUT_PATH or os.getenv("REAPER_ACTIONS_OUTPUT_PATH") +if not output_path or output_path == "" then + error("REAPER_ACTIONS_OUTPUT_PATH is not set") +end + +local section = reaper.SectionFromUniqueID(0) +if not section then + error("Failed to resolve the main action section") +end + +local function json_escape(value) + return value:gsub('[%z\1-\31\\"]', function(char) + if char == "\\" then + return "\\\\" + end + if char == "\"" then + return "\\\"" + end + if char == "\b" then + return "\\b" + end + if char == "\f" then + return "\\f" + end + if char == "\n" then + return "\\n" + end + if char == "\r" then + return "\\r" + end + if char == "\t" then + return "\\t" + end + + return string.format("\\u%04x", char:byte()) + end) +end + +local handle = assert(io.open(output_path, "wb")) +handle:write("[\n") + +local first = true +local index = 0 + +while true do + local command_id, name = reaper.kbd_enumerateActions(section, index) + if command_id == 0 then + break + end + + if name and name ~= "" then + if not first then + handle:write(",\n") + end + first = false + handle:write( + string.format( + ' {"commandId":%d,"name":"%s"}', + command_id, + json_escape(name) + ) + ) + end + + index = index + 1 +end + +handle:write("\n]\n") +handle:close() diff --git a/src/Reaper/generate-actions.ts b/src/Reaper/generate-actions.ts new file mode 100644 index 0000000000000000000000000000000000000000..ca67651081c7e40998446d2c088b2e83ade74066 --- /dev/null +++ b/src/Reaper/generate-actions.ts @@ -0,0 +1,183 @@ +import { execFile } from "node:child_process"; +import { + access, + mkdir, + mkdtemp, + readFile, + rm, + writeFile, +} from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { dirname, join, resolve } from "node:path"; +import process from "node:process"; +import { fileURLToPath } from "node:url"; +import { promisify } from "node:util"; + +type RawReaperAction = { + commandId: number; + name: string; +}; + +type GeneratedReaperAction = RawReaperAction & { + actionId: string; +}; + +const DEFAULT_REAPER_BIN = "/Applications/REAPER.app/Contents/MacOS/REAPER"; +const srcDir = dirname(fileURLToPath(import.meta.url)); +const repoRoot = resolve(srcDir, "..", ".."); +const enumeratorPath = join( + repoRoot, + "config", + "scripts", + "reaper", + "enumerate_actions.lua", +); +const outputPath = join(srcDir, "actions.ts"); +const execFileAsync = promisify(execFile); + +async function main() { + const tempDir = await mkdtemp(join(tmpdir(), "reaper-actions-")); + const dumpPath = join(tempDir, "actions.json"); + const runnerPath = join(tempDir, "run_enumerator.lua"); + + try { + await writeFile(runnerPath, buildRunnerScript(dumpPath), "utf8"); + await execFileAsync( + process.env.REAPER_BIN ?? DEFAULT_REAPER_BIN, + ["-nonewinst", runnerPath], + ); + await waitForFile(dumpPath); + + const rawActions = parseRawActions( + JSON.parse(await readFile(dumpPath, "utf8")) as unknown, + ); + const actions = buildActionMap(rawActions); + await mkdir(dirname(outputPath), { recursive: true }); + await writeFile(outputPath, renderActionsFile(actions), "utf8"); + + console.info(`Generated ${actions.length} REAPER actions in src/Reaper/actions.ts`); + } finally { + await rm(tempDir, { force: true, recursive: true }); + } +} + +function buildRunnerScript(dumpPath: string) { + return [ + `OUTPUT_PATH = ${JSON.stringify(dumpPath)}`, + `dofile(${JSON.stringify(enumeratorPath)})`, + "", + ].join("\n"); +} + +function parseRawActions(value: unknown): RawReaperAction[] { + if (!Array.isArray(value)) { + throw new Error("Expected REAPER action dump to be an array."); + } + + return value.flatMap((entry) => { + if ( + !entry || + typeof entry !== "object" || + !("commandId" in entry) || + !("name" in entry) + ) { + return []; + } + + const commandId = Number(entry.commandId); + const name = String(entry.name ?? "").trim(); + if (!Number.isInteger(commandId) || name === "") { + return []; + } + + return [{ commandId, name }]; + }); +} + +function buildActionMap(actions: ReadonlyArray) { + const usedIds = new Set(); + + return [...actions] + .map((action) => ({ + ...action, + actionId: createUniqueActionId(action.name, action.commandId, usedIds), + })) + .sort((left, right) => left.actionId.localeCompare(right.actionId)); +} + +function createUniqueActionId( + name: string, + commandId: number, + usedIds: Set, +) { + const baseId = toKebabCase(name) || `action-${commandId}`; + let actionId = baseId; + let duplicateIndex = 2; + + while (usedIds.has(actionId)) { + actionId = `${baseId}-${commandId}`; + if (!usedIds.has(actionId)) { + break; + } + actionId = `${baseId}-${commandId}-${duplicateIndex}`; + duplicateIndex += 1; + } + + usedIds.add(actionId); + return actionId; +} + +function toKebabCase(value: string) { + return value + .normalize("NFKD") + .replace(/[\u0300-\u036f]/gu, "") + .toLowerCase() + .replace(/&/gu, " and ") + .replace(/\+/gu, " plus ") + .replace(/#/gu, " number ") + .replace(/%/gu, " percent ") + .replace(/[^a-z0-9]+/gu, "-") + .replace(/^-+|-+$/gu, "") + .replace(/-{2,}/gu, "-"); +} + +function renderActionsFile(actions: ReadonlyArray) { + const lines = [ + "// Generated by src/Reaper/generate-actions.ts", + "// Source: REAPER main action section via kbd_enumerateActions()/kbd_getTextFromCmd().", + "", + "export const REAPER_ACTIONS = {", + ...actions.map((action) => + ` ${JSON.stringify(action.actionId)}: ${action.commandId},` + ), + "} as const satisfies Record;", + "", + "export type ReaperActionId = keyof typeof REAPER_ACTIONS;", + "", + ]; + + return lines.join("\n"); +} + +async function waitForFile(filePath: string, timeoutMs = 30_000) { + const startedAt = Date.now(); + + while (Date.now() - startedAt < timeoutMs) { + try { + await access(filePath); + return; + } catch {} + + await sleep(200); + } + + throw new Error(`Timed out waiting for ${filePath}`); +} + +function sleep(ms: number) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +await main(); diff --git a/src/SpeedEditor.ts b/src/SpeedEditor.ts new file mode 100644 index 0000000000000000000000000000000000000000..8271497e25aeaa916b83f3485244f6bbffab3357 --- /dev/null +++ b/src/SpeedEditor.ts @@ -0,0 +1,991 @@ +import { Events } from "@clo/lib/Events.ts"; +import { defer } from "@clo/lib/ts.ts"; +import type { Dispose, Timer } from "@clo/lib/ts.ts"; +import type { Mac } from "./Mac"; +import * as log from "@clo/lib/log.ts"; + +const SPEED_EDITOR_VENDOR_ID = 0x1edb; +const SPEED_EDITOR_PRODUCT_ID = 0xda0e; + +const keyIds = [ + "smartInsert", + "append", + "rippleOverwrite", + "closeUp", + "placeOnTop", + "sourceOverwrite", + "in", + "out", + "trimIn", + "trimOut", + "roll", + "slipSource", + "slipDestination", + "transitionDuration", + "cut", + "dissolve", + "smoothCut", + "source", + "timeline", + "shuttle", + "jog", + "scroll", + "escape", + "syncBin", + "audioLevel", + "fullView", + "transition", + "split", + "snap", + "rippleDelete", + "cam1", + "cam2", + "cam3", + "cam4", + "cam5", + "cam6", + "cam7", + "cam8", + "cam9", + "liveOverwrite", + "videoOnly", + "audioOnly", + "stopPlay", +] as const; + +const ledIds = [ + "closeUp", + "cut", + "dissolve", + "smoothCut", + "transition", + "snap", + "cam7", + "cam8", + "cam9", + "liveOverwrite", + "cam4", + "cam5", + "cam6", + "videoOnly", + "cam1", + "cam2", + "cam3", + "audioOnly", +] as const; + +const jogLeds = ["jog", "shuttle", "scroll"] as const; + +const jogModes = [ + "relative", + "relative-normalized", + "absolute-continuous", + "absolute-deadzero", +] as const; + +/** + * Node.js Bindings for DaVinci Resolve Speed Editor. + */ +export class SpeedEditor extends Events { + static keys = keyIds; + static leds = ledIds; + static jogLeds = jogLeds; + static jogModes = jogModes; + + #options: Required; + #device: import("node-hid").HID | null = null; + #deviceInfo: SpeedEditor.DeviceInfo | null = null; + #ready = false; + #closed = false; + #stopHotplugMonitoring: (() => void) | null = null; + #refreshing: Promise | null = null; + #refreshRequested = false; + #leds = new Set(); + #jogLeds = new Set(); + #jogMode: SpeedEditor.JogMode = "relative"; + #normalizedJogActive = false; + #normalizedJogBufferedDistance = 0; + #normalizedJogBufferedValue = 0; + #normalizedJogResetTimer: Timer | null = null; + #activeKeys = new Set(); + #pendingKeypressTimers = new Map(); + #doublePressActiveKeys = new Set(); + #doublePressListeners = new Map void>>(); + + private constructor(options: SpeedEditor.Options = {}) { + super(); + this.#options = { + vendorId: options.vendorId ?? SPEED_EDITOR_VENDOR_ID, + productId: options.productId ?? SPEED_EDITOR_PRODUCT_ID, + path: options.path ?? null, + nonExclusive: options.nonExclusive ?? false, + }; + } + + static async open(options: SpeedEditor.Options = {}) { + const editor = new SpeedEditor(options); + await editor.#start(); + return editor; + } + + static async listDevices( + options: Pick = {}, + ): Promise { + const { devices } = await import("node-hid"); + const vendorId = options.vendorId ?? SPEED_EDITOR_VENDOR_ID; + const productId = options.productId ?? SPEED_EDITOR_PRODUCT_ID; + + return devices(vendorId, productId).map((device) => ({ ...device })); + } + + #authenticate(device: import("node-hid").HID): number { + return authenticateDevice(device); + } + + setLeds(states: Iterable) { + this.#leds = new Set(states); + if (this.#device) { + writeLedState(this.#device, this.#leds); + } + } + + setJogLeds(states: Iterable) { + this.#jogLeds = new Set(states); + if (this.#device) { + writeJogLedState(this.#device, this.#jogLeds); + } + } + + setJogMode(mode: SpeedEditor.JogMode) { + if (mode !== this.#jogMode) { + this.#resetNormalizedJogTracking(); + } + this.#jogMode = mode; + if (this.#device) { + writeJogMode(this.#device, mode); + } + } + + leds = new Proxy({} as Record, { + get: (_, key) => { + return this.#leds.has(key as SpeedEditor.Led); + }, + set: (_, key, value) => { + if (value) this.#leds.add(key as SpeedEditor.Led); + else this.#leds.delete(key as SpeedEditor.Led); + this.setLeds(Array.from(this.#leds)); + return true; + }, + }); + + jogLeds = new Proxy({} as Record, { + get: (_, key) => { + return this.#jogLeds.has(key as SpeedEditor.JogLed); + }, + set: (_, key, value) => { + return true; + }, + }); + + keys = new Proxy({} as Record, { + get: (_, key) => { + return this.#activeKeys.has(key as SpeedEditor.Key); + }, + set: (_, key, value) => { + return true; + }, + }); + + get jogMode(): SpeedEditor.JogMode { + return this.#jogMode; + } + + get connected(): boolean { + return this.#ready; + } + + get deviceInfo(): SpeedEditor.DeviceInfo | null { + return this.#deviceInfo && { ...this.#deviceInfo }; + } + + onPress(key: SpeedEditor.Key, listener: () => void): Dispose { + return this.on("keypress", (code) => { + if (key === code) listener(); + }); + } + + onDoublePress(key: SpeedEditor.Key, listener: () => void): Dispose { + const listeners = this.#doublePressListeners.get(key) ?? + new Set<() => void>(); + listeners.add(listener); + this.#doublePressListeners.set(key, listeners); + + return defer(() => { + const current = this.#doublePressListeners.get(key); + if (!current) return; + current.delete(listener); + if (current.size === 0) { + this.#doublePressListeners.delete(key); + } + }); + } + + close() { + if (this.#closed) return; + this.#closed = true; + this.#ready = false; + this.#refreshRequested = false; + this.#stopHotplugMonitoring?.(); + this.#stopHotplugMonitoring = null + this.#disconnect(false); + this.emit("close"); + } + + async #start() { + await this.#startHotplugMonitoring(); + await this.#refreshConnection(); + } + + async #startHotplugMonitoring() { + const { usb } = await import("usb"); + const onHotplug = (device: import("usb").Device) => { + if (!this.#matchesHotplugDevice(device)) { + return; + } + void this.#refreshConnection(); + }; + + usb.on("attach", onHotplug); + usb.on("detach", onHotplug); + usb.unrefHotplugEvents(); + + this.#stopHotplugMonitoring = () => { + usb.off("attach", onHotplug); + usb.off("detach", onHotplug); + }; + } + + #matchesHotplugDevice(device: import("usb").Device) { + const descriptor = device.deviceDescriptor; + return descriptor.idVendor === this.#options.vendorId && + descriptor.idProduct === this.#options.productId; + } + + async #refreshConnection() { + if (this.#closed) { + return; + } + + this.#refreshRequested = true; + if (this.#refreshing) { + await this.#refreshing; + return; + } + + this.#refreshing = (async () => { + while (this.#refreshRequested && !this.#closed) { + this.#refreshRequested = false; + + try { + const devices = await SpeedEditor.listDevices({ + vendorId: this.#options.vendorId, + productId: this.#options.productId, + }); + await this.#reconcileConnection(devices); + } catch (error) { + this.#emitAsyncError(error); + } + } + })().finally(() => { + this.#refreshing = null; + }); + + await this.#refreshing; + } + + async #reconcileConnection(devices: ReadonlyArray) { + if (this.#closed) { + return; + } + + const currentKey = getDeviceKey(this.#deviceInfo); + const currentStillPresent = currentKey !== null && + devices.some((device) => getDeviceKey(device) === currentKey); + + if (this.#device && !currentStillPresent) { + this.#disconnect(true); + } + + if (this.#device) { + return; + } + + const nextDevice = this.#selectDevice(devices); + if (!nextDevice) { + return; + } + + await this.#connect(nextDevice); + } + + #selectDevice(devices: ReadonlyArray) { + if (this.#options.path) { + return devices.find((device) => device.path === this.#options.path) ?? + null; + } + + return devices[0] ?? null; + } + + async #connect( + deviceInfo: SpeedEditor.DeviceInfo, + ): Promise { + const { HID } = await import("node-hid"); + let device: import("node-hid").HID | null = null; + + try { + device = this.#options.path + ? new HID(this.#options.path, { + nonExclusive: this.#options.nonExclusive, + }) + : new HID(deviceInfo.vendorId, deviceInfo.productId, { + nonExclusive: this.#options.nonExclusive, + }); + + this.#device = device; + this.#authenticate(device); + if (this.#closed || this.#device !== device) { + closeDeviceHandle(device); + return null; + } + + device.on("data", (report) => { + if (this.#device === device) { + this.#handleReport(report); + } + }); + device.on("error", (error) => { + if (this.#device === device) { + this.#handleDeviceError(error); + } + }); + + writeLedState(device, this.#leds); + writeJogLedState(device, this.#jogLeds); + writeJogMode(device, this.#jogMode); + + const info = copyDeviceInfo(device.getDeviceInfo()); + this.#deviceInfo = info; + this.#ready = true; + this.emit("connect", info); + return info; + } catch (error) { + if (this.#device === device) { + this.#disconnect(false); + } else if (device) { + closeDeviceHandle(device); + } + + if (!isRecoverableDeviceError(error)) { + this.#emitAsyncError(error); + } + return null; + } + } + + #handleReport(report: number[] | Buffer) { + const bytes = Uint8Array.from(report); + const reportId = bytes[0]; + + if (reportId === 0x03) { + const modeCode = bytes[1]; + const mode = JOG_MODE_BY_CODE.get(modeCode); + if (!mode) return; + const rawValue = getInt32LE(bytes, 2); + const value = mode === "relative" ? rawValue / 360 : rawValue; + if (mode === "relative" && this.#jogMode === "relative-normalized") { + this.#handleNormalizedRelativeJog(value); + return; + } + this.emit("jog", { mode, value }); + return; + } + + if (reportId === 0x04) { + const keys: SpeedEditor.Key[] = []; + for (let index = 0; index < 6; index += 1) { + const code = getUint16LE(bytes, 1 + index * 2); + if (code === 0) { + continue; + } + const key = KEY_BY_CODE.get(code); + if (key) keys.push(key); + } + this.#applyKeyState(keys); + this.emit("key", keys); + return; + } + + if (reportId === 0x07) { + const percent = bytes[2] ?? 0; + this.emit("battery", { + charging: (bytes[1] ?? 0) === 1, + level: Math.max(0, Math.min(percent, 100)) / 100, + percent, + }); + return; + } + } + + #handleDeviceError(error: unknown) { + this.#disconnect(true); + if (!isRecoverableDeviceError(error)) { + this.#emitAsyncError(error); + } + void this.#refreshConnection(); + } + + #emitAsyncError(error: unknown) { + queueMicrotask(() => { + this.emit("error", error); + }); + } + + #disconnect(emitEvent: boolean) { + const device = this.#device; + const info = this.#deviceInfo && { ...this.#deviceInfo }; + + this.#device = null; + this.#deviceInfo = null; + this.#ready = false; + if (device) { + closeDeviceHandle(device); + } + this.#resetNormalizedJogTracking(); + this.#resetKeyTracking(); + + if (emitEvent && info) { + this.emit("disconnect", info); + } + } + + #handleNormalizedRelativeJog(value: number) { + if (value === 0) { + return; + } + + if (this.#normalizedJogActive) { + this.#scheduleNormalizedJogReset(); + this.emit("jog", { mode: "relative-normalized", value }); + return; + } + + if (!this.#normalizedJogResetTimer) { + this.#scheduleNormalizedJogReset(); + } + this.#normalizedJogBufferedValue += value; + this.#normalizedJogBufferedDistance += Math.abs(value); + if (this.#normalizedJogBufferedDistance < NORMALIZED_JOG_THRESHOLD) { + return; + } + + this.#normalizedJogActive = true; + const bufferedValue = this.#normalizedJogBufferedValue; + this.#normalizedJogBufferedValue = 0; + this.#normalizedJogBufferedDistance = 0; + this.#scheduleNormalizedJogReset(); + this.emit("jog", { mode: "relative-normalized", value: bufferedValue }); + } + + #scheduleNormalizedJogReset() { + if (this.#normalizedJogResetTimer) { + clearTimeout(this.#normalizedJogResetTimer); + } + + this.#normalizedJogResetTimer = setTimeout(() => { + this.#normalizedJogResetTimer = null; + this.#normalizedJogActive = false; + this.#normalizedJogBufferedDistance = 0; + this.#normalizedJogBufferedValue = 0; + }, NORMALIZED_JOG_IDLE_RESET_MS); + } + + #resetNormalizedJogTracking() { + if (this.#normalizedJogResetTimer) { + clearTimeout(this.#normalizedJogResetTimer); + this.#normalizedJogResetTimer = null; + } + this.#normalizedJogActive = false; + this.#normalizedJogBufferedDistance = 0; + this.#normalizedJogBufferedValue = 0; + } + + #applyKeyState(keys: ReadonlyArray) { + const nextKeys = new Set(keys); + const releasedKeys: SpeedEditor.Key[] = []; + const pressedKeys: SpeedEditor.Key[] = []; + + for (const key of this.#activeKeys) { + if (!nextKeys.has(key)) { + releasedKeys.push(key); + } + } + + for (const key of nextKeys) { + if (!this.#activeKeys.has(key)) { + pressedKeys.push(key); + } + } + + this.#activeKeys = nextKeys; + + for (const key of releasedKeys) { + this.emit("keyup", key); + this.#handleKeyRelease(key); + } + + for (const key of pressedKeys) { + this.emit("keydown", key); + this.#handleKeyPressStart(key); + } + } + + #handleKeyPressStart(key: SpeedEditor.Key) { + if (!this.#isDoublePressTracked(key)) { + this.emit("keypress", key); + return; + } + + const pendingKeypress = this.#pendingKeypressTimers.get(key); + if (!pendingKeypress) { + return; + } + + clearTimeout(pendingKeypress); + this.#pendingKeypressTimers.delete(key); + this.#doublePressActiveKeys.add(key); + + const listeners = this.#doublePressListeners.get(key); + if (!listeners) { + return; + } + for (const listener of listeners) { + listener(); + } + } + + #handleKeyRelease(key: SpeedEditor.Key) { + if (!this.#isDoublePressTracked(key)) { + return; + } + + if (this.#doublePressActiveKeys.delete(key)) { + return; + } + + const pendingKeypress = this.#pendingKeypressTimers.get(key); + if (pendingKeypress) { + clearTimeout(pendingKeypress); + } + + this.#pendingKeypressTimers.set( + key, + setTimeout(() => { + this.#pendingKeypressTimers.delete(key); + this.emit("keypress", key); + }, DOUBLE_PRESS_WINDOW_MS), + ); + } + + #isDoublePressTracked(key: SpeedEditor.Key) { + return (this.#doublePressListeners.get(key)?.size ?? 0) > 0; + } + + #resetKeyTracking() { + for (const timer of this.#pendingKeypressTimers.values()) { + clearTimeout(timer); + } + this.#pendingKeypressTimers.clear(); + this.#doublePressActiveKeys.clear(); + this.#activeKeys.clear(); + } + + static camNumbersToNumpad(speededitor: Pick, mac: Pick) { + speededitor.onPress("cam1", () => mac.pressKey('numpad1')); + speededitor.onPress("cam2", () => mac.pressKey('numpad2')); + speededitor.onPress("cam3", () => mac.pressKey('numpad3')); + speededitor.onPress("cam4", () => mac.pressKey('numpad4')); + speededitor.onPress("cam5", () => mac.pressKey('numpad5')); + speededitor.onPress("cam6", () => mac.pressKey('numpad6')); + speededitor.onPress("cam7", () => mac.pressKey('numpad7')); + speededitor.onPress("cam8", () => mac.pressKey('numpad8')); + speededitor.onPress("cam9", () => mac.pressKey('numpad9')); + speededitor.onPress("liveOverwrite", () => mac.pressKey('numpad0')); + } +} + +export declare namespace SpeedEditor { + export type JogMode = typeof jogModes[number]; + export type Key = typeof keyIds[number]; + export type Led = typeof ledIds[number]; + export type JogLed = typeof jogLeds[number]; + export type JogKey = Extract; + export type DeviceInfo = import("node-hid").Device; + + export interface Options { + vendorId?: number; + productId?: number; + path?: string | null; + nonExclusive?: boolean; + } + + export type EventMap = { + "close": []; + "connect": [deviceInfo: DeviceInfo]; + "disconnect": [deviceInfo: DeviceInfo]; + "error": [error: unknown]; + "jog": [event: { mode: JogMode; value?: number }]; + "key": [activeKeys: ReadonlyArray]; + "keydown": [key: Key]; + "keyup": [key: Key]; + "keypress": [key: Key]; + "battery": [event: { + charging: boolean; + /** Zero to one. */ + level: number; + /** Zero to one hundred. */ + percent: number; + }]; + }; +} + +const UINT64_MASK = 0xffff_ffff_ffff_ffffn; +const AUTH_MASK = 0xa79a63f585d37bf0n; +const AUTH_EVEN_TABLE = [ + 0x3ae1206f97c10bc8n, + 0x2a9ab32bebf244c6n, + 0x20a6f8b8df9adf0an, + 0xaf80ece52cfc1719n, + 0xec2ee2f7414fd151n, + 0xb055adfd73344a15n, + 0xa63d2e3059001187n, + 0x751bf623f42e0dden, +] as const; +const AUTH_ODD_TABLE = [ + 0x3e22b34f502e7fden, + 0x24656b981875ab1cn, + 0xa17f3456df7bf8c3n, + 0x6df72e1941aef698n, + 0x72226f011e66ab94n, + 0x3831a3c606296b42n, + 0xfd7ff81881332c89n, + 0x61a3f6474ff236c6n, +] as const; + +const KEY_BY_CODE = new Map([ + [0x01, "smartInsert"], + [0x02, "append"], + [0x03, "rippleOverwrite"], + [0x04, "closeUp"], + [0x05, "placeOnTop"], + [0x06, "sourceOverwrite"], + [0x07, "in"], + [0x08, "out"], + [0x09, "trimIn"], + [0x0a, "trimOut"], + [0x0b, "roll"], + [0x0c, "slipSource"], + [0x0d, "slipDestination"], + [0x0e, "transitionDuration"], + [0x0f, "cut"], + [0x10, "dissolve"], + [0x11, "smoothCut"], + [0x1a, "source"], + [0x1b, "timeline"], + [0x1c, "shuttle"], + [0x1d, "jog"], + [0x1e, "scroll"], + [0x1f, "syncBin"], + [0x22, "transition"], + [0x25, "videoOnly"], + [0x26, "audioOnly"], + [0x2b, "rippleDelete"], + [0x2c, "audioLevel"], + [0x2d, "fullView"], + [0x2e, "snap"], + [0x2f, "split"], + [0x30, "liveOverwrite"], + [0x31, "escape"], + [0x33, "cam1"], + [0x34, "cam2"], + [0x35, "cam3"], + [0x36, "cam4"], + [0x37, "cam5"], + [0x38, "cam6"], + [0x39, "cam7"], + [0x3a, "cam8"], + [0x3b, "cam9"], + [0x3c, "stopPlay"], +]); + +const LED_BIT_BY_LED = new Map([ + ["closeUp", 1 << 0], + ["cut", 1 << 1], + ["dissolve", 1 << 2], + ["smoothCut", 1 << 3], + ["transition", 1 << 4], + ["snap", 1 << 5], + ["cam7", 1 << 6], + ["cam8", 1 << 7], + ["cam9", 1 << 8], + ["liveOverwrite", 1 << 9], + ["cam4", 1 << 10], + ["cam5", 1 << 11], + ["cam6", 1 << 12], + ["videoOnly", 1 << 13], + ["cam1", 1 << 14], + ["cam2", 1 << 15], + ["cam3", 1 << 16], + ["audioOnly", 1 << 17], +]); + +const JOG_LED_BIT_BY_LED = new Map([ + ["jog", 1 << 0], + ["shuttle", 1 << 1], + ["scroll", 1 << 2], +]); + +const JOG_MODE_CODE_BY_MODE = new Map([ + ["relative", 2], + ["relative-normalized", 2], + ["absolute-continuous", 1], + ["absolute-deadzero", 3], +]); + +const JOG_MODE_BY_CODE = new Map([ + [0, "relative"], + [1, "absolute-continuous"], + [2, "relative"], + [3, "absolute-deadzero"], +]); + +const DOUBLE_PRESS_WINDOW_MS = 100; +const NORMALIZED_JOG_THRESHOLD = 5; +const NORMALIZED_JOG_IDLE_RESET_MS = 1_000; + +function authenticateDevice(device: import("node-hid").HID) { + sendFeatureReport(device, [ + 0x06, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ]); + + const challengeReport = getFeatureReport(device, 6, 10); + assertFeatureStage(challengeReport, 0x00, "get_kbd_challenge"); + const challenge = getUint64LE(challengeReport, 2); + + sendFeatureReport(device, [ + 0x06, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + ]); + + const responseReport = getFeatureReport(device, 6, 10); + assertFeatureStage(responseReport, 0x02, "get_kbd_response"); + + sendFeatureReport(device, [ + 0x06, + 0x03, + ...toLittleEndianBytes(bmdKeyboardAuth(challenge), 8), + ]); + + const statusReport = getFeatureReport(device, 6, 10); + assertFeatureStage(statusReport, 0x04, "get_kbd_status"); + + return getUint16LE(statusReport, 2); +} + +function sendFeatureReport(device: import("node-hid").HID, values: number[]) { + const written = device.sendFeatureReport(values); + if (written <= 0) { + throw new Error("Failed to send Speed Editor feature report"); + } +} + +function getFeatureReport( + device: import("node-hid").HID, + reportId: number, + length: number, +) { + return Uint8Array.from(device.getFeatureReport(reportId, length)); +} + +function assertFeatureStage(report: Uint8Array, stage: number, name: string) { + if (report[0] !== 0x06 || report[1] !== stage) { + throw new Error(`Failed authentication ${name}`); + } +} + +function writeLedState( + device: import("node-hid").HID, + leds: Iterable, +) { + let bitfield = 0; + for (const led of leds) { + bitfield |= LED_BIT_BY_LED.get(led) ?? 0; + } + const bytes = [0x02, ...toLittleEndianBytes(BigInt(bitfield >>> 0), 4)]; + device.write(bytes); +} + +function writeJogLedState( + device: import("node-hid").HID, + leds: Iterable, +) { + let bitfield = 0; + for (const led of leds) { + bitfield |= JOG_LED_BIT_BY_LED.get(led) ?? 0; + } + device.write([0x04, bitfield]); +} + +function writeJogMode( + device: import("node-hid").HID, + mode: SpeedEditor.JogMode, +) { + const code = JOG_MODE_CODE_BY_MODE.get(mode); + if (code === undefined) { + throw new Error(`Unsupported jog mode: ${mode}`); + } + device.write([0x03, code, 0x00, 0x00, 0x00, 0x00, 0xff]); +} + +function copyDeviceInfo( + device: import("node-hid").Device, +): SpeedEditor.DeviceInfo { + return { ...device }; +} + +function formatDeviceLogLabel(device: SpeedEditor.DeviceInfo) { + const name = device.product ?? device.manufacturer ?? "Speed Editor"; + const details = [ + device.serialNumber && `serial=${device.serialNumber}`, + device.path && `path=${device.path}`, + ].filter(Boolean); + + if (details.length === 0) { + return name; + } + + return `${name} (${details.join(", ")})`; +} + +function closeDeviceHandle(device: import("node-hid").HID) { + device.removeAllListeners("data"); + device.removeAllListeners("error"); + try { + device.close(); + } catch { + // Ignore close races when the device disappears while reconnecting. + } +} + +function getDeviceKey(device: SpeedEditor.DeviceInfo | null) { + if (!device) { + return null; + } + + return device.path ?? + [ + device.vendorId, + device.productId, + device.serialNumber ?? "", + device.interface, + device.release, + device.usagePage ?? "", + device.usage ?? "", + ].join(":"); +} + +function isRecoverableDeviceError(error: unknown) { + if (!(error instanceof Error)) { + return false; + } + + const message = error.message.toLowerCase(); + return [ + "cannot open device", + "cannot access closed device", + "cannot write to closed device", + "cannot write to hid device", + "could not read data from device", + "could not get feature report from device", + "could not send feature report to device", + "unable to get device info", + "device not found", + "no such device", + ].some((pattern) => message.includes(pattern)); +} + +function rol8(value: bigint) { + return ((value << 56n) | (value >> 8n)) & UINT64_MASK; +} + +function rol8n(value: bigint, count: bigint) { + let next = value; + for (let index = 0n; index < count; index += 1n) { + next = rol8(next); + } + return next; +} + +function bmdKeyboardAuth(challenge: bigint) { + const index = Number(challenge & 0x7n); + let value = rol8n(challenge, BigInt(index)); + + if ((value & 0x1n) === BigInt((0x78 >> index) & 0x1)) { + return value ^ (rol8(value) & AUTH_MASK) ^ AUTH_EVEN_TABLE[index]; + } + + value = value ^ rol8(value); + return value ^ (rol8(value) & AUTH_MASK) ^ AUTH_ODD_TABLE[index]; +} + +function getUint16LE(bytes: Uint8Array, offset: number) { + return (bytes[offset] ?? 0) | ((bytes[offset + 1] ?? 0) << 8); +} + +function getInt32LE(bytes: Uint8Array, offset: number) { + return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength) + .getInt32(offset, true); +} + +function getUint64LE(bytes: Uint8Array, offset: number) { + let value = 0n; + for (let index = 0; index < 8; index += 1) { + value |= BigInt(bytes[offset + index] ?? 0) << (BigInt(index) * 8n); + } + return value; +} + +function toLittleEndianBytes(value: bigint, width: number) { + const bytes: number[] = []; + for (let index = 0; index < width; index += 1) { + bytes.push(Number((value >> (BigInt(index) * 8n)) & 0xffn)); + } + return bytes; +} diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d808f914dabd84804d133487bc6680290e21339 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,292 @@ +import * as ts from "@clo/lib/ts.ts"; +import type { Dispose } from "@clo/lib/ts.ts"; +import * as fs from "node:fs/promises"; +import * as path from "node:path"; +import * as url from "node:url"; +import { Mac } from "./Mac.ts"; +import { SpeedEditor } from "./SpeedEditor.ts"; +import { Events } from "@clo/lib/Events.ts"; +import * as console from "@clo/lib/log.ts"; + +export interface Configure { + /** Events are only active when the application is active. */ + speededitor: AppSpeedEditor; + /** Not intended to listen for events. */ + mac: Mac; + /** Control the application itself */ + app: Events; +} + +export interface AppConfig { + bundle: Mac.BundleId; + configure: (x: Configure) => void; +} + +interface AppInstance { + bundle: Mac.BundleId; + speedEditorProxy: AppSpeedEditor; + app: Events; +} + +interface AppDefinition { + bundle: Mac.BundleId; + load: () => Promise; +} + +export type AppEvents = { + "focus": [], + "blur": [], +} + +export function forApp( + bundle: Mac.BundleId, + configure: AppConfig["configure"], +): AppConfig { + return { bundle, configure }; +} + +export class AppSpeedEditor extends Events { + #stack = new DisposableStack(); + #enabledStack = new DisposableStack(); + #source: SpeedEditor; + #doubleKeyEvents = new Set<{ key: SpeedEditor.Key; listener: () => void }>(); + #intendedLeds = new Set(); + #intendedJogLeds = new Set(); + #intendedJogMode: SpeedEditor.JogMode = "relative-normalized"; + #enabled = false; + + constructor(source: SpeedEditor) { + super(); + this.#source = source; + this.#stack = new DisposableStack(); + this.#stack.use(source.onAny((event, args) => { + if (this.#enabled) { + this.emit( + event, + ...args as SpeedEditor.EventMap[keyof SpeedEditor.EventMap], + ); + } + })); + } + + get enabled() { + return this.#enabled; + } + + set enabled(enabled: boolean) { + if (this.#enabled === enabled) return; + this.#enabled = enabled; + if (!enabled) { + this.#enabledStack.dispose(); + this.#enabledStack = new DisposableStack(); + } else { + this.#source.setLeds(this.#intendedLeds); + this.#source.setJogLeds(this.#intendedJogLeds); + this.#source.setJogMode(this.#intendedJogMode); + for (const { key, listener } of this.#doubleKeyEvents) { + this.#enabledStack.use(this.#source.onDoublePress(key, listener)); + } + } + } + + setLeds(states: Iterable) { + this.#intendedLeds = new Set(states); + if (this.#enabled) { + this.#source.setLeds(this.#intendedLeds); + } + } + + setJogLeds(states: Iterable) { + this.#intendedJogLeds = new Set(states); + if (this.#enabled) { + this.#source.setJogLeds(this.#intendedJogLeds); + } + } + + setJogMode(mode: SpeedEditor.JogMode) { + this.#intendedJogMode = mode; + if (this.#enabled) { + this.#source.setJogMode(mode); + } + } + + leds = new Proxy({} as Record, { + get: (_, key) => { + return this.#intendedLeds.has(key as SpeedEditor.Led); + }, + set: (_, key, value) => { + if (value) this.#intendedLeds.add(key as SpeedEditor.Led); + else this.#intendedLeds.delete(key as SpeedEditor.Led); + this.setLeds(this.#intendedLeds); + return true; + }, + }); + + jogLeds = new Proxy({} as Record, { + get: (_, key) => { + return this.#intendedJogLeds.has(key as SpeedEditor.JogLed); + }, + set: (_, key, value) => { + if (value) this.#intendedJogLeds.add(key as SpeedEditor.JogLed); + else this.#intendedJogLeds.delete(key as SpeedEditor.JogLed); + this.setJogLeds(this.#intendedJogLeds); + return true; + }, + }); + + get jogMode(): SpeedEditor.JogMode { + return this.#intendedJogMode; + } + + set jogMode(mode: SpeedEditor.JogMode) { + this.setJogMode(mode); + } + + onPress(key: SpeedEditor.Key, listener: () => void): Dispose { + return this.on("keypress", (code) => { + if (key === code) listener(); + }); + } + + onDoublePress(key: SpeedEditor.Key, listener: () => void): Dispose { + const pair = { key, listener }; + this.#doubleKeyEvents.add(pair); + this.#enabled && + this.#enabledStack.use(this.#source.onDoublePress(key, listener)); + return ts.defer(() => { + throw new Error("TODO"); + }); + } + + [Symbol.dispose]() { + this.#stack.dispose(); + } +} + +async function loadConfigs(configDir: string) { + const entries = await fs.readdir(configDir, { withFileTypes: true }); + const modules = entries + .filter((entry) => entry.isFile()) + .filter((entry) => path.extname(entry.name) === ".ts") + .sort((left, right) => left.name.localeCompare(right.name)); + + const definitions: AppDefinition[] = []; + + for (const entry of modules) { + const filePath = path.join(configDir, entry.name); + const moduleUrl = url.pathToFileURL(filePath).href; + let configPromise: Promise | null = null; + const load = () => { + configPromise ??= loadConfig(moduleUrl); + return configPromise; + }; + + const source = await fs.readFile(filePath, "utf8"); + const bundle = readBundleId(source) ?? (await load()).bundle; + definitions.push({ bundle, load }); + } + + return definitions; +} + +export async function runConfigs(dir: string) { + const definitions = await loadConfigs(dir); + + const [mac, speededitor] = await Promise.all([ + Mac.open(), + SpeedEditor.open(), + ]); + if (!speededitor.connected) { + console.warn("Speed Editor is not connected"); + } + speededitor.on('connect', () => { + console.info("Speed Editor connected"); + }) + speededitor.on('disconnect', () => { + console.warn("Speed Editor lost connection"); + }) + + const instances = new Map(); + const pendingInstances = new Map>(); + let currentInstance: AppInstance | null = null; + let switchVersion = 0; + + async function getInstance(bundle: Mac.BundleId): Promise { + const existing = instances.get(bundle); + if (existing) return existing; + + const pending = pendingInstances.get(bundle); + if (pending) return pending; + + const definition = definitions.find((x) => x.bundle === bundle); + if (!definition) return null; + + const next = definition.load().then((config) => { + if (config.bundle !== bundle) { + throw new Error( + `Config bundle mismatch: expected "${bundle}", got "${config.bundle}"`, + ); + } + + const speedEditorProxy = new AppSpeedEditor(speededitor); + const app = new Events(); + config.configure({ + speededitor: speedEditorProxy, + mac, + app, + }); + + const instance = { bundle, speedEditorProxy, app }; + instances.set(bundle, instance); + return instance; + }).finally(() => { + pendingInstances.delete(bundle); + }); + + pendingInstances.set(bundle, next); + return next; + } + + async function switchApp(bundle: Mac.BundleId) { + const version = ++switchVersion; + + if (currentInstance) { + currentInstance.speedEditorProxy.enabled = false; + currentInstance.app.emit("blur"); + currentInstance = null; + } + + const nextInstance = await getInstance(bundle); + if (version !== switchVersion) return; + + currentInstance = nextInstance; + + if (currentInstance) { + currentInstance.speedEditorProxy.enabled = true; + currentInstance.app.emit("focus"); + } + } + + mac.on("app-change", (id) => { + void switchApp(id).catch((error) => { + queueMicrotask(() => { + throw error; + }); + }); + }); + if (mac.currentApp) await switchApp(mac.currentApp); +} + +async function loadConfig(moduleUrl: string): Promise { + const imported = await import(moduleUrl); + const config = imported.default as AppConfig | undefined; + if (!config) { + throw new Error(`Config module ${moduleUrl} has no default export`); + } + return config; +} + +function readBundleId(source: string): Mac.BundleId | null { + const match = source.match(/\bforApp\(\s*(["'`])([^"'`]+)\1/); + return (match?.[2] as Mac.BundleId | undefined) ?? null; +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000000000000000000000000000000000000..5021bdebf1fb7427453ded6e3d5b5f99e2b560a9 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,3 @@ +import { runConfigs } from "./config.ts"; + +await runConfigs("config"); -- 2.54.0