DimensionalTips: Stack Yourself

Author
René
Max Output Level: -68 dBFS
  • Total Posts : 1103
  • Joined: 2004/01/06 13:15:57
  • Status: offline
2005/06/18 10:23:10 (permalink)

DimensionalTips: Stack Yourself

This one is intended for tweakers and advanced users, or for anyone wanting a powerful oscillator stack in Dimension. If you're up to follow it, I suggest you get a good cup of Colombian coffee at this point.

In 'sfz 101' we covered the basics on how to map samples in the keyboard in a very simple way. A few samples included how to create keyboard or velocity switching, and how to stack and layer different samples. Now we'll cover the same subject, but applied to wavetable oscillators instead of samples.

As you surely know from reading Dimension's Users Guide, if we load a wave/aiff file directly in Dimension, and the file has less than 3000 samples, instead of treating it as a transient sample Dimension will use the sample contents to create a wavetable oscillator on-the-fly.

Dimension will assume that the sample loaded contains the definition for a single-cycle of the desired oscillator waveform, and will resynthesize that waveform to create a full-spectrum oscillator with zero aliasing based on that cycle.

However, if that transient definition is included as a sample inside a .sfz file, Dimension will treat it as a sample, unless we instruct it otherwise. Here's how we say that we want the sample to be treated as an oscillator single-cycle definition:


<region> sample=saw mini.wav oscillator=on


That means that the sample 'saw mini.wav' will be considered as a single-cycle waveform, just like if we'd load it directly (and it has less than 3000 samples).

Ok. Now that we know that, we can use the same keyboard/velocity switching and stack/layer tricks we've learned in 'sfz 101', but with oscillators. Using those, we can assign different oscillators to different key ranges, velocity ranges, we can stack oscillators, and we can stack or switch oscillators with samples. Cool innit?

Let's create a simple example to showcase the oscillators stacking majesty. The idea is to create a powerful stack of multiple saw waveforms, like the 'multisaw' or 'supersaw' stacks found in other synthesizers, with adjustable detune.


We'll start by creating a new text file, inside your $\Multisamples\Wavetables\ folder, so we can use an existing wavetable to create our stack. Rename the new text file to 'multisaw.sfz', and then add the following lines to it:

<group>
sample=saw mini.wav oscillator=on oscillator_phase=-1

<region> pitch_oncc140=-20
<region> pitch_oncc140=-10
<region> pitch_oncc140=10
<region> pitch_oncc140=20

Then save it, and we're done. Now we have a powerful stack of four saw waveforms, and we've assigned the detune control of each layer to the unused-in-this-patch BITRED knob in the interface. If you've followed the instructions carefully so far, you should be saying 'Whot?' by now while scratching your head. Ok, please stay with me. Let's examine the sfz definition piece by piece.

First we have the <group> opcode. A <group> opcode is a way of simplifying the definition file, by saying 'what I say now goes into every region that follows'. Therefore, anything we write after <group> will be applied to all regions following, till the end of the file or till the next <group> opcode arrives.

Then we have the well known 'sample=' opcode, which tells Dimension that we want to create our oscillators based on the 'saw mini.wav' single-cycle definition, which is in your \Wavetables folder by default. Then we have the above mentioned 'oscillator=on', which tells the player we want an oscillator, not a sample.

Then the first unknown opcode appears: we have an 'oscillator_phase=' thing, (which is new for 2.0.1, requires the patch applied). This opcode tells Dimension what the initial phase in the cycle should be for the oscillator. For z3ta+rians, there's nothing new here: it's the definition equivalent to the PHASE slider, other synth users might also find this familiar. What it is new here though, is the fact that if we specify -1 as value (as we do in this example), the phase will be randomized for every new note. This allows us to escape from the huge pop on note-on that would cause four saws stacked in-phase.

Then we've got those four <region> lines. We've defined the main opcodes within the <group> header, so those will be applied to every new region we create. Therefore, we only need to specify those opcodes which are particular for each region now.

In each region, we've used the simple 'pitch_onccXXX=' opcode to 'link' the pitch of the oscillator to a physical controller. In this case, you just move your MIDI CC 140, and you'll be controlling the oscillator's pitch, in the specified depth in cents. Oh right, CC 140 doesn't exist... does it?. We're almost there.

All dimension knobs are mapped as if they were MIDI controls, with values that the midi spec can't reach. This allow us to 'recycle' the interface knobs for specific purposes within an sfz file, when a particular knob is unused. Bitred knob is 140, and that's the one we've used in this example. So what we've done is linking the pitch of each oscillator to the bitred knob, with a different amount in each layer (Note that the knob will work even when the button is in the 'off' position. You should only turn it on if you want the bitred effect applied at the same time).

That's it. If you're too lazy to create the sfz file yourself, you can still try it. I've created the file for you, you can get it from here:

http://www.rgcstuff.com/External/Multisaw.zip


There're two files inside the zip: 'multisaw.sfz', intended to go in your $\Multisamples\Wavetables\ folder, and 'multisaw test.prog', which you can place anywhere. The latter is a test file program with a trance-oriented patch.

Simple experiments could include modifying the sfz file to get seven saws instead of four, making the detune amounts more extreme, etc. Hope you find this tip useful.


-René
#1

5 Replies Related Threads

    b rock
    Max Output Level: 0 dBFS
    • Total Posts : 8717
    • Joined: 2003/12/07 20:31:48
    • Location: Anytown (South of Miami), U.S.A.
    • Status: offline
    RE: DimensionalTips: Stack Yourself 2005/06/18 16:12:58 (permalink)
    I like the tutorial style, Rene. One with the basics, another that pushes the envelope. You'll put out some quick tweaks, and follow that up with an unrelated mind-blower. Anyone wanting a well-rounded understanding of .sfz and Dimension will soon have a great headstart by simply reading these DimensionTips end to end. As a rule, I don't read tutorials, but I really enjoy this series. Not dry, logical flow, and leaves the reader with the possibilities open-ended.

    You're tossing out these new code additions and details of Dimension's enhanced .sfz definition with an almost casual air, and I'm sure that you're aware that opens up as many questions as answers.

    "Hmm ... random initial phase? Now how many other parameters can I randomize in that manner?" or,

    "BitRed is bound to a "CC" number of 140. That means that all the others are as well. I wonder what the number for xxx is. Maybe I should build a chart."

    A small part of me wants to ask you for clarification or specific documentation, but the majority of me is enjoying the hunt. The wavetable oscillator feature is one of the first things that I wanted to dive into in Dimension. Here we are two months after release, and I've barely scratched the surface. There's just too much to do in this P5 upgrade. But I've gone deep enough to see that (within the usual synth-specific limitations), with enough perseverance, you can build just about any synth that you can dream up here. Reminds me of your statements early on about Dimension being a sample synth, not a sampler. It's a different mind-set altogether.

    Thanks for the continuing tutorial updates, and for the needed nudge to get back to alternate Dimensions. Those of us who seek out the advanced stuff don't always respond very quickly to your new tutorials. We're too busy burying our heads into applying the knowledge that you've laid out. Great stuff; please keep it coming.
    If you're up to follow it, I suggest you get a good cup of Colombian coffee at this point.
    Now that's a given ...

    Edit: Ah, see? The benefits of this tutorial style are already paying off for me. It always bugged me that the Mod Wheel bindings in the E175 guitar programs were invisible to the MIDI Matrix. The results are a neat whole-step hammer-on with a MW value greater than 63 on all of the E175's except the natural (slide mw) program. The answer just came to me. To paraphrase a recent history media sound bite: "It's (in) the sfz, stupid!". Very slick, Rene.
    post edited by b rock - 2005/06/18 16:37:51
    #2
    René
    Max Output Level: -68 dBFS
    • Total Posts : 1103
    • Joined: 2004/01/06 13:15:57
    • Status: offline
    RE: DimensionalTips: Stack Yourself 2005/06/18 17:10:34 (permalink)
    Those of us who seek out the advanced stuff don't always respond very quickly to your new tutorials. We're too busy burying our heads into applying the knowledge that you've laid out. Great stuff; please keep it coming.


    Thanks b rock, great timing. I was certainly starting to think that I was boring everyone to death.



    "Hmm ... random initial phase? Now how many other parameters can I randomize in that manner?"


    There're randomizers everywhere in the sfz format Here's a quick list of 'special' controls which complete the MIDI controls (note the Unipolar and Bipolar random):

    CONTROL_BEND 128
    CONTROL_CHANAFT 129
    CONTROL_POLYAFT 130
    CONTROL_VEL 131
    CONTROL_RVEL 132
    CONTROL_KEY 133
    CONTROL_KEYGATE 134
    CONTROL_URANDOM 135
    CONTROL_BRANDOM 136
    CONTROL_ALTERNATE 137

    Those are Pitch Bend, Channel Aftertouch, Polyphony Aftertouch, Velocity, Release Velocity, Keytrack, Keygate (0 if no notes played, 1 if notes played), Unipolar Random and Bipolar Random.


    "BitRed is bound to a "CC" number of 140. That means that all the others are as well. I wonder what the number for xxx is. Maybe I should build a chart."


    You greedy southern (the only reason I didn't post the table previously was to be able of using this phrase I learned in Boston last week )

    GUI_BITRED = 140,
    GUI_DECIM,
    GUI_CUTOFF,
    GUI_RESO,
    GUI_DRIVESHAPE,
    GUI_DRIVETONE,

    GUI_EQ1ONOFF = 150,
    GUI_EQ1GAIN,
    GUI_EQ1FREQ,
    GUI_EQ1BW,
    GUI_EQ2ONOFF,
    GUI_EQ2GAIN,
    GUI_EQ2FREQ,
    GUI_EQ2BW,
    GUI_EQ3ONOFF,
    GUI_EQ3GAIN,
    GUI_EQ3FREQ,
    GUI_EQ3BW,

    GUI_DLYINPUT = 170,
    GUI_DLYTIMEL,
    GUI_DLYTIMEC,
    GUI_DLYTIMER,
    GUI_DLYFEEDB,
    GUI_DLYCUTOFF,
    GUI_DLYRESO,
    GUI_DLYDRY,
    GUI_DLYWET,
    GUI_DLYLFOFREQ,
    GUI_DLYLFODEPTH,

    GUI_EGDEPTH1 = 195,
    GUI_EGDEPTH2,
    GUI_EGDEPTH3,
    GUI_EGDEPTH4,
    GUI_EGDEPTH5,

    GUI_LFOFREQ1 = 200,
    GUI_LFOFREQ2,
    GUI_LFOFREQ3,
    GUI_LFOFREQ4,
    GUI_LFOFREQ5,
    GUI_LFOPHASE1 = 205,
    GUI_LFOPHASE2,
    GUI_LFOPHASE3,
    GUI_LFOPHASE4,
    GUI_LFOPHASE5,
    GUI_LFODELAY1 = 210,
    GUI_LFODELAY2,
    GUI_LFODELAY3,
    GUI_LFODELAY4,
    GUI_LFODELAY5,
    GUI_LFOFADE1 = 215,
    GUI_LFOFADE2,
    GUI_LFOFADE3,
    GUI_LFOFADE4,
    GUI_LFOFADE5,
    GUI_LFODEPTH1 = 220,
    GUI_LFODEPTH2,
    GUI_LFODEPTH3,
    GUI_LFODEPTH4,
    GUI_LFODEPTH5,

    GUI_PAN = 230,
    GUI_X,
    GUI_Y,
    GUI_VOLUME

    That's the top-secret list of usable gizmos, please don't make it public. What they're usable for, it's now all up to you!


    -René
    #3
    sluggo
    Max Output Level: -87 dBFS
    • Total Posts : 176
    • Joined: 2004/03/12 12:08:23
    • Status: offline
    RE: DimensionalTips: Stack Yourself 2005/06/18 18:36:09 (permalink)
    very cool Rene, I like the flexibility of Dimension.

    Can you implement these opcodes?
    SLUG_BET
    SLUG_ULT
    SLUG_STU

    Thanks
    sluggo

    BTW, FYI I got Dimension to nicely playback a converted program of Scarbee's J-Fingered Bass (A string) with several key switches. I haven't tried converting his larger libraries, it's too much work to decode 1000+ samples and where they're supposed to be mapped. I will do it eventually though, once extreme sampler convertor gets updated.
    #4
    b rock
    Max Output Level: 0 dBFS
    • Total Posts : 8717
    • Joined: 2003/12/07 20:31:48
    • Location: Anytown (South of Miami), U.S.A.
    • Status: offline
    RE: DimensionalTips: Stack Yourself 2005/06/18 18:37:55 (permalink)
    You greedy southern (the only reason I didn't post the table previously was to be able of using this phrase I learned in Boston last week)
    That's hilarious, and strangely ironic. Although I've used South Florida as a home-base for a couple dozen years now, I'm still referred to around here as "that Damn [fill in the blank] Yankee". (That's the kindest description.) Yankees being vistors from the North; Damn Yankees describing those that stay. Greedy? Yes. That thirst for complete knowledge is never quenched.

    I will thank you for saving me at least a day's work in hunting down the parameter connections. It'd be possible to hack it around in a trial & error, but now it'll be much easier to get right to work on it. All this talk of randomization tends to often be equated with 'non-musical', but if it's used with subtlety, I find quite the opposite to be true. Not the same as 'humanized', but more in line with natural emulation of chaotic events. Of course, you can always push that to extremes and come up with some wild, unnatural effects; that's the beauty in the range of possibilities.

    I love the idea of the extended continuous controller 'MIDI' spec. Not only is it an extension of familiar territory, but the recycling aspect of utilizing unused GUI controls is an efficient way to go. I'm seeing more and more manufacturers going this route, and somehow this strikes me as less confusing than taking the NRPN or sysex directions. Even though every implementation will differ without standardization, there's a certain ease of use and freedom in this that appeals to me that I haven't found with the 'defined' routes.
    I was certainly starting to think that I was boring everyone to death.
    I don't think so, Rene. There's just so much to take in with Dimension, all the other V2 enhancements, and now the 2.01 update, which is so much more than a maintenance release. We used to be lean & mean here, but I think that we're now getting spoiled with all of the options and the knowledgeable input from everyone involved. I hope that everyone realizes that this is a give-and-take situation, and that the 'bubble' won't stay afloat under its own power.
    That's the top-secret list of usable gizmos, please don't make it public. What they're usable for, it's now all up to you!
    Mum's the word. As for usability, I'm having a hard time staying focused in one cool direction without veering off into another equally exciting path. I'm very thankful for the response.

    Edit: I neglected to acknowledge the additon of .aif support to Dimension in the 2.01 update. This one really opens things up to a lot of source material that was previously unavailable (without conversion). It's been mentioned in passing, but I think that one is important enough to repeat here. I assume that we enjoy the same range of sample rates and bit-depth that the .wav implementation in Dimension supports. From what I understand of the two formats, the .aif format offers a more complete feature set than .wav, and gives access to a lot of the digital audio archives from the seminal days of digital audio. I find myself once again thanking you for that open-minded consideration.
    post edited by b rock - 2005/06/18 19:05:21
    #5
    ucacjbs
    Max Output Level: -73 dBFS
    • Total Posts : 866
    • Joined: 2004/05/16 18:17:38
    • Location: Philly
    • Status: offline
    RE: DimensionalTips: Stack Yourself 2005/06/20 22:46:53 (permalink)
    Hi René,

    thanks for another very interesting set of tips. I'll be sure to start experimenting with this stuff some more; this mini-tutorial together with the example you gave on the sample reversing thread are really beginning to show the power and flexibility of the sfz format. As a programming geek, I can see that the architecture of Dimension has been given some serious thought. All I need now is to somehow become independently wealthy so that I can spend more of my time getting to know it.

    ben

    #6
    Jump to:
    © 2024 APG vNext Commercial Version 5.1