Offline

What features would you want available in a VSTi aimed at producing sounds in the style of tracker chip music?

I have thought about the following features, some of which I've already made in synthedit:

1) Basic waveforms (sin/saw/pul/tri/etc) and freeform high resolution wave editing.
2) Pulsewidth LFO (speed/depth/offset), including step modulation (with randomization) meaning that the width only changes on note retrig.
3) Basic ADSR volume envelope and ability to draw freeform volume envelopes.
4) Vibrato including delay and attack parameters.
5) Pitch envelope
6) Multiple voices (maybe 4), for the ability of stereodetuning, detuned delays and pads+arps in the same instrument.
7) Per note compressor.
8) Arpeggiator including custom arps (for ostinatos et c).

Am i missing something?

I am aiming at chipsounds in the style of PC trackers rather than Gameboy, C64 or FM synthesis.

Last edited by joule (Mar 3, 2013 1:02 pm)

Offline
UK

Allowing the user to import custom waveshapes would be cool.

Offline
Chicago IL, USA

all your described features are already in plogue chipsounds... but if you're planning for a free plugin, it could be a good alternative for people with no $$$. Some suggestions I have are the ability to save/load presets, adjustable portamento, and maybe a bitcrusher.

Offline
SadPanda wrote:

all your described features are already in plogue chipsounds... but if you're planning for a free plugin, it could be a good alternative for people with no $$$. Some suggestions I have are the ability to save/load presets, adjustable portamento, and maybe a bitcrusher.

In Plogue I cannot even draw a waveform. Possibly a lo-fi one in the registered version, but I am not sure. Midi delay is available, but not with detuning. Step modulation I am not sure of, but I don't think it's there either. It seems very limited compared to the basic features that I am trying to achieve.

Portamendo, glide and bitcrusher are good ideas! Thanks.

Last edited by joule (Mar 3, 2013 4:29 pm)

Offline
Sweeeeeeden

Just chuck whatever basic features you want in there, but there's something that's perhaps more difficult to code, but highly desirable, namely bandlimited waveforms. This means that the waveform won't alias at higher frequencies/for higher frequency components. (The latter is often the case with some wonky waveforms some people like to use in hand drawn waveforms.) Another thing to consider, even though I'm not sure how to best do this for a non-tracker interface VST host, is pitch type commands like 1/2/3/5 in ProTracker/Fast Tracker style trackers and L/P in LSDj.

Offline
Earth

Bandlimiting is a pain in the neck for sure. If you want to add hand drawn waveforms it's something to consider. If the waveform were limited to like 20 steps or something it would be easier than if it had really high res, I think.

Offline
nitro2k01 wrote:

Just chuck whatever basic features you want in there, but there's something that's perhaps more difficult to code, but highly desirable, namely bandlimited waveforms. This means that the waveform won't alias at higher frequencies/for higher frequency components. (The latter is often the case with some wonky waveforms some people like to use in hand drawn waveforms.) Another thing to consider, even though I'm not sure how to best do this for a non-tracker interface VST host, is pitch type commands like 1/2/3/5 in ProTracker/Fast Tracker style trackers and L/P in LSDj.

Nice ideas.

I think the waveforms should be at least 64 byte and possibly 16-bit. Style with fidelity. What is the practice when it comes to bandlimiting? Would it need a HP+LP filter at certain frequencies to sound better, and at what frequencies in that case?

Thanks a lot for the feedback guys.

Offline
Earth

A popular method seems to be BLEP. It's fairly involved, but there's some code floating around. You'll have to do some research. You may wish to check out something called BlipBuffer by Blarg. Famitracker uses that.

I'm not sure about just filtering. I think it cant be that easy.

Last edited by breakphase (Mar 3, 2013 5:11 pm)

Offline
Sweeeeeeden

The HP filter is needed for different reasons, namely to avoid DC offsets. The LP filter in this case should probably be an FFT of the waveform, and then an inverse FFT when generating the output wave, but leaving out frequency components above the Nyquist frequency. Or, something like minBLEP I suppose.

Offline
Newcastle, UK

I wanted some of the major elements of Protracker/FastTracker behaviour available to me in modern DAWs, but without the fastidious attention to detail that frankly inhibited my creative process for years when I used to argue on forums about the minutiae of interpolation techniques, etc. I've coded my own MOD/XM replayers, I know what's involved in getting *the sound*, but I realised that life's too short and that what's just about good enough for my ears is more than good enough for casual listeners. It's great that people are still concerned about the details, but this is a very personal thing based on the sad fact that time is money and I need to actually finish tracks to deadlines rather than indulge in fiddling with bytes smile

SO... I made Chipslapper, a Reaktor ensemble. Yes, it requires a licenced (or pirated) copy of Reaktor, but I haven't the skillset required to make a C++/JUCE VST so it's the next best thing in terms of portability between Windows, OS X, Renoise, Ableton Live, Logic etc. You can see the details on the page there, but basically it does:

- all the waveforms joule listed plus freehand waveform drawing
- LFO'd PWM
- ADSR (but not freehand-drawn envelope)
- vibrato with a sweep (just like FT2)
- a nice big pitchbend value so you can draw pitch envelopes with DAW automation
- a choice of mono or poly and a basic delay that's designed to sound like multichannel pattern-delay
- a waveform slot for files imported via Reaktor's Sample Map system
- some control over sample start/loop points
- an extra waveform type which is basically all of the samples from ST-01 wink
- a random panner with variable maximum width

It DOESN'T have an arpeggiator (I intended to use built-in DAW MIDI arps), pan envelopes (easily automated in the DAW, which felt like a better solution to me anyway) or randomised step modulation - but read on for more about that last one...

Stuff I wasn't bothered about included compression, filtering, or anything else that I'd probably be doing as part of my general mixdown. Again, fidelity (relative or otherwise) and historical accuracy weren't critical, but 'feel' was.

Then a few nights ago, I decided to redo the whole thing in Max/MSP, to use with MaxForLive in Ableton Live. Then I decided "fuck that" and remade the whole thing just using native Ableton Live devices instead - loads of Sampler instances filled with waveforms. It's called Chipslapper Rack and you can find it on the page linked above. And, although it's arguably more limited than Chipslapper in that it's only for use in Ableton Live, it's got a number of advantages (mostly outlined on my page). Pertinent to this conversation, though, are things like:

- it uses looped 64byte waveforms that I created myself (32bytes wouldn't loop in Sampler) rather than Reaktor oscillators
- Interpolation can be disabled or set to one of three quality levels in Sampler, so they're mostly off but you could change that if you wanted
- Step modulation for pulse waveforms is implemented and it's randomised smile With only changes on note retrig, as joule specified.
- I've built an Ableton Arpeggiator into the rack this time, preset to a close approximation of the kind of arps I often use - but configurable via Macros
- As well as a delay, which works a little better than in the Reaktor version, I've also included Redux for sample/bit reduction. Probably unnecessary, but once in a blue moon I'd use it for a cheesy automated drop/fadeout
- Input velocity can be adjusted on the panel Macros too, as well as the ADSR, the random pan width (0 == centre), portamento time (you can dig into the Sampler instances if you want to change between portamento and glide; sadly that option couldn't be Macroised)
- White, pink and brown noise, still beholden to the ADSR and most of the other features
- Best (worst) of all...I've now got the first three ST-XX sampledisks built in as the final three Waveform types; 'ST-XX Sample', needless to say, lets you scan through all of them. A few are missing from ST-03, as it's got more than 128, but who cares smile

Again, the big caveat - I wrote this for my own use. It does exactly what I need and it makes it really easy for me to get some of the sounds/behaviours I want in a fully-sequenced multichannel DAW track without having to render out of Milkytracker or whatever, as well as taking advantage of all the handy parameter recall stuff in Reaktor/Live. If anyone else finds either of them useful, that's great - I've put them both up for free, so go mad. I should say that I'm unlikely to implement any major changes or alter anything that somebody might think isn't 'authentic' enough, but since Chipslapper is an .ens and an .alp, the source is all there for people to mess with if they want.

Hope it helps!

Offline
Newcastle, UK

By the way, I *think* (though I'm not 100% certain) that if you load a Sampler-based Instrument Rack in a version of Ableton that doesn't have the Sampler instrument installed/licenced, it reverts to using Simpler but prevents you from tweaking the settings...but allegedly allows those Samplers to behave as the creator intended. If that's true, it means that this can be used in non-Suite, Lite or even free trial versions of Ableton Live in case anyone's interested in taking a look.

Offline
South Jersey, USA

random button or gtfo

Offline
Sweden
joule wrote:

Nice ideas.

I think the waveforms should be at least 64 byte and possibly 16-bit. Style with fidelity. What is the practice when it comes to bandlimiting? Would it need a HP+LP filter at certain frequencies to sound better, and at what frequencies in that case?

Thanks a lot for the feedback guys.

You can get rid of most aliasing by oversampling and downsampling with a steep lowpass filter, but for the best band limiting you would probably make use of band limited impulse trains. There's an LGPL library for doing just that here http://code.google.com/p/blip-buffer/