Skip to content

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.

  1. Long-press a dock dial (hold for about half a second). A pulsing amber ring appears around the dial to show it is armed.
  2. 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.