If in doubt, ask.
This page describes the current firmware version, which is 3.8

SD Card Playback

Introduction

From firmware v3.3 onwards, if the disting detects a MicroSD card in its slot at power-up, new banks of algorithms become available which use the SD card for audio sample or MIDI file playback. These new banks are described below.

In firmware v3.3, only the SD playback banks may be accessed if a MicroSD card is detected.
Please update to v3.4 or above for the behaviour documented below.

Restrictions

Because the SD card interface shares system resources with other parts, the following apply when in SD playback mode:

  • LEDs 2, 4 & b will appear (almost) permanently lit.
  • The push button function of the Z knob cannot be used, and indeed pushing the knob should be avoided, as it may interfere with the SD card operation.
  • Because LED 2 is unavailable, the menu item for switching banks is moved to position 3.
When not in an SD playback mode (i.e. when using banks 1-a to 1-d), but with an SD card still in the slot, the following apply:
  • LEDs 2 & b will not light.

Supported MicroSD cards

In theory any MicroSD card will work, but in practice there is a huge variety of cards on the market and we cannot possible test them all. We recommend 32GB SDHC cards.

The MicroSD card must be formatted in FAT32 format, which is the as-sold state for many cards. If not, cards can easily be reformatted to FAT32 in Windows or Mac OS X.

Supported audio files

As of now, the only supported audio file format is 16 bit WAV, mono or stereo. Any sample rate can be used, however.

Since higher sample rates impose greater bandwidth demands on the SD card streaming, we suggest you use the lowest sample rate that gives acceptable audio quality. All our testing generally uses 44.1kHz files.

Supported MIDI files

Currently we support Format 0 files (single track). The division field of the header chunk must be in "ticks per quarter note" format.

Happily this is the format that Ableton Live spits out if you do "Export MIDI Clip".

File naming & Playlists

All files need to be in the root of the drive i.e. not inside any folder.

For audio files, we still support the legacy naming convention from firmware v3.3, which required that files be named 'sampleXX.wav' where XX is a decimal number from 00 to 31 e.g. sample01.wav, sample23.wav. Firmware v3.4 introduces the playlist file, which is the preferred method going forward.

The playlist file specifies what audio/MIDI files the algorithm will use, how they will be ordered, and what playback setings they will use. It is a simple text file, as described below.

By default, audio algorithms look for a playlist file called 'playlist.txt' and MIDI algorithms look for 'midi-playlist.txt'. However, each algorithm first looks for an algorithm-specific playlist file, the name of which is specified in the algorithm descriptions below.

The playlist files must be plain text. Note that TextEdit on macOS defaults to rich text. From the 'Format' menu choose, 'Make Plain Text'.

Audio Playlist Format

An audio playlist file might look something like this:

disting playlist v1
-loop=0
-gap=0
-fadeIn=0
-fadeOut=0
TR66_BD_aOrig_b_R1.wav
-fixedPitch=0.9
TR66_Snare_aOrig_b_R1.wav  
sample01.wav
-loop=1
-ramp=1
funky_lp.wav
-loop=1
-triggers=4
586447main_JFKwechoosemoonspeech.wav
-loop=1
This breaks down as:
  • The header: "disting playlist v1"
  • Default settings (optional)
  • List of audio files
  • Per-file settings after each file (optional)
Files may appear more than once in the playlist, with the same or different settings.

Settings are in the format "-" <setting name> "=" <setting value>

Settings that appear before any audio file apply globally to all the files in the playlist, unless overridden by the per-file settings.

The available settings are as follows.

SettingDefaultDescription
loop 1Whether the sample loops (value 1) or is a one-shot (value 0).
fadeOut 3 Fade out to apply when a sample is retriggered, in milliseconds.
fadeIn 3Fade in to apply when a sample is retriggered, in milliseconds.
gap 3Gap (silence) between fade out and fade in, in milliseconds.
retriggerOnSampleChange 1See below.
fixedPitch 0Play the sample at a fixed pitch, not controlled by the pitch CV (if any).
ramp 0Switch Output B to emit a ramp CV.
triggers 0Switch Output B to emit trigger pulses.
clocks 4Set the number of clocks per loop for the Clocked Audio Playback algorithm.

The fades are useful when retriggering samples, especially when starting them at arbitrary points within the sample, to avoid clicks. However, for maximum responsiveness when triggering, say, drum samples, set the fades and gap to zero.

The default behaviour (with retriggerOnSampleChange=1) when selecting a new sample (via S or Z depending on algorithm) is to immediately begin playing the new sample. If a sample has retriggerOnSampleChange=0 (or, if the default is set to 0) then the next sample does not begin playback until triggered by the input. A typical use case for this would be when you have a set of one-shot (say, drum) samples and you want to trigger each sample and have it play until the next trigger, not changing in the middle if the sample select CV changes. At an extreme, you could in this case feed white noise into the sample select CV, to choose a random sample on each trigger.

The fixedPitch setting is a floating point number, where 1.0 corresponds to playing the sample at its natural speed, 0.5 means play it at half speed etc. fixedPitch=0 (the default) means that the sample respects the CV-controlled pitch.

ramp=1 outputs a rising ramp from 0V to +8V corresponding to the current position in the sample. ramp=-1 outputs a falling ramp (+8V to 0V).

triggers outputs a number of triggers during the sample e.g. triggers=4 will output 4 trigger pulses, equally spaced over the sample length. The triggers are +5V pulses lasting about 10ms. The maximum number of triggers per sample is 32767.

ramp and triggers are mutually exclusive. The last setting in the playlist file for a given sample is the one that takes effect.

The maximum number of sample files per playlist is 64. Files beyond that limit are ignored.

MIDI Playlist Format

A MIDI playlist file might look something like this:

disting playlist v1
-zeroVNote=60
bach_2ptinv.mid
CDE_bend.mid
-bendRange=12
CDE_bend.mid
-loop=0
cc1_2.mid
-cc1offset=-1.5
-cc1scale=3
-cc2offset=2
-cc2scale=6
This breaks down as:
  • The header: "disting playlist v1"
  • Default settings (optional)
  • List of MIDI files
  • Per-file settings after each file (optional)
Files may appear more than once in the playlist, with the same or different settings.

Settings are in the format "-" <setting name> "=" <setting value>

Settings that appear before any MIDI file apply globally to all the files in the playlist, unless overridden by the per-file settings.

The available settings are as follows.

SettingDefaultDescription
loop 1Whether the MIDI file loops (value 1) or is a one-shot (value 0).
zeroVNote 48 MIDI note number corresponding to zero Volts output pitch CV.
bendRange 2Pitch bend range, in semitones.
cc1offset 0Offset for CC#1, in Volts.
cc1scale 5 Range for CC#1, in Volts.
cc2offset 0 Offset for CC#2, in Volts.
cc2scale 5 Range for CC#2, in Volts.

The maximum number of MIDI files per playlist is 32. Files beyond that limit are ignored.

Example Files

A simple example playlist and some audio files which are known to be formatted correctly can be downloaded here.

MIDI/CV conversion

The are two primary modes of MIDI/CV conversion, which can be mixed within a MIDI file

  1. Note on/off messages, and pitch bend messages, are used to generate a pitch CV from output A and a gate CV from output B.
  2. CCs #1 & #2 are used to directly control voltages on outputs A & B respectively. The 7 bit CC value (0-127) is converted to a voltage according to the scale and offset settings (by default, 0-5V).

The algorithms

Entries marked 'Placeholder' are reserved for future development, and currently run the same algorithm as a nearby non-placeholder entry.

Bank 2/a

Group 1 Group 3
a Audio Playback MIDI File Playback
(Clocked)
c Audio Playback with V/Oct MIDI File Playback
(Free Running)
d Audio Playback with Z Speed Audio Playback with End CV

Bank 2/b

Group 1 Group 3
a Clocked Audio Playback Placeholder
c Placeholder Placeholder
d Placeholder Placeholder

Audio Playback

X is retrigger CV
Y is start position CV
Z selects the sample
A is left audio output
B is right audio output

Algorithm-specific playlist filename: playlist-rm.txt

This algorithm continuously plays audio files, in a manner very much inspired by Tom Whitwell's Radio Music module.

The current audio file is selected with the Z knob/CV. It plays, forever, at its natural speed (see the algorithms below if you want to control the speed), looping when it gets to the end; or it plays until the end of the file and stops, depending on the 'loop' setting.

X is a retrigger input. A trigger pulse in excess of 1V will reset the playback position. The initial playback position is set by the Y input. The voltage range 0-8V corresponds to the length of the file so e.g. 0V input (or no input) sets the initial position to the start of the file, 4V input sets the initial position to halfway through the file, etc.

When switching between files, the playback position is maintained, modulo the length of the new file. For example, if you're 5 seconds into a 10 second file:

  • if you switch to a 20 second file, the position will be 5 seconds into the new file.
  • if you switch to a 2 second file, the position will be 1 second into the new file.

A & B are the left & right audio outputs respectively.

Audio Playback with V/Oct

X is retrigger CV
Y is V/octave pitch CV
Z selects the sample
A is left audio output
B is right audio output
ParameterMinMaxDefaultDescription
0-880Octave shift.

Algorithm-specific playlist filename: playlist-voct.txt

This algorithm is much the same as the preceding one, except that it forgoes the sample start position input and instead has a pitch input.

Y is the pitch input, using the 1V/octave standard. 0V corresponds to the sample playing at its natural pitch. Positive voltages speed up playback; negative voltages slow it down.

Note that there is a limit to how fast data can be streamed from the SD card. If you speed playback up by a large factor, you may get dropouts.

Audio Playback with Z Speed

X is retrigger CV
Y is start position CV
Z sets the playback speed
A is left audio output
B is right audio output
ParameterMinMaxDefaultDescription
00310Selects the sample.

Algorithm-specific playlist filename: playlist-zspeed.txt

This algorithm is much the same as the base SD Playback algorithm, except that it forgoes voltage control of the current sample and instead offers a speed control.

Z is the linear speed control. The central position corresponds to the sample playing at its natural pitch. Positive voltages speed up playback; negative voltages slow it down. Because the scale is linear it is possible to slow it down all the way to being stopped.

The current sample is selected via the parameter i.e. by turning the S knob.

Audio Playback with End CV

X is retrigger or end position CV
Y is start position CV
Z is end position or retrigger CV
A is left audio output
B is right audio output
ParameterMinMaxDefaultDescription
00310Selects the sample.

Algorithm-specific playlist filename: playlist-endcv.txt

This algorithm is much the same as the base SD Playback algorithm, except that it forgoes voltage control of the current sample and instead offers control over the sample end point.

X and Z are the retrigger and end position controls.

  • If Z is negative, X is the retrigger input, and Z controls the sample end point. So, if you require manual control over the end point, turn the Z knob counterclockwise to shorten the sample.
  • If Z is positive, Z is the retrigger input, and X controls the sample end point. In this case X is scaled in the same way as input Y, so varying Y and feeding X the same CV plus a small offset will give you a short segment of the sample that moves around with the input. The trigger fed into Z should be a positive pulse over about 1V.

When Z is adjusted through the switching point between these two modes, LED 1 will light for a short while to let you know that the mode has been changed.

The current sample is selected via the parameter i.e. by turning the S knob.

MIDI File Playback (Clocked)

X is clock
Y is retrigger CV
Z selects the MIDI file
A is pitch CV output
B is gate output

Algorithm-specific playlist filename: midi-playlist-clocked.txt

This algorithm plays MIDI files, converting the MIDI into CV outputs on A & B (as detailed above).

The current MIDI file is selected with the Z knob/CV.

The X input is a clock, which controls the speed of the MIDI file playback. A clock pulse should exceed 1V. The clocks correspond to quarter notes in the MIDI file.

Y is a retrigger input. A trigger pulse in excess of 1V will reset the file to the beginning.

MIDI File Playback (Free Running)

X is V/octave speed CV
Y is retrigger CV
Z sets the playback speed
A is pitch CV output
B is gate output
ParameterMinMaxDefaultDescription
00310Selects the MIDI file.
Please see video for Clocked mode above

Algorithm-specific playlist filename: midi-playlist-free.txt

This algorithm plays MIDI files, converting the MIDI into CV outputs on A & B (as detailed above).

The current MIDI file is selected via the parameter i.e. by turning the S knob.

The playback speed is set by a combination of the Z knob/CV and the X CV. With both at zero, the MIDI file plays at 120bpm. Z offers a linear speed control - positive voltages speed up playback; negative voltages slow it down. Because the scale is linear it is possible to slow it down all the way to being stopped. X offers an exponential (1V/octave) speed control - the speed doubles for every 1V above zero, and halves for every 1V below zero.

Y is a retrigger input. A trigger pulse in excess of 1V will reset the file to the beginning.

Clocked Audio Playback

X is retrigger CV
Y is clock
Z selects the sample
A is left audio output
B is right audio output

Algorithm-specific playlist filename: playlist-clocked.txt

This algorithm plays audio files, the speed of which is set by incoming clock pulses.

The current audio file is selected with the Z knob/CV. It plays, forever, looping when it gets to the end; or it plays until the end of the file and stops, depending on the 'loop' setting.

X is a retrigger input. A trigger pulse in excess of 1V will reset the playback position to the start of the sample.

Y is the clock input. The speed of the sample playback is adjusted so that the whole sample fits into the time taken for a number of clocks, where that number is set (per sample) in the playlist.

When switching between files, the playback position is maintained, as for the Audio Playback algorithm.

A & B are the left & right audio outputs respectively.