Files
Cagire/docs/midi_output.md
Raphaël Forment a0585b0814
Some checks failed
Deploy Website / deploy (push) Failing after 4m45s
MIDI Documentation and optional mouse event support
2026-02-01 00:51:56 +01:00

93 lines
2.3 KiB
Markdown

# MIDI Output
Send MIDI messages using the `m.` word. Build up parameters on the stack, then emit. The system determines message type based on which parameters you set.
## Note Messages
The default message type is a note. Set `note` and `velocity`, then emit:
```forth
60 note 100 velocity m. ;; middle C, velocity 100
c4 note 80 velocity m. ;; same pitch, lower velocity
```
| Parameter | Stack | Range | Description |
|-----------|-------|-------|-------------|
| `note` | `(n --)` | 0-127 | MIDI note number |
| `velocity` | `(n --)` | 0-127 | Note velocity |
| `chan` | `(n --)` | 1-16 | MIDI channel |
| `dur` | `(f --)` | steps | Note duration |
| `dev` | `(n --)` | 0-3 | Output device slot |
Duration (`dur`) is measured in steps. If not set, the note plays until the next step. Channel defaults to `1`, device defaults to `0`.
## Control Change
Set both `ccnum` (controller number) and `ccout` (value) to send a CC message:
```forth
74 ccnum 64 ccout m. ;; CC 74, value 64
1 ccnum 127 ccout m. ;; mod wheel full
```
| Parameter | Stack | Range | Description |
|-----------|-------|-------|-------------|
| `ccnum` | `(n --)` | 0-127 | Controller number |
| `ccout` | `(n --)` | 0-127 | Controller value |
## Pitch Bend
Set `bend` to send pitch bend. The range is `-1.0` (full down) to `1.0` (full up), with `0.0` as center:
```forth
0.5 bend m. ;; bend up halfway
-1.0 bend m. ;; full bend down
```
## Channel Pressure
Set `pressure` to send channel aftertouch:
```forth
64 pressure m. ;; medium pressure
```
## Program Change
Set `program` to send a program change message:
```forth
0 program m. ;; select program 0
127 program m. ;; select program 127
```
## Message Priority
When multiple message types are set, only one is sent per emit. Priority order:
1. Control Change (if `ccnum` AND `ccout` set)
2. Pitch Bend
3. Channel Pressure
4. Program Change
5. Note (default)
To send multiple message types, use multiple emits:
```forth
74 ccnum 100 ccout m. ;; CC first
60 note 100 velocity m. ;; then note
```
## Real-Time Messages
Transport and clock messages for external synchronization:
| Word | Description |
|------|-------------|
| `mclock` | Send MIDI clock pulse |
| `mstart` | Send MIDI start |
| `mstop` | Send MIDI stop |
| `mcont` | Send MIDI continue |
These ignore all parameters and send immediately.