Device Details

Device Overview

Name/Version: TB-305 1.4.1
Author: guitarguy93  
Description: After 2 years, I'm back!

Anyone is more than welcome to use parts of the device in their own. All I ask is that you let me know and give credit where credit is due.

Thinking about making a 303-style sequencer with it. Probably as a separate device.



-Despite my efforts, the envelope does NOT model an analog envelope.


v 1.4.1 Tweaked the UI a bit more and added an option to select the old (Before 1.4) version of the square wave and the current version.

v 1.4.0 The decay dial no longer has an effect on amplitude. Amplitude is now at a set envelope following what I've heard in clips. I've also added an envelope amount dial to adjust how much the velocity sweeps the filter. I decided I'd get rid of the limiter, as it simply served no purpose after a volume slider was added. I reduced the maximum cutoff of the filter to help with some "hairy" high-end from aliasing. Finally, I changed the square wave to better match an oscilloscope view of it I found on Google. You'll be able to see it in the oscilloscope that I threw into the presentation of the device. I'm pretty sure that covers it all. If I missed something, you'll probably figure it out. ;) I'm insanely tired, so forgive me!

v 1.3.1 I adjusted the "Sustain" phase so that the amplitude envelope will now sustain at 3% of the maximum amplitude. The filter envelope will sustain at 1% of the maximum amplitude, multiplied by the filter frequency, plus 200. Doing this makes the filter cutoff sustain at about 440hz with the "Freq" knob turned up all the way. Both of these adjustments to my last update replicate the original even better, as the envelope on an un-modded TB-303 never goes to absolute 0, I think, until a new note with a new envelope is triggered.

v 1.3 I've changed the envelope to model an analog envelope. I've also added in two additive oscillators that consist of 4 [cycle~]s at different octaves. One oscillator involves odd harmonics, the other is even. The main oscillators and the two additive oscillators have separate volume controls for blending in more harmonics with the main wave. Also, the envelope will now never retrigger if it receives a note-on before a note-off. This means that the volume will NOT go back to maximum if you send a note-on before releasing the previous note. The decay phase will continue, rather than restart, also. Doing this seems to emulate the original better. Along with that, I've replaced the oscilloscope with a spectrogram.

v 1.2 I believe I've gotten rid of that "thump" that used to occur on the release phase. Let me know if I need to adjust it more.

v 1.1 The filter's "Freq" control is now adjustable in real-time, rather than only before note-ons.
--NOTE: I was, unfortunately, unable to figure out how to get rid of that "thump" or implement an envelope amount control. I will think long and hard about this, and I hope to have it figured out within the week.

v 1.0 When the glide is turned up, it will now NOT retrigger either envelope. In the previous version, the Filter Envelope would retrigger regardless.

v 0.9 First Uploaded
The last one I uploaded didn't work, because I forgot to freeze the device. This gave me the chance to change some little, visual things that I found annoying after I uploaded the last one.

This is my take on emulating the TB-303. I know this has been uploaded before, but I haven't seen anyone use the same type of "square" wave that is used in the original. I've done some research, and decided that the wave they call a square can be reproduced in the way that I've done it in this device.

Much thanks to dude837 for writing a tutorial about this. I didn't follow it step-by-step, but he gave me the overall idea and outline of it. I didn't even know what a TB-303 was until I watched his tutorial. The URL i'm posting is a link to his YouTube channel. I strongly recommend it to anyone looking to get the most out of Max/MSP or Max for Live.

Please, feel free to let me know what you guys think, what I should add, etc. I plan on making this a very versatile synth, but I want to know what you guys think should be done to it first!

Device Details

Downloads: 1851
Tags synth
Live Version Used: 9.0.2
Max Version Used: 6.1.2
Date Added: Jun 09 2013 19:06:55
Date Last Updated: Jan 19 2015 14:25:36
Average Rating (1) 5
Rate this device: (must be logged in to rate devices login)
Device Type: instrument_device
URL (optional):
License (more info): None

Device Files

Device File: TB-305-1.amxd


Please don't post the same device twice. You should update the same device entry in the library with the new version each time rather than post the new version as a new device.

Sorry about that. I wasn't entirely sure of that point. (I'm new to this site.) I figured that I should probably delete the original, but I wasn't 100% sure on how others have done it. I'll delete the old one now. Thanks for letting me know.

How ironic that someone else posts an update of a different synth just shortly before I posted mine. I can assure you, this device uses NONE of that code intentionally. Any help I had was credited in the comment boxes in the synth's patching view, or in the description posted here.

your filter control seems to have some severe problems - when the envelope ends the filter drops all the way down to zero, making a massive thump a lot of times.
And the frequency control doesn't work in real-time, only before a note-on.

The filter cutoff should set a base level, that can be adjusted at will, and the envelope should add to that, and the filter envelope amount should be adjustable.

Thanks for letting me know. Never really noticed the "thump" that you're talking about, but I'll look into it and see what I can do about that. I'll also fix the filter frequency control to work in real-time. That was something I completely forgot to implement. Big mistake there. I'll get these things worked on ASAP. I'll definitely try my best to have these things added/fixed by tomorrow.

I've been able to successfully recreate that "thump" that you were talking about. It seems that when the amp release is greater than the filter release, the filter will drop down before the signal is off. I tried to reconcile this by adding 80 to the filter envelope signal, but this had no success. I'll experiment a little bit and see if I can't get rid of it.

Why dont people use single cycle waveform samples from the original hardware?
Its much more realistic. The 303 is good cause its actually bad:)

I could've easily used samples to duplicate the 303, but I wanted a challenge and saw that as too easily done. This wasn't a hard synth, once I realized how to gate a signal at an audio rate, but writing this synth has and still is helping me understand Max and audio in general. The point of this wasn't to recreate the synth exactly, but rather to learn how to recreate it from scratch. The thought of using samples from the original crossed my mind very early on, but, as I said, I wanted to recreate it. Not sample it.

My recollection on the 303 is that it only has an AD envelope, which could simplify your design.

Some odds and ends:
Analog synths often use RC envelopes rather than linear, and you may get a better sound with these. (YMMV, but slide~ is a great starting point for building these; RC envelopes are essentially log attack and exponential decay)

I'd also take a look at the exponent setting for some of your controls. For instance, with your portamento control, most of the useful values are less than 50 ms. You can use a strong exponent setting (>= 3) to accomplish this. You'll get more responsive controls.

You might also look at a different filter. Biquad~ is fine for filters that don't move a lot, but it's a bit slow to update for really fast filter sweeps. (I'd recommend lores~, a ladder filter, or, better still, the diode ladder filter that Oli Larkin posted to the C'74 forums a few months back)

Preface your send/receives with --- so that multiple copies of your patch don't interfere with each other. (e.g. send ---cutoff)

You can generate anti-aliased offset waves with saw~, though it's a bit trickier. The right inlet is the "sync" inlet. Saw~ will reset its phase when it receives a value over 0.5 in the right inlet, so you could do a little math on the output of one saw~ and use it to sync the other. (same goes for rect~)

Yapp, there is no sustain and release in the original. Just a very short, cca. 10 ms atack (which is fix), and the Decay. Which controls the filter at the first place.

I just looked up pictures of an original, and you guys are right, there are no attack or release knobs, nor are there individual controls for the filter. I think I will remove them for now to keep this as close to the original as possible, but add in other options in future updates to make it more versatile.

By the way, I want to implement a control to select between the two theories behind the way the 303 creates it's square wave. I'm no good at understanding hardware, so all I can go by is what people say, and they say two different things. One idea is the way it's implemented now, but there's another idea that seems to make more sense to me, considering the features of this synth. It's simply that there is only one oscillator and the square wave is generated by a waveshaper of some sort. I have no idea where to begin with waveshaping other than using [buffer~] and [lookup~]. If anyone could point me in the direction of more versatile waveshaping, that would be great.

Try to use cycle~ with single cycle waveform samples from the original (just 1 wave, in cycled loop).
Sounds good, and it is still synthesis :D

I'm pretty sure that I already ruled out the idea of using buffered samples in this synth. While it is a good idea to replicate the original more accurately, this started out to be more of an educational/experimental synth to see if I could replicate the sound waves without using samples, and learn how to do so. My next goal is the waveshaping bit. I have sktr's waveshaping [gen~] objects, but I was hoping that there was a different, equally versatile way of distortion using Max/MSP's standard objects. This way, I could change the distortion as needed to adjust for different sounds and devices, as well as learn how to do it without using [lookup~].

This is really nice guitarguy93!

All I tweaked was to have the delay knob react from 0:500 with an exponent of 3 as it gave more precision between 0 and 100ms.

I also stuck a standard overdrive unit in-line (Distort.adv) at 1.21 kHz with Q of 9, set drive to 100% and mapped dry/wet to a macro for "distortion amount" and then tone and the inverse of dynamics ('preserve dynamics') to a second macro for "distortion texture" - this is what people would do with a TB-303 and a guitar pedal - maybe this could be done in max too...

Thanks for your hard work :)

Thanks, jjallan! It means a lot!


I haven't been using Max lately, but I'm trying to get back into it. (Yet again) I generally use Max in spurts, but I want to make it a regular practice to help the versatility and creativity of my AL9 experience. Hopefully, I can get back to work on perfecting this device and making some others. Thanks for the support, guys!

Hey I've taken the liberty to steal your 303 style square for my synth Nerd Bass. Thanks for your nice work :)

Login to comment on this device.

[ browse device library ]