{"id":18607395,"url":"https://github.com/joepvanlier/hackey-trackey","last_synced_at":"2025-08-13T11:33:20.127Z","repository":{"id":39876628,"uuid":"117342328","full_name":"JoepVanlier/Hackey-Trackey","owner":"JoepVanlier","description":"A LUA tracker plugin for REAPER 5.x and up. Designed to mimick the pattern editor in Jeskola Buzz.","archived":false,"fork":false,"pushed_at":"2024-06-16T16:20:52.000Z","size":4963,"stargazers_count":132,"open_issues_count":13,"forks_count":10,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-12-07T15:35:54.512Z","etag":null,"topics":["reaper","reaper-plugin","tracker"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JoepVanlier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-13T12:37:30.000Z","updated_at":"2024-11-29T01:27:56.000Z","dependencies_parsed_at":"2024-06-16T17:30:02.534Z","dependency_job_id":"db55b428-35ab-4da2-9370-cd99daffdf26","html_url":"https://github.com/JoepVanlier/Hackey-Trackey","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoepVanlier%2FHackey-Trackey","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoepVanlier%2FHackey-Trackey/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoepVanlier%2FHackey-Trackey/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoepVanlier%2FHackey-Trackey/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JoepVanlier","download_url":"https://codeload.github.com/JoepVanlier/Hackey-Trackey/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229759864,"owners_count":18119874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["reaper","reaper-plugin","tracker"],"created_at":"2024-11-07T02:29:18.339Z","updated_at":"2024-12-14T22:03:54.262Z","avatar_url":"https://github.com/JoepVanlier.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hackey-Trackey\r\n## What is it?\r\nA lightweight tracker plugin for REAPER 5.x and up. Hackey-Trackey is a small \r\ntracker for visualizing and editing MIDI data within REAPER. Originally developed \r\nto mimick the pattern editor of Jeskola Buzz, this tracker is meant to enable \r\nMIDI note entry and effect automation in a tracked manner. You can see it in \r\naction here:\r\n\r\n![Hackey Trackey in Action](https://j.gifs.com/gLyymG.gif)\r\n\r\n## What is it not?\r\nWhile the latest version of Hackey-Trackey does ship with a basic sampler,\r\nit is not a full tracker. Have a look at ReViSiT or linking a dedicated \r\ntracker program such as Renoise to REAPER if this is what you seek.\r\n\r\n## Small disclaimer\r\nHackey Trackey is still actively being developed. Not all planned features are \r\nfinished yet and there may stil be bugs. Be sure to check back in the future \r\nif you want to be kept up to date with the latest features. Basic tracking \r\nfunctionality works (note entry, FX sequencing) and directly updates MIDI \r\nand automation data.\r\n\r\n## Installation\r\n### With Reapack\r\nAdd it in your Reapack repository list: `https://raw.githubusercontent.com/joepvanlier/Hackey-Trackey/master/index.xml`.\r\nEventually, the plan is to make the tracker part of the reapack scripts repository, so that this separate repo is no longer necessary.\r\n### Without\r\n- Press `?` or select `Actions \u003e Action List`\r\n- click the ReaScript: `Load` button\r\n\r\n## How do I use it?\r\nSelect a MIDI item and start the script. Note that scripts can be bound to \r\nshortcut keys, which I'd recommend if you're going to be using it. This short \r\ntutorial assumes the default keymapping, but others are available in the options \r\nmenu. In the default layout, options can be brought up with F11 and a small help \r\nfile indicating all the options with F1 (same in all layouts).\r\n\r\n![Using Hackey Trackey](https://i.imgur.com/KzfAm1T.png)\r\n\r\n### What MIDI channel is used?\r\nThe plugin remaps your MIDI data to different channels. New MIDI \r\ndata that was not tracked has to come in on channel 1. Hackey trackey \r\nrecognises notes which have not yet been assigned to a column by their \r\nchannel. Note also that by default the tracker remaps everything to MIDI \r\nchannel 1. The output channel (OUT) can be changed with the F1 (down) \r\nand F2 (up) keys in the default layout or by clicking the OUT field  \r\nand dragging the mouse up or down. Setting the output channel to zero \r\n(displays as C) maps each column to a separate MIDI channel. Note that \r\ncolumn one goes to MIDI channel 2 and so forth.\r\n\r\n![Pattern info](https://i.imgur.com/bypeHXu.png)\r\n\r\n### Important use notes\r\nIt is recommended to change the size of MIDI items from within Hackey-Trackey \r\nrather than by dragging them in REAPER's sequencer. You can do this by clicking \r\nthe pattern length indicator in the bottom left and entering a new length. \r\nThe reason for this is that HT will create new automation objects if it doesn't \r\nfind ones of appropriate length that are correctly aligned. If you wish to \r\nedit the MIDI items in REAPER, then close the instance of Hackey Trackey, \r\nresize the item and glue the item before reopening HT.\r\n\r\n#### Mouse operation\r\nHackey Trackey is designed to mostly be used via keyboard shortcuts. That said, \r\nsome mouse interaction has recently been added. You can click and drag \r\nResolution (Res), Octave (Oct), Advance (Adv), Envelope (Env) and Out channel \r\nto set these values. Note that since the resolution or ticks per beat can be a \r\ndestructive operation, this one needs to be confirmed by clicking, dragging and \r\nthen confirming the new selection with the outer mouse button while still holding \r\nthe left mouse button.\r\n\r\nRecording status can also be toggled by clicking it, and the pattern size can be \r\nchanged by clicking the pattern size. Removing the current size and confirming with \r\nreturn.\r\n\r\n### Can I automate parameters?\r\nYes! Parameters for which envelopes are active (see automation panel in image \r\nbelow), will automatically show up in the tracker. The tracker will store the \r\ntracked points in an automation take. Ctrl + Shift + Up/Down changes how the \r\nvalues in the column will be interpolated.\r\n![Using FX](https://i.imgur.com/pZ0TV7k.png)\r\n\r\n### Can I send MIDI CC commands?\r\nYes! There are two ways to work with CC commands. The first is a single column \r\nmode (which is good if you typically only use a single command or use commands) \r\nsparingly. Or multicolumn mode.\r\n\r\n#### Single column mode:\r\nThis is the default. The first two columns denote the CC command, the last two \r\nthe value that's being sent.\r\n\r\n#### Multi-column mode:\r\nThis is activated when expanding the mod column (expand by going to the CC column\r\nand pressing CTRL \\+ \\+). Now, every CC command type gets its own channel. You can \r\nremove a column with CTRL \\+ Shift \\+ \\-, which will delete all the CC data in that \r\ncolumn as well as remove the column. You can add a new column with CTRL \\+ Shift \\+ \\+\r\nafter which you have to enter a numeric value and hit RETURN. Custom names can be \r\nadded in the CC column.\r\nHint: If you want this to be the default mode, then edit the script and change \r\ntracker.modMode to 1.\r\n\r\n### The CC commands don't interpolate?\r\nYes. They do not and this is considered out of scope for the tracker. If you wish \r\nto interpolate CC commands, I suggest you use ReaControlMIDI to map the CC commands \r\nto an FX envelope. These you can then use in the same way as the parameters.\r\n\r\n### I do not hear the notes I play? Can I change it such that I do?\r\nIf you want to hear notes you play, remember to arm the tracker by hitting CTRL + R.\r\nNote however, that this alters the recording status of your project. If you wish to \r\nalways have HT enable recording, then enable \"Always Enable Recording\" in the options \r\nmenu.\r\n\r\n### The default theme is not my style. Are there any others?\r\nYes, there are various themes to choose from. See the options menu (F11).\r\n![Themes](https://i.imgur.com/wxnbQUV.png)\r\n\r\nThe latest theme is Sink, but it relies on installing a font first which you \r\ncan get here: https://www.dafont.com/bebas.font\r\n![Sink](https://imgur.com/mzLQshj.png)\r\n\r\n### Can I fix the indicator centrally, like classic Commodore Amiga trackers?\r\nYes. If you prefer that the current position is always in the center of the screen,\r\nsimilar to classic Amiga trackers such as OctaMED, enable \"Fix indicator position\r\nin view\" in the options menu.\r\n\r\nThis mode is best used with \"Bigger play indicator\" and \"Follow song\" enabled.\r\n\r\nIt doesn't have to be positioned centrally either. You may position the indicator\r\nwherever you like by holding down CTRL + ALT + LMB in the row indicator column.\r\n![Fix indicator in view](https://imgur.com/Ok4HG3H.gif)\r\n\r\n### Can I do step sequencing from my MIDI device?\r\nYes you can! Enable track from MIDI in the options. This will inject a JSFX on\r\nthe track in question which will track the incoming MIDI and send it to HT.\r\nNote that this will disable any playback preview within Hackey Trackey however,\r\nas that would otherwise create an infinite loop.\r\n\r\n### What is advance to next note mode?\r\nAdvance to next note mode is a mode in which the cursor always advances to the\r\nnext note in on the column you're working in, rather than a fixed number of\r\nsteps. When you get to the end of the pattern, it loops back to the start. This\r\nallows you to quickly audition different potential melodies for a particular\r\nrhythm. You can quickly toggle it with CTRL + T. \r\n\r\nNote that an additional feature of advance to next note mode is that if you\r\nselect a region on the pattern, the method will constrain the advance method to\r\nstay within that region.\r\n\r\n### Can I change the pattern length from the tracker?\r\nYes. Click the pattern length indicator in the bottom left of the tracker. You can \r\nenter a new value here.\r\n\r\n### All my notes sound very staccato? What's going on?\r\nBy default, tracked notes do not overlap. However, for some purposes, overlap may be\r\ndesirable (some monophonic VSTs interpret this as glide/legato mode). For this, one can \r\nuse the column L. Setting 1 in a row here, means that this note will be glided into. \r\nThis is implemented by simpliy stretching the previous note. Legato is only applied \r\nto channel 1 in the tracker. Note that performing a legato from and to the same note \r\nwill result in the second note not displaying in the tracker. This is not a bug, but a \r\nworkaround to fix note OFF issues with the resulting MIDI item.\r\n\r\n### Can I rename patterns?\r\nYes, simply hit CTRL + N and type a new name followed by ENTER.\r\n\r\n### How does navigation work?\r\nYou can move left to right on a single track with CTRL + Left/Right.\r\n\r\n### I need a higher resolution?\r\nYou can edit the row resolution by entering CTRL + ALT + Up / Down. You will then notice \r\nthat the resolution bit in the description bar becomes red. This means it is not committed.\r\nIf you then hit commit (Ctrl + Alt + ENTER), the resolution will change.\r\n\r\n### Can I use note delays?\r\nYes, but there is a catch. For note delays to work reliably, your MIDI settings have to be \r\nset in such a way that each row is a multiple of 256 times the resolution MIDI pulses long. \r\nOtherwise, roundoff errors will occur which cause values or notes to shift as you enter them.\r\n\r\nYou can set these in Options =\u003e Preferences =\u003e Media/MIDI =\u003e Ticks per quarter note for \r\nnew MIDI items. The default here is 960, but 3840 is recommended for Hackey Trackey (as \r\nit will work well for 3/4, 4/4, 5/4 and is divisible by 256). Note that if you want to\r\nwork in 7/4 you would need a different factor again (but HT will warn you about this).\r\nOnce configured correctly, you can open the note delay column for any note by simply \r\nhitting CTRL + \\+ for that column.\r\n\r\n### Can I enter note lengths?\r\nYes you can. Hit CTRL \\+ \\+ twice on a note column to bring up the note length panel. This \r\nwill allow you to edit the duration of the last tick of the note at a subtick level. The \r\nsame caveats as with note delay apply.\r\n\r\n### What is this Harmony Helper thing?\r\nRelease 1.30 saw the addition of the Harmony Helper, this is an extension of Hackey Trackey \r\nto facilitate easier use of melodic scales. You can toggle the Harmony Helper by pressing F9.\r\n\r\nThe Harmony helper presents you with a selection of root notes and modes. You can pick your \r\ndesired musical key by selecting the root note (top row) and scale (left column). After \r\nselecting a key, you are presented with chords that are present in that key.\r\n\r\nIf the track is armed (denoted by the red [REC] label), it will play the chord you click. \r\nTo arm the track press CTRL \\+ R.\r\n\r\nTo insert a chord from the harmony helper, press control while clicking the chord. Inversions \r\ncan be obtained with other modifiers. Holding ALT will trigger an inversion of the first note, \r\nwhile SHIFT inverts the second.\r\n\r\nOnce a key is selected and the harmony helper is active, notes will transpose in a key-aware \r\nmanner when transposed. Diatonic notes will map to diatonic notes when transposed, while \r\naccidentals will remain accidentals (as far as this is possible without an awareness which \r\nnotes are flat or sharp).\r\n\r\nTo change the root of the key of a selection, simply select the notes and invoke \r\nCTRL \\+ ALT \\+ SHIFT \\+ + or - for transposition up and down respectively. This will also \r\nupdate the root note in the harmony helper.\r\n\r\n![Harmony Helper](https://i.imgur.com/p2MGQTB.png)\r\n\r\n### Is this repository reapack compatible?\r\nYes. Just add: https://raw.githubusercontent.com/joepvanlier/Hackey-Trackey/master/index.xml\r\n\r\n# Sample playback (Pre-alpha!)\r\n\r\nThe latest version of Hackey Trackey ships with a basic sample playback module \r\nin the form of a JSFX that can be added to a track to achieve basic sample playback.\r\n\r\nTo use it, make sure you update to the latest version on reapack and then search your\r\neffects list for `Hackey Trackey Sample Playback Module`. Putting this on a track \r\nwill convert that track into a \"sampler\" track. When you open the tracker on a MIDI\r\nitem on a track that has this module added as an effect, Hackey Trackey will open in \r\na slightly different mode to facilitate this mode.\r\n\r\n![image](https://user-images.githubusercontent.com/19836026/119561157-200e6580-bda5-11eb-839b-0ba06eefbf21.png)\r\n\r\nYou will notice that there are three columns per channel now. The first is volume, \r\nthe second is effect and the third corresponds to the value for that effect. Instead \r\nof loudness, the velocity column now encodes the sample selection (as it would in a \r\ntracker).\r\n\r\nUnfortunately, some concessions had to be made due to limitations in the MIDI \r\nformat (127 values instead of 255).\r\n\r\nThe effects available are the following:\r\n\r\n```\r\n  01 - Portamento up\r\n  02 - Portamento down\r\n    Note that the portamento's behave different from Protracker. In PT you directly\r\n    perform the portamento based on the period of the signal. Portamento is updated\r\n    every N times per row (ticks).\r\n    Here, the portamento slides continuously and the amount is specified in \r\n    eigth semitones. This means that 08 is 1 semitone. 10 is 2, etc.\r\n    00 continues the last portamento.\r\n  03 - Glide\r\n    Glide to note. Glide speed is specified in 1/16th notes.\r\n    00 Continues a previous glide.\r\n  04 - Vibrato\r\n    X is pitch depth (value from 0 to 7). They are given in seventh semitones.\r\n    Y is speed (value from 0 to F).\r\n      Continue, 128, 64, 32, 24, 16, 12, 8, 6, 5, 4, 3, 2, 1, 0.25, 0.125\r\n    0 continues the previous value.\r\n  08 - Panning\r\n    Panning.\r\n  09 - Set offset\r\n    Unlike the classic Protracker, this sets offset as fraction of the sample length.\r\n    Since 7F (127) is the maximum in MIDI; 40 is the middle of the sample, 20 1/4th etc.\r\n  0A - Arpeggiator\r\n    Arpeggiate. X and Y are note offsets in semitones. 0 continues previous value.\r\n  0B - Retrigger\r\n    Retrigger note.\r\n    X - Volume reduction per trigger\r\n    Y - Retrigger count\r\n  0C - Sample probability\r\n  60 - Reverse\r\n    Reverses playhead if effect value is 00. Note that if this effect is applied on a \r\n    note start, it plays the sample from the end. If the effect is started from anywhere \r\n    else, it will simply reverse the playhead. When the effect is used with 01, hackey \r\n    tracker playback will return to forward playing.\r\n```\r\n\r\nLoading samples into the hackey trackey playback module can be done in two ways. They \r\ncan either be dragged from the media explorer directly (which will open them in their \r\noriginal sample rate) -or- you can import them from the timeline (in which case they \r\nwill be resampled to 48 kHz). For the latter, find the action named \r\n\"hackey_trackey_load_sample.lua\" in your reaper actions list and bind it to a shortcut\r\nof your choosing. Now, when hackey trackey sampler is open, select a pad to load the \r\nsample in, and press your shortcut. It should now appear into the Hackey Trackey\r\nsample module.\r\n\r\n![image](https://user-images.githubusercontent.com/19836026/119562997-4a612280-bda7-11eb-9d6f-94d9946ad841.png)\r\n\r\nThe sampler module also comes with a small sample editor. It allows you to do some \r\nbasic things like zoom, copy/cut/paste, set loops / remove loops and reverse sections.\r\n\r\nIn the sampler section, you also see a little control for setting the reference pitch \r\nfor a particular sample.\r\n\r\n### Options\r\nHackey-Trackey has a few options to allow for some customization in workflow. Pressing F11 \r\nopens the options dialog, where themes and keymappings can be chosen. Additionally, the following \r\noptions can be checked or unchecked.\r\n\r\n#### Auto Resize\r\nAuto resize determines whether Hackey Trackey should resize whenever a new pattern is \r\nselected. The resizing in this case refers to the height of Hackey Trackey.\r\n\r\n#### Follow Selection\r\nWhen this is enabled, Hackey Trackey will always load the pattern currently selected in \r\nthe sequencer. Note that this means that you cannot open multiple Hackey Trackey's anymore \r\nto look at different patterns simultaneously.\r\n\r\n#### Info Sticks to Bottom\r\nThis makes the info at the bottom of the pattern remain fixed at the bottom, even when the \r\npattern is shorter than the window. Alternatively, it will be at the end of the pattern.\r\n\r\n#### Adjust Column Count to Window\r\nThis will automatically add columns to be visible whenever Hackey Trackey is resized.\r\n\r\n#### Always Enable Recording\r\nThis will make Hackey Trackey always enable recording when opened. Note however that this \r\nchanges the recording status of your project and is therefore disabled by default.\r\n\r\n#### Follow Song\r\nCTRL + F will toggle Hackey Trackey to follow the song position. It will attempt to find \r\nMIDI items at the current position on the current track and update the view so that you \r\nsee them. Note that the status of this can be seen next to the [Rec] button.\r\n\r\n#### CRT mode\r\nEnable cheesy CRT effect. Works best with Hacker theme.\r\n\r\n## Special keys\r\nWhen you first download the script, it will initialize using the default keybindings (which \r\nare listed here below for convenience). They are optimized for a QWERTY layout. You can set \r\nwhich key layout to use in the options panel (opened with F11 or CTRL + o in the default) \r\nkey set.\r\n\r\nThe keybindings in the default set are. Note that you can always look these up in the tracker \r\nby pressing F1.\r\n\r\n| Key                                   | Action                                                    |\r\n|:--------------------------------------|:----------------------------------------------------------|\r\n| Any key on the virtual keyboard       | Enter a note and advance                                  |\r\n| Shift + Key on the virtual keyboard   | Enter a note go to the next column                        |\r\n| Arrow keys                            | Navigate                                                  |\r\n| Backspace                             | Delete item and shift rows up                             |\r\n| Del or .                              | Delete item                                               |\r\n| Insert                                | Shift all items down by one                               |\r\n| \\-                                    | Place note OFF                                            |\r\n| CTRL + ALT + ENTER                    | Start play at cursor position                             |\r\n| Space                                 | Start/Stop                                                |\r\n| CTRL \\+ Z                             | Undo                                                      |\r\n| CTRL \\+ SHIFT \\+ Z                    | Redo                                                      |\r\n| CTRL \\+ B                             | Start selection block                                     |\r\n| CTRL \\+ E                             | End selection block                                       |\r\n| SHIFT \\+ Arrow keys                   | Make selection                                            |\r\n| SHIFT \\+ Del                          | Delete block                                              |\r\n| CTRL \\+ I                             | Interpolate block                                         |\r\n| CTRL \\+ X                             | Cut                                                       |\r\n| CTRL \\+ V                             | Paste                                                     |\r\n| CTRL \\+ C                             | Copy                                                      |\r\n| Shift \\+ Numpad \\+                    | Shift selection up \\(e.g. C\\-1 \\-\u003e C\\#1\\)                 |\r\n| Shift \\+ Numpad \\-                    | Shift selection down                                      |\r\n| CTRL \\+ /\\\\                           | Shift current octave up                                   |\r\n| CTRL \\+ \\\\/                           | Shift current octave down                                 |\r\n| SHIFT \\+ CTRL \\+ /\\\\                  | Switch envelope mode \\(FX automation\\)                    |\r\n| SHIFT \\+ CTRL \\+ \\\\/                  | Switch envelope mode \\(FX automation\\)                    |\r\n| SHIFT \\+ ALT \\+ /\\\\                   | Increase row resolution                                   |\r\n| SHIFT \\+ ALT \\+ \\\\/                   | Decrease row resolution                                   |\r\n| SHIFT \\+ ALT + Enter                  | Commit row resolution (WARNING: Destructive)              |\r\n| F1                                    | Help                                                      |\r\n| F2                                    | Decrease output channel                                   |\r\n| F3                                    | Increase output channel                                   |\r\n| F4                                    | Decrease advance amount                                   |\r\n| F5                                    | Increase advance amount                                   |\r\n| F8                                    | Stop playing                                              |\r\n| F10                                   | Show / hide note names                                    |\r\n| F11                                   | Options screen (theme etc)                                |\r\n| F12                                   | MIDI Panic (stop all notes)                               |\r\n| CTRL \\+ L                             | Set loop to pattern bounds                                |\r\n| CTRL \\+ Q                             | Set loop start before current row                         |\r\n| CTRL \\+ W                             | Set loop end after current row                            |\r\n| CTRL \\+ -\u003e                            | Next MIDI item on track                                   |\r\n| CTRL \\+ \u003c-                            | Previous MIDI item on track                               |\r\n| CTRL \\+ SHIFT \\+ -\u003e                   | Next track                                                |\r\n| CTRL \\+ SHIFT \\+ \u003c-                   | Previous track                                            |\r\n| CTRL \\+ D                             | Duplicate MIDI item                                       |\r\n| CTRL \\+ N                             | Rename MIDI Item                                          |\r\n| CTRL \\+ R                             | Arm (plays notes)                                         |\r\n| CTRL \\+ \\+/\\-                         | Enable/disable advanced options for this column           |\r\n| CTRL \\+ Shift \\+ \\+/\\-                | Add CC column (only available in advanced CC mode)        |\r\n| CTRL \\+ Shift \\+ A/P                  | Per channel CC or PC (only available in advanced mode)    |\r\n| CTRL \\+ Shift \\+ Click row indicator  | Change how rows are highlighted (for different metres)    |\r\n| CTRL \\+ S                             | Toggle column solo                                        |\r\n| CTRL \\+ M                             | Toggle column mute                                        |\r\n| CTRL \\+ T                             | Toggle advance to next note mode                          |\r\n|                                       |                                                           |\r\n| Harmony Helper keys                   |                                                           |\r\n| F9                                    | Open harmony helper                                       |\r\n| CTRL + Click chord                    | Insert chord at current position                          |\r\n| ALT + Click chord                     | Invert first note of chord                                |\r\n| SHIFT + Click chord                   | Invert second note of chord                               |\r\n| Shift \\+ CTRL \\+ ALT \\+ Numpad \\+     | Shift root note up \\(e.g. C\\-1 \\-\u003e C\\#1\\)                 |\r\n| Shift \\+ CTRL \\+ ALT \\+ Numpad \\-     | Shift root note down                                      |\r\n\r\n## Custom keybindings\r\nIf these keys do not suffice for your purposes, you can add custom keybindings in a file \r\nwhich was created on disk the first time you loaded the tracker. This file can be found in \r\nthe folder where Hackey Trackey was installed. If installed via Reapack, this will be:\r\n\r\n%APPDATA%\\reaper\\scripts\\Tracker tools\\tracker\\userkeys.lua (Windows)\r\n$HOME/Library/Application Support/REAPER/Scripts (Mac OS X)\r\n\r\nIf you wish to know what keystroke particular key has, set printKeys to 1 and start typing. \r\nNote that control modifies keystroke values.\r\n\r\nAlternatively, you could also just edit the script and edit the keys table, but future updates \r\nof the script, would then overwrite your new keys.\r\n\r\n## Feature requests\r\nFeature requests are always welcome, preferably with an idea of how to achieve it \r\nwith the [Reaper API](https://www.reaper.fm/sdk/reascript/reascripthelp.html#l). \r\nIf you've implemented a feature yourself and want it added to the trunk, submit a \r\npull requests. If possible, try and make sure that the pull request is up to date \r\nwith the latest version. I will do my best to review and incorporate these.\r\n\r\n## How does it work?\r\nHackey trackey maps already existing MIDI data to a tracked format and allows \r\nediting of such data in a tracker-based manner. If the MIDI data was \r\nentered via another method than Hackey Trackey, the default behaviour is to \r\nmap the notes to non-overlapping channels. Once this is done, the channels for \r\nthe MIDI data are remapped such that the column in which a note appears is \r\nstable from that point on. Note that if your instruments use the MIDI channel \r\ninformation for specific purposes then this plugin is not useful to you. Note \r\nthat depending on what you are doing, the plugin may also add text events to \r\nyour MIDI data to keep track of information Hackey Trackey needs to preserve \r\nthe tracked layout.\r\n\r\nThe plugin uses the MIDI note channel property to store which column a note \r\nis in. OFF note termination symbols not associated with a normal note end \r\nand legato symbols are stored in text (OFF+channel and LEG respectively).\r\n\r\nBecause the plugin remaps the channel, non-tracker input should be created with \r\nchannel 0. The plugin remaps data in channel 0 to MIDI channel 1-16, automatically\r\nassigning new incoming notes to a column where enough room is available. Notes in \r\nchannel 1-16 are assigned first, to keep anything that was made in the tracker \r\nstable.\r\n\r\nThe location of the notes in the tracker view will be stable as long as no data \r\nis entered into MIDI channels other than zero via the piano roll or other methods.\r\n\r\nBecause typically, it is preferred to have MIDI data go to a specific out channel, \r\nthe plugin optionally maps all the MIDI data to a specific channel via the out-channel \r\nproperty.\r\n\r\n## Issues/Limitations\r\nThere are some things which are unfortunately not possible as far as I am aware.\r\nVoice stealing when placing overlapping tracked patterns is one of them. In Jeskola \r\nBuzz it was possible to play different patterns on the same row in the sequencer. \r\nThis would cause notes that came from one pattern to stop notes coming from another \r\npattern. This adaptive merging is not possible in this tracker since the \r\ndifferent tracker instances are unaware of each-other's existence and overlapping \r\nMIDI elements act independently.\r\n\r\nThere is a second annoyance that comes with this, which is that for notes to be \r\nheld over a pattern, they must be restarted at the start of the new pattern. The \r\ntracker has no way of seeing what notes may still be playing at the end of previous\r\nMIDI items. It may be possible to find a workaround for this in the future by \r\nscanning the timeline for previous MIDI items and adding such notes automatically.\r\n\r\nVelocities can only be entered at a note start. Whereas in a tracker, every row can \r\nhave its own velocity (modulation the notes velocity over time), it is not possible \r\nto assign multiple velocities to a single MIDI note. By default, when entering a \r\nvelocity in a new line, the last MIDI note on that tracked channel will be copied to \r\nmimick the same end behaviour.\r\n\r\nNote that when using the legato mode, it is no longer possible to have the same note \r\nbe repeated on channel 1. Doing so would cause problems when playing the MIDI. Hence  \r\n1 D-2  \r\n1 D-2  \r\nwould be merged into one single MIDI note. I have not found a good workaround for this \r\nso far, but if you have a good idea, please contact me.\r\n\r\n### Features to be investigated whether they are feasible/reasonable\r\n- Cutting/Copying to MIDI editor clipboard.\r\n- Adding HT to the MIDI menu via a configuration script.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoepvanlier%2Fhackey-trackey","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoepvanlier%2Fhackey-trackey","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoepvanlier%2Fhackey-trackey/lists"}