rrrabuyvsvsveytfazersurdwarubawvev0% Interest for 24 Months! Learn more »
(800) 222-4700
  • Español: (800) 222-4701
Dad Gift Card


Cakewalk Dimension Pro Tip: sfx format 101

As you have surely heard, the main format for Dimension is the sfz format. I thought it would be good to start writing a few lines about the sfz format, as I feel that many of you might be scratching your head wondering what it is, what it could do for you, and how it’s used. So I think the top questions/answers are:

What is a sfz file?

It’s a text file, containing information on how a group of samples have to be performed.

What can I use to write that text file?


What do I have to write inside the file?

A simple sequence of opcodes, plus the filenames of the samples, using a special syntax. Most of that syntax opcodes is detailed in the sfz format definition page (not all). The sfz format has been greatly expanded and enhanced for Dimension, so keep an eye in that page and this forum as more information will eventually appear.

Ouch, so there’s no graphical editor?

No, there isn’t a graphical editor for the sfz format yet. Graphical editors have advantages and disadvantages, as a text-based format does. If you really ‘need’ a graphical editor then this is a good time to stop reading this tip, and try to get the job done in DS864, or some of the major samplers like HALion, VSampler, Kontakt or Gigastudio.

Ok, if there’s no graphical editor, then what’s interesting about the sfz format?

Many things, I’ll mention just a few:For heavy-weight content producers, who keep sample collections organized after recording, using graphical editors to map the same structure over and over again is a huge productivity loss. With the sfz format, it’s just a search… replace operation.

Example: user A records samples from a synthesizer, every minor third. He carefully writes all wav files using the same convention (i.e. “Solina-C3.wav, Solina-D#3.wav, etc.”. He got 20 samples, and assembled the .sfz file. Now he records a Moog, with the same mapping, resulting in a similar wave collection (i.e. “Moog-C3.wav, “Moog-D#3.wav, etc.”. Creating the second sfz file is just find…replace all ‘Solina’ instances with ‘Moog’. No need to use a graphical mapper to do the job again. Let’s say we got a 143 synths samples… ok you got the point.

The sfz format also allows people to publish mappings and original arrangements of the whole myriad sample contents available for free over the internet, without actually distributing the samples. This avoids any copyright infringement, distribution rights dispute, requirement for written permissions, and other evil legal tricks in the sampling industry.

Example: user A downloads some free samples S from site X. However, as *most* of the free samples in the internet, his license says he doesn’t have rights to redistribute the samples (this is very logical, as most free samples are offered as promotion) so user A cannot show to the world how fantastic his contribution, based on modifying the samples is. The sfz format allows user A to publish a simple, small and universally readable text file, then point his friends to the samples.
User B could take the work user A did, and modify it again, then publish another .sfz file. Then user C and D, and more letters. With other formats, (like Akai, SoundFont or Gigastudio), this would force users to download the total sample contents over and over again, even when all the changes would have kept the original samples unchanged.

The sfz format simply offers more sample manipulation capabilities than all the major samples in the industry together. Some of its features are unlimited keyboard and velocity regions, sample trigger based on midi continuous controllers and special controllers, round-robin, random, exclusive zones (choke groups), detection of legato playback, playback in-sync with host tempo, synchronized loop playback, etc.

Ok, I might give it a try. How do I get started?

That’s great to hear, here we go!

An sfz format file is arranged in regions. A region is a statement of WHEN and HOW a specific SAMPLE will play (the three upercase words are the keys to the sfz format). So to start a region, there’s a specific opcode:

That means ‘The region definition starts here’, and it will extend till the next is found. It doesn’t matter if you use lower/upper/mixed case, or how many spaces you put in the middle of the file. I’ll use lower case in the examples for simplicity. There’s one very important rule: there should *not* be spaces at the sides of the ‘=’ sign.

A region has three parts, all of them optional:

1- A sample opcode: ‘sample=’ (indicating what SAMPLE to play).
2- A set of Input Controls (WHEN the sample will play).
3- A set of Performance Parameters (HOW the sample will play).

Great. Now let’s see a real example. Let’s suppose we have a sample called ‘Solina-C3.wav’. We’ll create a sfz file using it. It goes as follows:


I’ve prepared the the wav file and the .sfz file for you for you so you can check it out without writing anything. Just extract the zip anywhere, and then drag the .sfz file into Dimension’s gui (keep the .sfz and the .wav file together).

That sample sfz file maps the sample Solina-C3.wav to the whole keyboard. Pretty uninteresting, as we can just drop the wav into the element for the same result right? Ok, but we had to start somewhere. Now just for fun, add this line to the file yourself:


So the whole file reads:


I’ve shipped the other .wav file in the same zip. So just write, save, drag the .sfz into Dimension’s GUI and check what you got: a nice stack of the two samples layered into the whole keyboard!

I now seem to hear that voice in your head repeating “this is somehow interesting… how many samples I could stack?”. As many as you want. There’s simply no limit.

That was too easy. Now let’s try to make a split example. Here is how it would look:

// this is a four-regions keyboard split example
sample=Solina-C2.wav lokey=0 hikey=b2 pitch_keycenter=c2
sample=Solina-C3.wav lokey=c3 hikey=b3 pitch_keycenter=c3
sample=Solina-C4.wav lokey=c4 hikey=b4 pitch_keycenter=c4
sample=Solina-C5.wav lokey=c5 hikey=127 pitch_keycenter=c5

That’s it. You might have noticed that I used some lines starting with ‘//’. Those are comments, and they’ll be ignored by the player, but they help to keep things clear.

First region goes from 0-b2, second from c3-b3, then third from c4-b4 and finally fourth from c5-127. You can check how the splitted map sounds now. As a homework, I would like to have a dual-layer, octaved and splitted map together, combining both previous examples. Candy for the first who gets it. Using the same samples.

So in the example above we see several opcodes. the ‘sample=’ opcode is the Sample Definition opcode, and signals what sample the region will play. The ‘lokey=’ and ‘hikey=’ opcodes define what are the lowest and highest key for that region: when any key inside the lokey-hikey range is played, that region will play.

Finally, we see the ‘pitch_keycenter=’ opcode. This one tells Dimension that what is the key that should play the sample *untransposed*, as the sample has that note recorded inside.

You might wonder why the wavefiles never stop when you play a chord. That is because the waveforms have been looped, and contain loop information tags inside. For more info about looping, check “DimensionalTips: The Loop Wave”.

Nice. Something else for today?
Yes. we’ll finish with two more opcodes. With the ones you got so far, and the next two ones you’ll be able to do 95% of the tricks you’ve seen in any hardware synthesizer or sampler. So even if you don’t plan to become an sfz guru, these are the ones you need to know.

So far we know ‘lokey=’ and ‘hikey=’. We also have ‘lovel=’ and ‘hivel=’, to indicate what the minimum and maximum velocity are for the region. Using a previous sample:

sample=Solina-C3.wav lovel=64 hivel=127
sample=Solina-C2.wav lovel=0 hivel=63

Now, the Solina-C3.wav sample will only play when velocities above 64 are played (play hard in the keyboard), and C2 will sound when you play soft. Combining lokey/hikey and lovel/hivel is possible to create keyboard splits and velocity
splits. You might have heard that some formats allow 8, 16 or 32 keyboard/velocity splits, and I can hear that voice inside your head again: “how many keyboard/velocity splits can I create?”. Same answer as before: no limits.

Just as a reference, the whole set of Dimension multisamples is in the sfz format, and was crafted using Notepad.
Those are the real basics, I hope that something in the sfz format will seduce you.

Sourced from http://www.cakewalk.com/Products/DimensionPro/FAQ.asp

Click here for 28,000 answers to your tech questions