Posted 30 April 2017 - 14:42
Second: This mental model of Renoise's sampler is not complete I only researched it as far as needed to solve this particular problem, which turned out to be mainly about disabling certain behaviour, make it act like a "dumber" sampler actually. Once disabled, I didn't investigate how these features exactly work when enabled (and especially how they interact). That's something for future research, maybe. But if you just want full control, this is sufficient to eliminate variables.
So, what is going on?
I love acid. I have so many basic sawtooth beepy lowpass reso-filtered cutoff envelope instruments saved in my user folder it's not even funny (no actually it is hilarious). Now, my "basic sawtooth acid" instrument, has a single-cycle sawtooth sample and a very basic device chain of a Key Tracker, triggering a one-shot LFO (exponential decay), modulating the cutoff of a Lowpass resonance filter. And a whole bunch of macro controls. You know the drill (nowhere near a proper 303, but that's for another post) (or possibly a whole book). Sadly this isn't about the filters, and if you're following along, disable them for now because the phase shift can confuse matters a little. Get this right without the filters first.
Remember that acid bass lines are monophonic. We're not going to play chords with this. So flip that "Mono" button (top right in the sampler screen).
But now it's just a monophonic sawtooth single-cycle chip sound! Yes, and it's not working properly (I was gonna say "as I expected", but IMHO it really skirts the line).
To see this, program a little 16-step "acid" bass line (lock it to the Blues scale if you must ), without note-offs, just the instrument interrupting itself through the NNAs.
So per default we have no modulation, no attack, no release, no "quick fade" (the tiny button next to Autoseek), and the NNA is set to "Note Off", not that it should matter. So what should the waveform of this 16-step bass line look like?
My guess would be a single sawtooth oscillator playing at the desired pitch frequencies, resetting phase at every note hit. Now render the loop to sample and inspect the wave. This is not what it should look like!
You should be seeing some curvy artifacts and peaks at the spots where one note hit ends and the next one starts. Expected would be the sawtooth playing until the first note ends, reset phase and start playing the second note. What we're seeing instead, is the first sawtooth playing normally for the duration of the first note but when it should just stop, instead it fades out very quickly, this fade running into the sawtooth of the second note!! This is why I say it's not working properly, because my instrument is set to Mono but for that very short fade duration we actually have two voices of the sample playing at once.
Does this really matter? Well for one, it can cause unwanted signal peaks because two sawtooths peak higher than one (even if it fades out real quick). Second, if you use my trick to fix this problem, you get another elusive feature for free: A free-running oscillator!
OKAY THEN BUT WHAT IS THE TRICK?!! Sorry, I talk too much. The trick consists of two parts:
In Volume Modulation, an ADSR device with 0.0 attack, 1.0 sustain and 0.0 release. I have this one saved as a preset called "ADSR Zero".
A phrase with a single note and G FF (glide) in the effects column. Saved as phrase preset "GFF". Set phrase playback mode to "Program" so it plays for every note hit. "Keymap" stretched over the full note range also works.
You need both. You'd think "ADSR Zero" would be a no-op compared to no modulation, but it subtly changes what the fade out looks like, as well as how the glide operates, for some reason. Also, putting "GFF" in the box next to the Mono button instead of using a phrase won't do the trick. The little "quick fade" button doesn't do much (except a quick fade at the start of the loop, so you want it off). The NNA set to "Note Off" or "Cut" doesn't seem to matter for this scenario. It's educational to try all these different combinations, render and inspect, see how they differ (tip: use a square instead of a saw and it'll be easier to reason about the shape of the fades: some are linear, some aren't!). But from what I've been able to gather "ADSR0 + Phrase GFF" is the minimal basic setting to get the desired behaviour.
A/B it for yourself, especially at low frequencies, not resetting the phase every note hit sounds so much cleaner. Analog-like, not in the sense of "warmer" but in the sense of "cleanly crisp and accurate". It's easiest to hear if the notes connect with no pause/gate-off in between, but in theory, a free-running osc would result in a cleaner spectrum even when gated.
Okay, now re-enable the filter, add some slides in your loop with the Uxx and Dxx commands, macros to the filter cutoff/envmod/decay (resp. LFO Offset, Amplitude and LPC) and resonance, attach to MIDI knobs, hit play, tweak knobs, and say goodbye to your afternoon BECAUSE ACID
There's some weird subtle behaviour going on here. ANY additions and/or insights are very welcome.
It has to do with the sample waveform being set to loop. You also get it, for example, with a looped breakbeat that you hit at the start of each pattern. Quite unwanted behaviour in this case as well, because your peak transient will often be at the start of this loop, resulting in a larger peak amplitude for your mix (and/or confused compressors!). However in this case, what also works is disabling the sample loop and just hit the sample every 4 bars (or however long it is). If there's no loop, there's nothing to fade. Personally, for breaks, I think that's easier and clearer.
Happy free oscillating!
- Neurogami and Meef Chaloin like this
Posted 30 April 2017 - 15:53
This is a nice find.
First, for most people it would probably be cool to have a small example xrns to the trick - to be able to understand it from how its working, not only by technique description.
I also want to share my insights on this, as I had done something similar a while ago. Though much more brainfucked in concept. It was quite some time ago and I'm currently concentrating on other things, but I might dig it out one time, it is in unfinished state though & would need some more love to be fully functional and closer to the original in behaviour.
I was also trying to recreate a 303 sound and aimed to make it sound as original as I could. I think I could get pretty close using original 303 waveform samples I found on the net (full clean saw and square with maximum open filter low reso samples, not single cycle but loops of multiple cycles to make it more organing and have the noise floor act more faithfully if driven afterwards) and the renoise "diode" filter. But for me three things were essential, first being the free running osc, second the portamento, third (at which I abandoned the project) the filter envelope behaviour.
I also once made a kind of tape speed instrument simulator with start/stop noises in similar ways to yours, it depended more on the modo mode trick and would retrigger if notes weren't played in legato fashion or sequenced via gxx commands.
I solved the legato/freerun problem a much more complicated way. The instrument requires a (very low) note to be held in the tracker, to play the basic oscillator patch. This is just a single note keyzone. The main "melodic" keyzone just triggers a dummy sample, which will volume gate (or rather fire the envelope) the basic osc tone, BUT it is also keytracked and will transpose the oscillator correctly, via a formula device and also with smoothing to try to get close to the original glide behaviour. The pitching was completely done via the pitch modulation transposing the free running oscillator. For keyjazzing/recording I had to layer/expand the osc to the "melodic" zone, though this will not have the same freerun behaviour like the other state, and the keyzone can be removed once the notes are sequenced together with the osc trigger note. Alternatively one could make sure the osc trigger note is locked held somehow, I haven't gotten around to finding a software tool for that, but it would theoretically enable full keyjazzing with proper free running oscillators. One could not use the gxx or uxx/dxx commands anymore - but the glide I implemented would be closer to the original, having a configurable time in milliseconds to reach the target note. I think I could also sequence the glide commands kind of like you would set them on a 303 for individual notes in the pattern data, I cannot remember though if I used trigger keys (key/veltracked) or other commands.
- Neurogami likes this
Posted 30 April 2017 - 17:57
And yeah, me too! Of course I was trying to build a TB-303 instrument when I discovered this technique Had to, because like you say, it needs the free running osc. And it really needs to be monophonic, no stray fadeout tails from previous notes in my bass line!
In practice though, 303 note hits never "touch" unless they have SLIDE on. According to docs (see links below) the 303 has 6 ticks per step and the gate is on for ticks 0,1,2,3 and off for 4,5. And if you implement the slides using Uxx/Dxx you don't get a new note-on, you get no tails and the osc just keeps running without needing any tricks. I ran into this first when I tried to make slides with Gxx. In the end I settled on Uxx/Dxx, because it doesn't trigger a new note-on and this agrees with the Main Envelope Generator that also doesn't reset but keeps decaying into a slid note.
As you probably know, technically a 303 pattern has SLIDE set on the step that it doesn't affect at all, it's the step after that which slides from the first note to its own note. I chose not to recreate this quirk in Renoise because you'd need some craaazy hacks to do it, just for behaviour that is arguably somewhat counterintuitive in the first place. So in the renoise version you'd program your slide on the note that's actually sliding. Having stepped away from that, I decided I might as well use Uxx/Dxx instead of Gxx because it would allow me to get closer to the actual TB-303 sound, not generating note-ons for the slid notes.
But I digress If you're willing I'd love to compare notes about your attempts to recreate a somewhat faithful TB-303 instrument in Renoise! These are the documentation resources that I used mostly:
http://www.firstpr.c...303-unique.html -- this one is about the filter envelopes and the accent circuit. I'm not too knowledgeable about electronics, how exactly these resistors, diodes and capacitors do their thing. I just sort of guessed their behaviour from the description and tried to rebuild it using LFOs and Formula Device. However, I remember from high school physics that you can quite easily simulate a capacitor circuit with a differential equation and given the numbers are also there, maybe it could be done much more exactly. That would be super cool, just entering the formula and numbers and getting the proper envelopes like that!
http://www.firstpr.c.../303-slide.html -- this one is a bit easier to understand and describes the gating of steps and the SLIDE behaviour.
I think I got pretty far in the emulation of a TB-303 instrument from these docs. I tested it with the TB-303 bass line tune in Daft Punk's "Da Funk", check it on my soundcloud and it sounds pretty aight, IMHO (but work-in-progress is gonna be in progress, always).
The main thing where I got stuck is actually getting the scaling of the knobs right and how the addition of multiple envelopes exactly maps to the cutoff parameter of the diode filter. So if you could link me to those full 303 samples that would be super useful for tweaking the ranges of everything I know I came across a set of someone who recorded 303 samples for research like this, yeaaars ago, but haven't been able to find them again.
I like your "much more complicated way" idea as well Using a separate keyzone for control is an idea I have come up with a few times as well, trying to solve other problems when subjugating Renoise instruments to do my bidding. Although in every case I either found some other way to do it, or decided it wasn't worth the trouble, so I never actually used this solution
Please don't forget to check out my Renoise-303 demo recording of Daft Punk's "Da Funk" acid loop and tell me what you think. Did I get any close according to your ears? It's very possible that we've been optimizing for different sonic quirks in the 303 sound, so maybe you hear some aspect in it that I've been okay with but you'll say "that sound is in no way a 303" haha, and I'd love to hear that critique too ;-)
It's basically that one loop and me twiddling knobs for 6 minutes. As would anyone. It's a miracle that people owning actual TB-303s every get *anything* done, let alone a track. Because you got these knobs, you see ...
Edited by triple zero, 30 April 2017 - 18:01.
- Neurogami likes this
Posted 30 April 2017 - 19:15
Heya, sorry, I'm a bit too busy with my time dedicated to renoise - trying to learn proper mixing atm, but I might come back to the 303 project at some time. Also I'm more the heavy oozing rack basses fan, not so much on 303 acid...
I looked in my sample library, and I think I used the samples from here:
finding the most open longest held notes that aren't too much splattered by the resonance, and looping multiple cycles of it. I also synchronised the phase of saw and "square" so the saw peak overlaps sample perfect to one square peak, then you can crossfade between the modes and also positions in between will work very well! It will really scream "303" in your face when you use the renoise diode filtern on those...I think they are raw samples from an original 303 used to calibrate a hardware clone to match behaviour....
For finding the behaviour of the filter cutoff, additionally to the docs you linked (they look somewhat familiar to me!) what I did was looking for some open source 303 clone software and trying to adapt the behaviour that was done in the code. But I hadn't finished the project due to it becoming more and more complicated, the more I tried to achieve with formula devices, and the formula device limitation of one update per tick made it unattractive for me. For the glide I think I had also used glide from position with the glide command, not the original "look into the future" model, after all we build our own instruments so they are easier to handle and sequence than the original... If I were to do again, I'd for sure still go with the orginal samples and diode filter, but try to keep the rest as simple as possible - rather than wasting time recreating it with a software that was never meant for it.
Edit: Sorry, the link got fucked up, corrected it I think
Edited by OopsIFly, 30 April 2017 - 21:18.
Posted 30 April 2017 - 23:00
So the link was borked, now it should point to the proper page.
I just looked at the samples again, what you will want as material is the file "SET-E2.wav", the first (saw) and the third (square) notes, then tweak at the samples a little to even out the decay, using portions from the beginning of the note, without the very attack, as it will be the "brigthest" material to work with. Other than that the page lists the system of knob settings and such for each note.
@triple zero yeah, your recreation of "da funk" is pretty neat. you will see the original samples will yield a much more "fleshy" result than using a clean saw/sqare. You got the distortion pretty well, just the mix is a little rough and direct, but the 303 line works pretty well for me. Didn't double check the original, but the tune still lingers in my head with a flashback from the 90s, together with the poor man with the dog head....
Posted 01 May 2017 - 00:05
Hi, me again.
You seem to like 303 sound, so I extracted (again, couldn't find the proper version of my old attempt) two usable oscillators from one of the samples of the calibration pack & evened them out a bit.
Pretty happy, each 9 wavecycles long for more organic grit and in sync for blending between saw and square. I put them into an instrument that feeds into analog diode filter device so you can quickly see how it sounds in minimalistic fashion. Well, they are a little bit dull, but I belive I used the best samples possible from the pack.
Maybe you find this useful for your work, saving you the time I just wasted.....haha, I wanted to have the cool oscs ready for fun anyways, its a nice addition to my library...
Posted 15 August 2017 - 13:58
Or you could just buy abl 3 ..which is pretty damn close to the real thing
THERE IS NO RELIGION SUPERIOR TO THE TRUTH
THERE IS NO TRUTH SUPERIOR TO THE ONE I CHOOSE
C'EST MIEUX D'ETRE BELLE ET REBELLE
QUE MOCHE ET REMOCHE
Posted 27 December 2017 - 20:05
Hey, as promised (did I? ah well), I was going to put together an example .xrns, so that people can check out the difference themselves.
freerunning-example.xrns 14.53KB 38 downloads
It's got three instruments:
0. "naive" saw. just the Basics > chip_sawtooth_C1 waveform preset, with the keyzone set correctly to C1. nothing else.
1. ADSR0 saw. same as before, except we add a modulation set with an ADSR device with zero attack, max sustain and zero release.
2. freerunning saw. this one uses the trick as I explained in the first post of this thread.
The demo patterns are just some random pattern noodling on an F double harmonic scale. No filters, effects or envelopes were applied for clarity of the demonstration. I encourage you to go nuts with filter LFOs, some octave doublings and some amp env gater fuckery and get your psy on :-)
I was gonna throw in three more instruments for rendered waveforms of the corresponding demo patterns, just so you did't have to. Unfortunately that made the .xrns too big to attach to this post :-)
I have, however, these screenshots of the rendered waveforms. Notice how the naive saw just looks like a total mess:
The ADSR0 saw is better, but ...
... if it's all the same, I'd rather have this nice free-running one!
BTW, you get some cool bonus weird flangy sounds if you play two or more tracks at once I wonder what happens if you phase-invert one of them?
Also tagged with one or more of these keywords: trick, oscillator, dsp, acid
Renoise Downloads →
Renoise Song Forum →
Ideas & suggestions →
Tips & Tricks →
Ideas & suggestions →