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 Binary files /dev/null and b/docs/speed-editor.jpg differ diff --git a/examples/event-listener.ts b/examples/event-listener.ts new file mode 100644 index 0000000000000000000000000000000000000000..fec0c4218388a490abd72679798b188e8665acbb --- /dev/null +++ b/examples/event-listener.ts @@ -0,0 +1,24 @@ +import { Mac } from "../src/Mac.ts"; +import { SpeedEditor } from "../src/SpeedEditor.ts"; + +const editor = await SpeedEditor.open(); +const mac = await Mac.open(); + +editor.on("jog", (ev) => { + 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");