Subsample configuration: player
The 16 settings under player, each with the type, default and limits its schema declares.
MIDI-triggered playback. Subsample opens a MIDI input and an audio output, picks a sample for each incoming note by the rules in the MIDI map, and mixes the voices as they play.
enabled in player
- Type
boolean- Default
false
Turns the MIDI player on. Requires midi_map or midi_maps.
max_polyphony in player
- Type
integer- Default
8- Limits
- at least 1, at most 64
Number of voices at full velocity that together reach full scale. Each voice's level is divided by it, and voices beyond it still play rather than being cut off. Raise it when dense passages clip, and lower it for louder individual notes.
limiter_threshold_db in player
- Type
number- Default
-1.5- Limits
- at least -12, at most 0
Level, in dBFS, above which the output limiter starts to soft-clip. Signals below it pass unchanged, and lower values compress more. 0 turns the limiter off.
limiter_ceiling_db in player
- Type
number- Default
-0.1- Limits
- at least -12, at most 0
Highest output level, in dBFS, that the limiter allows. Must be above limiter_threshold_db, and is ignored when the limiter is off.
midi_map in player
- Type
stringornull- Default
null- Example
midi-map-gm-drums.yaml
Path to the MIDI map that decides which samples each note plays. The player does not start without it or midi_maps. The map may be an ensemble, declaring a maps: block that binds several sample sets to MIDI channels. Cannot be set together with midi_maps. With the player on, a map that is missing or cannot be read stops Subsample as it starts, with Cannot load the MIDI map and the full path it looked at.
midi_maps in player
- Type
- map of names to
stringornull - Default
null
Sample sets to play at once, each a MIDI channel from 1 to 16 followed by the path to a sample set's MIDI map, as in 10: kits/home/midi-map.yaml. Gives the same result as an ensemble map declaring the same maps: block. Use an ensemble map instead to name MIDI channels from a definitions: file, or to reload the bindings while running, since Subsample does not watch config.yaml. Cannot be set together with midi_map. Pair it with library.directory: null to load only the samples the sets name. A relative path resolves from the directory Subsample runs in. The rules of an ensemble's maps: hold: two sets may not claim the same note on the same MIDI channel, and a set may not declare maps: or programs: of its own.
watch_midi_map in player
- Type
boolean- Default
false
Reloads the MIDI map about half a second after a file it is read from changes, so an edit takes effect on the next note without a restart. Those files are the map, each set an ensemble includes or midi_maps names, and every definitions: file any of them mounts, and a set added to an ensemble is watched from the reload that reads it. Several saves in quick succession count as one change, and a map that fails to load is reported while the one already loaded keeps playing. A change to programs:, program_channel: or default_program: needs a restart, and so does an edit to a map: preset's own file, which is not watched, or to midi_maps itself, since config.yaml is not watched. A file on a network drive is checked for changes every two seconds, so an edit made there from another machine reloads too. A reload also warns of any map: preset a restart would stop on. Requires midi_map or midi_maps.
strict_midi_map in player
- Type
boolean- Default
true
Refuses a MIDI map with an unknown where: key, processor, processor parameter, CC binding key, or order entry key, or a pitched: value that is not true or false, and names the valid options. Set false to log a warning for each and carry on, when loading an older map.
midi_device in player
- Type
stringornull- Default
null- Examples
Launchpad,"*Subsample Virtual MIDI *:0"
MIDI input to play from, matched the same way as recorder.audio.device, with wildcards and without regard to case: * matches any run of characters and ? matches one. On Linux a MIDI device's name carries a client number that changes between runs, so use * for it and keep the port number after the colon. An interface with several ports lists a name for each, so without the port the value matches them all and asks which at every start; *U6MIDI Pro *:0 names one port for good. null selects the only MIDI input when there is one, and otherwise asks. Ignored when virtual_midi_port is set.
virtual_midi_port in player
- Type
stringornull- Default
null- Example
"Subsample Virtual MIDI"
Name of a virtual MIDI input port that Subsample creates at start-up, for other software on the same machine to send notes to. When set, Subsample opens no hardware MIDI input and ignores midi_device.
audio in player
- Type
- section
The output device, and the format Subsample plays in.
device in player.audio
- Type
stringornull- Default
null
Output device to play through, matched the same way as recorder.audio.device. null uses the system's default output.
sample_rate in player.audio
- Type
integerornull- Default
null- Limits
- above 0
Output sample rate, in Hz. null uses recorder.audio.sample_rate. Set it when the output device cannot run at the recorder's rate; a rate above the recorder's adds no quality.
bit_depth in player.audio
- Type
integerornull- Default
null- Limits
- one of
16,24,32
Output bit depth. null uses recorder.audio.bit_depth. Set 16 for a device that only plays 16-bit audio.
channels in player.audio
- Type
integerornull- Default
null- Limits
- above 0
Number of output audio channels, in SMPTE order. null plays in stereo. Set it to the interface's output count when the MIDI map routes instruments to separate outputs. Subsample refuses to start when the device has fewer outputs.
buffer_frames in player.audio
- Type
integerornull- Default
null- Limits
- at least 32, at most 4096
Output buffer size in frames, as a power of two. Smaller buffers lower latency, and larger ones are safer under load. Each note plays one buffer after it arrives, from the frame it arrived on, so notes keep the timing they were played with at any size. null lets the operating system choose. When the device refuses the size, Subsample logs an error and uses the device's own. At small sizes the audio drops out more easily on a CPU set to save power, or on Linux without real-time priority, which Subsample asks for and says at startup whether it got.