This is a collection of .m8i
MIDI instrument files to use with the Yamaha
QY70. It should also work reasonably well with the Yamaha QY100 and
probably any synthesizer that implements XG level 1.
It includes:
- All 538 instruments in the QY70 List Book, pre-configured with common
CCx
FX - 3 new M8-specific utility "mix-in" instruments with supplemental
CCx
―including RPNs & NRPNs - A copy of each instrument for all 16 MIDI channels, as a multi-timbral safety feature
This is pack v2.0.0
, tested
on M8 firmware 3.0.3.
This instrument pack was heavily inspired by pselodux's trailblazing pack of all 470 "normal voice" QY70 instruments for the M8 v1 firmware (:trophy:). Although this pack was constructed separately and differently, using pelodux's original instruments informed so many of this pack's decisions it should be considered v1.0.0.
QY70/
├── ch01/
│ ├── BASS/
│ │ ├── AcidBass.m8i
│ │ …
│ │ └── X WireBa.m8i
│ ├── BRASS/
│ ├── +DRUMKITS/
│ ├── FX/
│ ├── GUITAR/
│ ├── ORCH/
│ ├── ORGAN/
│ ├── PERC/
│ ├── PERC-CHR/
│ ├── PIANO/
│ ├── PIPE/
│ ├── REED/
│ ├── +SFX/
│ ├── +SFXKITS/
│ ├── STRINGS/
│ ├── SYNTH-FX/
│ ├── SYNTH-LD/
│ ├── SYNTH-PAD/
│ ├── WORLD/
│ └── _UTIL/
├── ch02/
…
├── ch16/
└── README.md
At the top level, there are chXX/
folders for MIDI channels 1–16.
Each contains its own copy of:
- 473
.m8i
files for the QY70's built-in "Normal Voice" instruments- Arranged in subfolders based on the categories in the QY70 List Book
- Send Bank LSB & Program Change messages on MIDI channel
chXX
- 10 standardized MIDI
CCx
fx
- 45
.m8i
files for the QY70's built-in "SFX Voice" instruments (+SFX/
) - 18
.m8i
files for the QY70's built-in "Drum Voice" Instruments (XG drumkits) (+DRUMKITS/
) - 2
.m8i
files for the QY70's built-in SFX Drum Voice Instruments (SFXkits) (+SFXKITS/
) - 3
.m8i
files for supplemental (CC-only) mix-in utility instruments (_UTIL/
)- Send CCs on MIDI channel
chXX
, but don't change the program or bank - Provide supplementary
CCx
fx, including:- Switches & pedals (including all three portamento parameters)
- RPNs/NRPNs
- MIDI channel mode messages (ex: "All Notes Off")
- Send CCs on MIDI channel
The full XG "Normal Voice" list is documented on pages 2–3 of the QY70 List Book.
Each normal voice instrument provides a standardized set of 10 "common" CCs:
FX | CC | Purpose | Notes |
---|---|---|---|
CCA | CC01 | Mod Wheel | |
CCB | CC11 | Expression | |
CCC | CC10 | Panpot | |
CCD | CC05 | Portamento time | |
CCE | CC65 | Portamento on/off | 0x00-0x3F: Off 0x40-0x7F: On |
CCF | CC91 | Reverb Send | |
CCG | CC93 | Chorus Send | |
CCH | CC94 | Variation Send | Only when Connection = 1 (System) |
CCI | CC74 | Filter Cutoff | 0x00: -64 0x40: 0 0x7F: +63 |
CCJ | CC71 | Filter Resonance | 0x00: -64 0x40: 0 0x7F: +63 |
Note that the filter CCs (CCI
) and (CCJ
) are bipolar and default to center
at 0x40
.
By default, XG "Variation send" (CCH
) effect is delay. It can be set
to different effects (distortion, 3-band EQ, etc) directly on the device or
via Sysex. There is a full list of possible variation effects on page 9 of
the QY70 List Book.
XG patch name trivia
- Instrument with names that begin with "
S.
" (S.SlwStr
), or begin or end withSt
(StBrsSec
,MidTGtSt
) are stereo. - Instrument names that end with a capital "
K
" (ElGrPnoK
) use "Key Scale Panning"―lower keys are panned left and higher keys are panned right. - Instrument names followed by a plus (
+
) on the QY70 display are non-GM variations
Note that the M8 file browser displays instrument file names in upper case.
You can view the true mixed-case XG instrument names from the instrument
screen (after loading the .m8i
file) or by viewing the .m8i
files from an
external file browser that displays mixed-case names.
SFX voices work almost the same as normal voices, except they use a bank select
MSB of 0x40
"common" CCs.
The full XG "SFX Voice" list is documented on the right side of page 3 in the QY70 List Book.
FX | CC | Purpose | Notes |
---|---|---|---|
CCA | CC01 | Mod Wheel | |
CCB | CC11 | Expression | |
CCC | CC10 | Panpot | |
CCD | CC00 | Bank Select MSB | Default value sends bank MSB each hit |
CCE | CC32 | Bank Select LSB | Can be used to contradict BANK value |
CCF | CC91 | Reverb Send | |
CCG | CC93 | Chorus Send | |
CCH | CC94 | Variation Send | Only when Connection = 1 (System) |
CCI | CC74 | Filter Cutoff | 0x00: -64 0x40: 0 0x7F: +63 |
CCJ | CC71 | Filter Resonance | 0x00: -64 0x40: 0 0x7F: +63 |
SFX voice instrument use the same CCs as normal voice instruments, except for
CCD
(CC00/Bank Select MSB) and CCE
(CC32/Bank Select LSB).
The default value CCD
is required because the M8 MIDI instruments do not send
bank MSB. As a side effect, the instrument's default bank MSB is sent before
each note.
To prepare a MIDI channel to switch back to a normal voice instrument while using
an SFX voice: use the fx CCD80
prior to playing the normal voice instrument's
first note.
The full XG "Drum Voice" instrument list is documented on pages 4–8 of the QY70 List Book.
FX | CC | Purpose | Notes |
---|---|---|---|
CCA | CC98 | NRPN MSB | NRPNs can be used to edit drum hits |
CCB | CC99 | NRPN LSB | NRPNs can be used to edit drum hits |
CCC | CC06 | Data entry MSB | NRPNs can be used to edit drum hits |
CCD | CC00 | Bank Select MSB | Default value sends bank MSB each hit |
CCE | CC32 | Bank Select LSB | Can be used to contradict BANK value |
- The default value
CCD
is required because the M8 MIDI instruments do not send bank MSB.- As a side effect, the instrument's default bank MSB is sent before each note.
- NRPN & Data entry CCs are provided because NRPNs can customize a number of parameters for individual drumkit notes
To prepare a MIDI channel to switch back to a normal voice instrument while using
an Drumkit voice: use the fx CCD80
prior to playing the normal voice instrument's
first note.
SFXkits are collections of SFX voice instruments compiled into (very sparse) drumkits. They are documented on page 8 of the QY70 List Book, at the end of the "Drum Voice" instrument list.
FX | CC | Purpose | Notes |
---|---|---|---|
CCA | CC98 | NRPN MSB | NRPNs can be used to edit drum hits |
CCB | CC99 | NRPN LSB | NRPNs can be used to edit drum hits |
CCC | CC06 | Data entry MSB | NRPNs can be used to edit drum hits |
CCD | CC00 | Bank Select MSB | Default value sends bank MSB each hit |
CCE | CC32 | Bank Select LSB | Can be used to contradict BANK value |
SFXkits use the same CC tables as the XG drumkits
The QY70 responds to many CC messages, but a single M8 MIDI instrument
supports a maximum 10 CCx
fx.
As a workaround: each channel folder contains an additional _UTIL/
directory
containing special "mix-in" utility instruments to provide supplementary CCs.
Unlike the normal voice instruments, mix-ins don't send bank or program
messages.
Mix-in instruments provide additional CCx
fx and send to the same MIDI
channel as their folder's normal voice instruments. Using multiple instruments
to send to the same MIDI channel can pose challenges on the M8―especially if
they are playing simultaneously.
Mix-in instruments are intended to be used only for their extra CCx
fx and
not MIDI notes. But to use a mix-in's fx, it must first be triggered in the
I
column of a phrase. Unless you are careful, this could send unwanted MIDI note-on & note-off messages.
Some tips:
- Trigger mix-in instruments at
V00
to avoid sending unwanted MIDI note-ons.- But be careful: even at
V00
, triggering an instrument will kill any remaining events from the previous instrument. If that was a MIDI or external instrument, a MIDI note-off message will be sent to that instrument's MIDI channel.
- But be careful: even at
- Once triggered, you can keep using a mix-in instrument's
CCx
fx and table in that track until a different instrument is triggered.- If you can keep that track clear of other instruments, you can wait through many empty chains to send the mix-in's CCs without needing to trigger it again.
- But be careful: M8
CCx
fx are relative. If precise absolute values are needed by the target CC (NRPNs, CC84), it will probably be necessary to re-trigger the instrument anyway to ensure each value always starts from00
. - (Keep this in mind while placing
REP
s.)
- Always preview mix-in instruments using the same MIDI channel (
chXX/
) folder as the target voice instrument - MIDI messages to a specific channel can come from any M8 track―simultaneously, if needed.
- Keep mix-in instruments on different tracks from their MIDI channel's normal voice instruments while it's playing.
- You can put mix-ins into any track(s) where they can fit and they will still affect the same voice on the QY.
Each mix-in utility instrument provides a related collection of CCs:
The _UTIL/SW+PEDAL CC.M8I
instrument provides all switch and pedal CCs, as
well as a few basic sound controls (including XG's enigmatic AC1). Some
controls overlap with the voice instruments' CCs.
FX | CC | Purpose | Notes |
---|---|---|---|
CCA | CC64 | Sustain on/off | 0x00-0x3F: Off 0x40-0x7F: On |
CCB | CC65 | Portamento on/off | 0x00-0x3F: Off 0x40-0x7F: On |
CCC | CC66 | Sostenuto on/off | 0x00-0x3F: Off 0x40-0x7F: On |
CCD | CC67 | Soft pedal on/off | 0x00-0x3F: Off 0x40-0x7F: On |
CCE | CC05 | Portamento time | |
CCF | CC84 | Portamento Control | |
CCG | CC16 | AC1 controller | |
CCH | CC07 | Main volume | |
CCI | CC10 | Panpot | |
CCJ | CC11 | Expression |
A quick review of how the QY70 responds to the switches/pedals:
-
Sustain: Sustains all notes playing while it's active
-
Sostenuto: Sustains only notes that were already playing when it was activated
-
Soft Pedal: Lowers the volume of any notes played. It should also "damper" the sound's character, but that only seems to affect certain Piano patches
-
Portamento: When on, notes glide from pitch of the previous note.
- Portamento time (
CCE
/CC05) controls the glide length - Portamento control (
CCF
/CC84) resets the previous note for the purposes of gliding to the absolute number of the CC. ⚠️ If you set CC84, the next note will glide from that value at the rate set by CC05―even if the portamento switch (CCB
/CC65) isn't activated!
- Portamento time (
The AC1 controller (CCG
) is a special XG-only effects control (the dots
on pages 9–11 of the QY70 List Book show what it can affect). However: by
default AC1 is completely useless on the QY70:
- Its initial modulation strength is 0 :faceplam:
- You can't change it without using Sysex 🤦🤦
- If you manage to turn it on: AC1 modulates a single parameter (usually Dry/Wet) on each reverb and most of the variation effects ...but only when VARIATION is set to INSERT mode 🤦🤦🤦
The Sysex string to maximize AC1's modulation strength is F0 43 10 4C 02 01 5F 7F F7
. You can't send this from the M8, but you can punch it directly into
the QY70's song/pattern event list by selecting the event XG Exc Effect > AC1Var
and setting it to either extreme (+63 or -64) and playing the
song/pattern to execute the event.
The _UTIL/NRPN RPN CC.M8I
mix-in instrument provides CCs for NRPNs & RPNs,
and a table with common NRPNs to trigger using TH0
.
NRPNs are the only way you can use CCs to affect XG vibrato parameters or the complete set of EG parameters (for some reason there is no single CC for EG decay). They can also customize individual drumkit notes!
NRPNs and RPNs use at least three CCs to change, which must be sent in order:
- N/RPN MSB
- N/RPN LSB
- Data entry MSB
- (RPNs only) Data entry LSB
Warning: M8 CCx
fx values are relative, but RPN & NRPN
triggers are absolute. To make sure you select the correct N/RPN MSB/LSB
values, always trigger this mix-in instrument on the same step.
This will ensure that all CCx
fx start from 0 and send the exact value
you specify on the step.
(As a reminder: to trigger an M8 instrument, put the instrument
number in the phrase's I
column on that step. This will
interrupt any previously playing instrument and tables on that track.)
FX | CC | Purpose | Notes |
---|---|---|---|
CCA | CC98 | NRPN MSB | |
CCB | CC99 | NRPN LSB | |
CCC | CC06 | Data entry MSB | |
CCD | CC100 | RPN MSB | |
CCE | CC101 | RPN LSB | |
CCF | CC038 | Data entry LSB | |
CCG | CC96 | Data entry inc | 0x7F: increment RPN |
CCH | CC97 | Data entry dec | 0x7F: decrement RPN |
CCI | |||
CCJ |
Pages 45―46 of the QY70 List Book cover the available RPNS & NRPNs
To simplify sending N/RPNs from the M8, the mixin's table is pre-populated with MSB+LSB triggers for common NRPNs.
To use: Select an NRPN with THO
and set the data entry MSB value with
CCC
(CC05). All further CCC
values will continue to modify that NRPN until
another NRPN is triggered or the special NRPN reset message (THO0E
) is sent.
Example:
-
To set Vibrato Rate to 128 (maximum):
THO01 CCC7F
Row | Purpose | Notes |
---|---|---|
01 | Vibrato Rate | CCC = 0x00: -64 0x40: 0 0x7F: +63 |
03 | Vibrato Depth | CCC = 0x00: -64 0x40: 0 0x7F: +63 |
05 | Vibrato Delay | CCC = 0x00: -64 0x40: 0 0x7F: +63 |
08 | EG Attack time | CCC = 0x00: -64 0x40: 0 0x7F: +63 |
0A | EG Decay time | CCC = 0x00: -64 0x40: 0 0x7F: +63 |
0C | EG Release time | CCC = 0x00: -64 0x40: 0 0x7F: +63 |
0E | NRPN Reset | No data byte; just use THO0E |
A note about XG LFO (vibrato)
The "Vibrato" parameters actually control the instrument's single LFO. In XG MIDI, this LFO can also be configured to affect amplitude, pitch, and/or filter, controlled by the mod wheel, pitch bend, and/or channel aftertouch.
Unfortunately: these extra mappings are impossible to configure without using Sysex (which the M8 doesn't send). As a result, the LFO is stuck modulating whatever the voice is configured to use it for. Practically every instrument on the QY just uses the instrument LFO to affect pitch, controlled by the mod wheel. And so: it's "vibrato."
The _UTIL/CHAN MODE CC.M8I
instrument has CCs to send MIDI channel mode
messages. All of them are triggered with the value 00
.
FX | CC | Purpose | Notes |
---|---|---|---|
CCA | CC120 | All sound off | 0x00: trigger |
CCB | CC121 | Reset all controllers | 0x00: trigger |
CCC | CC123 | All notes off | 0x00: trigger |
CCD | CC124 | Omni mode off | 0x00: trigger |
CCE | CC125 | Omni mode on | 0x00: trigger |
CCF | CC126 | Mono (ch mode 2) | 0x00: trigger |
CCG | CC127 | Poly (ch mode 3) | 0x00: trigger |
CCH | |||
CCI | |||
CCJ | CC0 | Bank Select MSB | Use CCJ00 to reset bank to normal |
CCA00
(All sound off) is particularly useful if you need to quickly silence
hanging instruments from the M8.
See page 44–45 of the QY70 List Book for descriptions of each channel mode message
M8 MIDI instruments' BANK
setting only handles the MIDI Bank Select LSB
(CC32)―it does not affect Bank Select MSB (CC0) at all. XG MIDI uses the Bank
Select MSB to partition instruments into several categories:
Bank Select MSB | XG Voice category | Notes |
---|---|---|
0x00 | Normal Voice | |
0x40 | SFX voice | |
0x7E | SFX kit | |
0x7F | Drum voice / Rhythm kit |
Bank Select MSB is 0 unless changed, so if you are only using normal voice instruments, you will never need to send it.
The .m8i
instruments for the other instrument categories (SFX voice, Drum
Voice, SFX kit) use CCD
to Bank Select MSB (CC0), with the default set to
their bank MSB. This ensures that the bank select message are always sent in
the correct order, but at the expense of sending C00 before every note.
For this reason, the "Normal voice" instruments do not include Bank Select
MSB (CC0). This prevents unecessary CC0 traffic and keeps all 10 CCx
slots
for common CCs―but the trade-off is that
Workaround: When you are using a SFX/drumkit/SFXkit instrument, send CCD80
just before switching to a normal voice instrument. This sends the correct
Bank Select MSB ahead of the normal instrument sending its natice Bank Select LSB
& Program Change.
The multiple chXX/
folders are a multi-timbral safety feature: the M8
instrument browser previews MIDI instruments by sending their program + bank
changes to the channel saved in each .m8i
file. This can make it
dangerous to preview instruments for a multi-timbral device like the QY70
unless the previewed .m8i
files are already configured for the target MIDI
channel.
This is especially risky when mixing "normal voice" instruments with instruments that send CC0/Bank Select MSB messages, because it won't be possible to to switch back to the normal voice instrument without explicitly sending Bank Select MSB 0.
While testing this pack on M8 FW 3.0.3a, it was observed that changing between certain instrument pairs (in either direction) from the M8 does not send the new instrument's BANK LSB (CC32) + program change messages. This is very rare, but repeatable between affected instrument pairs.
Some example pairings (in BANK:PG
format) include:
66:101
<->67:101
64:101
<->65:101
000:102
<->008:102
Workaround: Change to an unaffected instrument to force the change messages, then change to the target instrument.
It is very likely this issue will be fixed in future FW updates.
2023-04-25 ― ineffable-twaddle
- Update instruments to M8 v3 instrument format
- Move Bank LSB CC into the instrument settings to free up
CCA
- Add common QY70 CCs to each voice instrument
- Add new mix-in utility instruments to provide additional CCs
- Add table to trigger common NRPNs
- Make 16 channel variations of all instruments to prevent multi-timbral preview disasters
- Add instruments that require non-zero bank MSB CCs:
- SFX
- Drumkits
- SFX kits
- Add documentation
2021-01-24 ― pselodux
- Original 473 QY70 defs in M8 v1 instrument format 🏆