Free 30-day trial. macOS first. Join the waitlist.
← Formats

.sfz

A plain text instrument format you can read and edit by hand.

What it is

An .sfz is a sampler instrument written as plain text. It's the one format on this list you can open, understand and edit in any text editor without tooling, which is why it turns up so often as an interchange format between samplers.

The file holds no audio. It's a list of regions, and each region says which WAV to play, which keys and velocities should trigger it and how it should loop.

Kit Name.sfz
Kit Name/
  Kick 01.wav
  Snare 03.wav
  ...

What is inside

Settings are called opcodes, and they are grouped under headers. A region inherits from the group above it, which inherits from global.

<control>
default_path=Kit Name/

<global>

<group>
pitch_keycenter=60
lokey=59
hikey=61

<region>
sample=Piano C4 soft.wav
lovel=0
hivel=63
loop_mode=loop_continuous

Vocabulary

SFZ says region where MPC says keygroup and Kontakt says zone. A group of regions covering one instrument is a multisample.

The format is open and unowned, which is why it's the common tongue between samplers. Sforzando, Plogue's free player, is the usual reference implementation.

What reads it

Sforzando, Bitwig, Renoise, TAL-Sampler, Falcon and a long tail of hardware and software samplers. Support is broad because the spec is public, though it's uneven: not every player implements every opcode.

The default_path opcode in the control header points at the sample folder, so the .sfz normally sits one level up from its WAVs rather than inside the folder with them.

The hash character

A # starts a comment in SFZ. That is fine until a sample is called Kick #3.wav, at which point the rest of the line disappears and the region silently loses its sample.

The fix is to quote the filename. Any writer that does not quote is generating files that break on a naming convention plenty of sample packs actually use.

The limits

Loop crossfade is expressed in seconds rather than samples, so a value written for one sample rate does not describe the same number of frames at another. It's a small thing that shows up as a click at the loop point when material is resampled.

Because support varies between players, an instrument that sounds correct in one sampler can lose its filtering or its velocity curves in another. Test in the player you actually use before assuming the mapping travelled.