MIDI and controllers¶
Grainsmith Field responds to MIDI in the standalone app. It connects to every MIDI source it can see, including USB and Bluetooth keyboards and CC controllers, and reconnects automatically when you plug or unplug a device.
When you run Field as an AUv3 plugin, the host owns MIDI. Notes and CC arrive through the host's plugin event stream, so the standalone MIDI input, MIDI learn, and controller profiles described here apply to the standalone app only.
Free and Instrument play modes¶
Field has two play modes, set in Settings under Instrument.
- Free is the default. Grains run on their own for as long as the transport is playing. Incoming MIDI notes do not gate the sound.
- Instrument gates the grains with the notes you play. A note-on starts a voice, a note-off releases it, and the amp envelope shapes each note.
Switching from Instrument back to Free sends an all-notes-off so no voice hangs.
Playing notes in Instrument mode¶
Each note plays transposed from the root note. A note plays at note โ root note semitones, so playing the root note itself plays at the original pitch. The root note defaults to C3 (MIDI note 60) and is set with the โ/๏ผ buttons in Settings under Instrument.
While Field is in Instrument mode, the Pitch ribbon down the right edge of the waveform is labeled TRANSPOSE. It offsets the notes you play, on top of the note-to-pitch mapping above.
Amp envelope¶
In Instrument mode, Attack and Release sliders appear in Settings under Instrument. They set the amplitude envelope applied to each played note.
| Control | Range |
|---|---|
| Attack | 2 ms to 2 s |
| Release | 10 ms to 4 s |
Both sliders default to positions near the short end of their range. The Settings screen shows the live value in milliseconds next to each slider.
MIDI learn¶
MIDI learn binds a hardware CC to any dock dial. It works in the standalone app.
- Long-press a dock dial (hold for about half a second). A pulsing amber ring appears around the dial to show it is armed.
- Move the hardware control you want to bind. The first CC that arrives is captured.
The binding is a 7-bit linear mapping over the dial's full 0 to 1 range. Learn mode arms one dial at a time and cancels itself after 2 seconds if no CC arrives. Long-pressing the same dial again cancels an armed learn.
Binding a CC that is already assigned to another parameter moves it to the new parameter, and binding over a parameter that already has a mapping replaces the old one. Your learned mappings are saved and persist across launches.
Managing mappings¶
Settings has a MIDI Learn section (standalone only) that lists every mapping you have made. Each row shows the parameter name and its channel and CC, for example Ch 5 CC 2, with a control to clear that one mapping. When you have no custom mappings the section reads "No custom mappings โ using defaults." A Reset to Defaults control clears all of your mappings at once and returns to the profile's default map.
Your learned mappings always take precedence over the default CC map for the same parameter or the same channel-and-CC.
Controller profiles¶
Settings has a Controller Profile picker (standalone only) with three profiles:
| Profile | Default channel |
|---|---|
| OXI E16 | 5 |
| Roto-Control | 1 |
| MIDI Fighter Twister | 1 |
The factory default is OXI E16. Selecting a profile chooses which default CC map takes top precedence. Your MIDI-learn overrides always apply on top of the selected profile.
Field merges all three built-in maps into its live CC table, so any of the three controllers works whether or not it is the selected profile. The selected profile decides which map wins when two profiles use the same channel and CC, and which profile's Level and push-reset settings are used.
Default CC maps¶
The default maps use 7-bit absolute CC (values 0 to 127), read linearly onto each parameter. Set your controller's encoders to absolute 7-bit mode. Field's 14-bit code path exists but no shipping profile uses it.
OXI E16¶
All encoders on channel 5, 7-bit absolute CC. Encoder-click (push) is on channel 6 and resets the pushed encoder's parameter to its default.
| CC | Parameter |
|---|---|
| 0 | Position |
| 1 | Size |
| 2 | Density |
| 3 | Spread |
| 4 | Speed |
| 5 | Jitter |
| 6 | Pitch |
| 7 | Morph |
| 8 | Pitch Random |
| 9 | Reverse |
| 10 | Wet Mix |
| 11 | Scan Depth |
| 12 | Reverb Mix |
| 13 | Reverb Space |
| 14 | Cutoff |
| 15 | Resonance |
| 16 | Grain Shape |
| 17 | Freeze |
| 18 | Level |
MIDI Fighter Twister¶
Bank 1, all encoders on channel 1, 7-bit absolute CC.
| CC | Parameter |
|---|---|
| 0 | Size |
| 1 | Density |
| 2 | Jitter |
| 3 | Spread |
| 4 | Position |
| 5 | Speed |
| 6 | Pitch |
| 7 | Pitch Random |
| 8 | Reverse |
| 9 | Scan Depth |
| 10 | Wet Mix |
| 11 | Cutoff |
| 12 | Resonance |
| 13 | Reverb Mix |
| 14 | Reverb Space |
| 15 | Morph |
Melbourne Roto-Control¶
The Roto-Control default map and its four buttons are on the Roto-Control page.
Transport and performance buttons¶
Beyond the parameter knobs, a controller can drive four app actions from buttons:
| Action | What it does |
|---|---|
| Play / Stop | Toggles the transport |
| Freeze | Toggles Freeze |
| Grain Shape | Cycles the grain shape Soft โ Round โ Sharp |
| Record | Toggles recording |
A button fires its action once on the press, when the CC crosses from below 64 to 64 or above. A momentary button is the intended mode, and a latching button also works because each press to 127 is a fresh trigger. Of the built-in profiles, only the Roto-Control map ships button bindings; see the Roto-Control page for the CC numbers.
CC feedback to controllers¶
Field echoes parameter changes back out on the mapped CCs, so a controller's LED rings or motorized faders track edits you make on screen. Values are sent at up to 60 Hz, and an unchanged value is not resent.
When a controller connects, it often blasts its current encoder positions. Field opens a 500 ms window on connect during which incoming CC is ignored, so a controller's startup burst does not overwrite your current sound.