112 lines
3.1 KiB
Markdown
112 lines
3.1 KiB
Markdown
# Soundfonts
|
|
|
|
General MIDI playback via SF2 soundfont files. Native only -- not available in the WASM build.
|
|
|
|
## Setup
|
|
|
|
Drop an `.sf2` file into one of your samples directories. The engine finds and loads it automatically when Cagire starts. Only one soundfont is active at a time.
|
|
|
|
## Playing
|
|
|
|
Use `gm` as the sound source. The `n` parameter selects a program by name or number (0-127):
|
|
|
|
```forth
|
|
gm snd piano n . ;; acoustic piano
|
|
gm snd strings n c4 note . ;; strings playing middle C
|
|
gm snd 0 n e4 note . ;; program 0 (piano) playing E4
|
|
```
|
|
|
|
## Drums
|
|
|
|
Drums live on a separate bank. Use `drums` or `percussion` as the `n` value. Each MIDI note triggers a different instrument:
|
|
|
|
```forth
|
|
gm snd drums n 36 note . ;; kick
|
|
gm snd drums n 38 note . ;; snare
|
|
gm snd drums n 42 note . ;; closed hi-hat
|
|
gm snd percussion n 49 note . ;; crash cymbal
|
|
```
|
|
|
|
## Envelope
|
|
|
|
The soundfont embeds ADSR envelope data per preset. The engine applies it automatically. Override any parameter explicitly:
|
|
|
|
```forth
|
|
gm snd piano n 0.01 attack 0.3 decay .
|
|
gm snd strings n 0.5 attack 2.0 release .
|
|
```
|
|
|
|
If you set `attack`, `decay`, `sustain`, or `release`, your value wins. Unspecified parameters keep the soundfont default.
|
|
|
|
## Effects
|
|
|
|
All standard engine parameters work on GM voices. Filter, distort, spatialize:
|
|
|
|
```forth
|
|
gm snd bass n 800 lpf 0.3 verb .
|
|
gm snd epiano n 0.5 delay 1.5 distort .
|
|
gm snd choir n 0.8 pan 2000 hpf .
|
|
```
|
|
|
|
## Preset Names
|
|
|
|
| # | Name | # | Name | # | Name | # | Name |
|
|
|---|------|---|------|---|------|---|------|
|
|
| 0 | piano | 24 | guitar | 48 | strings | 72 | piccolo |
|
|
| 1 | brightpiano | 25 | steelguitar | 49 | slowstrings | 73 | flute |
|
|
| 4 | epiano | 26 | jazzguitar | 52 | choir | 74 | recorder |
|
|
| 6 | harpsichord | 27 | cleangt | 56 | trumpet | 75 | panflute |
|
|
| 7 | clavinet | 29 | overdrive | 57 | trombone | 79 | whistle |
|
|
| 8 | celesta | 30 | distgt | 58 | tuba | 80 | ocarina |
|
|
| 9 | glockenspiel | 33 | bass | 60 | horn | 81 | lead |
|
|
| 10 | musicbox | 34 | pickbass | 61 | brass | 82 | sawlead |
|
|
| 11 | vibraphone | 35 | fretless | 64 | sopranosax | 89 | pad |
|
|
| 12 | marimba | 36 | slapbass | 65 | altosax | 90 | warmpad |
|
|
| 13 | xylophone | 38 | synthbass | 66 | tenorsax | 91 | polysynth |
|
|
| 14 | bells | 40 | violin | 67 | barisax | 104 | sitar |
|
|
| 16 | organ | 41 | viola | 68 | oboe | 105 | banjo |
|
|
| 19 | churchorgan | 42 | cello | 70 | bassoon | 108 | kalimba |
|
|
| 21 | accordion | 43 | contrabass | 71 | clarinet | 114 | steeldrum |
|
|
| 22 | harmonica | 45 | pizzicato | | | | |
|
|
| | | 46 | harp | | | | |
|
|
| | | 47 | timpani | | | | |
|
|
|
|
Drums are on a separate bank: use `drums` or `percussion` as the `n` value.
|
|
|
|
## Examples
|
|
|
|
A simple GM drum pattern across four steps:
|
|
|
|
```forth
|
|
;; step 1: kick
|
|
gm snd drums n 36 note .
|
|
|
|
;; step 2: closed hat
|
|
gm snd drums n 42 note 0.6 gain .
|
|
|
|
;; step 3: snare
|
|
gm snd drums n 38 note .
|
|
|
|
;; step 4: closed hat
|
|
gm snd drums n 42 note 0.6 gain .
|
|
```
|
|
|
|
Layer piano chords with randomness:
|
|
|
|
```forth
|
|
gm snd piano n
|
|
c4 e4 g4 3 choose note
|
|
0.3 0.8 rand gain
|
|
0.1 0.4 rand verb
|
|
.
|
|
```
|
|
|
|
A bass line with envelope override:
|
|
|
|
```forth
|
|
gm snd bass n
|
|
c2 e2 g2 a2 4 cycle note
|
|
0.01 attack 0.2 decay 0.0 sustain
|
|
.
|
|
```
|