-
Notifications
You must be signed in to change notification settings - Fork 5
Conventions
- Please use
.wav
files, for consistency and maximum interoperability. We currently also have.flac
and.aiff
; at some point we'll convert these to.wav
for consistency. - Please use
.wav
suffix rather than.WAV
. - Please use 44.1KHz/16bit files, for compactness. 48KHz is allowable but not preferred. Lower bitrates are fine if the instrument doesn't have high frequencies.
- Please do not use 24-bit samples.
- Fork this repository. For now, we assume you know how to use GitHub. Ask if you need help!
- Add your samples
- Each sample set has a folder for samples and an sfz file, in the Melodic or Drums folder.
- For melodic samplesets, the .sfz file already exists (with dummy contents.)
- The name of the samples folder must EXACTLY match the SFZ file name, but without the '.sfz' suffix. Create this folder and put all your samples in it. You can have subfolders if you wish.
- Update tools/GM-plan.txt with details for your sampleset (see below.)
- Regenerate the main GM sfz files, running
tools/mkgm.sh
from theDiscord GM
folder. (Optional, and currently only works if you havebash
.) - Feel free to just add samples and then get help for the rest.
- Do not use these directives, which will break the script that generates the full GM sfz:
<control>
default_path
<global>
-
<master>
(there will be an implicit<master>
at the beginning of each instrument.) volume=
-
#include
(maybe later, but paths will get messed up.)
- Put a set of header comments, like the following:
// GM Grand Piano
// Salamander Grand Piano V2
// Author: Alexander Holm
// Contact: axeldenstore [at] gmail [dot] com
// License: Creative Commons CC-BY, Alexander Holm
// Source: https://github.com/sfzinstruments/SalamanderGrandPiano
// mapped and looped by jlearman
- Please include a comment starting with
// License:
followed by a license name (e.g., CC0 or CC-BY), followed by a comma, followed by the name of the party granting the license. - Be sure to pitch all instruments at concert pitch (same as a piano.) Do not shift the notes to fit on a smaller keyboard.
- NOTE: Feel free to put any number of .sfz files in the samples folder, with no restrictions on what you're allowed to do. These won't be used in the master GM sfz files, but may be handy for you and other users. This is where to put any fancy features like keyswitching, and other features that require a
<control>
section. These are for when using the instrument by itself rather than as part of a whole GM. It's optional because anyone can just use the main sfz file specified above.
The script that generates the GM sfz files is controlled by a master menu file, tools/GM-plan.txt
.
Here's the format:
# type | bank | prog | vol | sfzfile | gm-name | sf-name
# where bank & prog are 1-based as per spec, but will be 0-based in the SFZ file
melodic | 0 | 1 | 0 | SalamanderGrand.sfz | Acoustic Grand Piano | Salamander Grand
melodic | 0 | 2 | 0 | VCSL-YamahaUpright.sfz | Bright Acoustic Piano | VCSL Yamaha Upright
melodic | 0 | 3 | 0 | GSullivan-CP80.sfz | Electric Grand Piano | Greg Sullivan Yamaha CP80
melodic | 0 | 5 | 0 | jRhodes.sfz | Electric Piano 1 | jRhodes
melodic | 0 | 26 | 0 | jMartin.sfz | Acoustic Guitar (steel) | jMartin HD28
melodic | 0 | 28 | 0 | SnowkissGuitar.sfz | Electric Guitar (clean) | dSmolken Snowkiss Guitar
This will build a GM.sfz file with the following properties:
-
global_name
isDiscord GM
-
master_name
isbank:prog - <gm-name> - <sf-name>
-
vol
is volume in dB (using thevolume
opcode.)
So, when using the Aria player (or any player that supports those opcodes) we will see the GM name, and sample set name of the last-played note. The sample set name is intended to give credit where credit is due, by using a name that can be googled to find the source for anyone who's interested.
We may need to vary from this for the drum kit sample sets, as programming is trickier for those.
Note that a sample set may use samples from another sample set. For example, we could use Yamaha Upright samples detuned and doubled to create the Honky Tonk set.
The script can also build a "test" version of GM.sfz that uses sequential program numbers, just to simplify comparing (not having to remember program numbers and scrolling from the controller keyboard's scroll wheel.) This makes it easier for me to compare volume and dynamics between sample sets.
We can add columns to the above if we need to.
source_instrument_number.format
where
- source identifies the sample source (e.g., erk, vs, unru)
- instrument (e.g., snare, hihat, kick)
- number is a number for the velocity or other purpose