TT-303 Acid Machine

← Back to the app

Introduction

TT-303 Acid Machine is a browser-based recreation of the Roland TB-303, the single-oscillator bassline synthesizer whose squelchy, sliding lines defined the acid house sound. Alongside the faithful synth engine and its step sequencer, the app includes a small companion drum machine, so a complete acid groove can come together in a single browser tab.

Everything runs locally. The audio engine is built on the Web Audio API and an AudioWorklet, there is nothing to install, nothing is uploaded to a server, and all of your patterns and presets are stored in the browser's localStorage on your own device.

To use the app you need a current version of a modern browser (Chrome, Edge or Firefox) and a working audio output — speakers or headphones. Because browsers block audio until you interact with a page, the app opens behind a start overlay. One click on it unlocks the audio engine; until you do that, the app stays silent.

The full TT-303 Acid Machine interface, showing the transport bar, SYNTH and FX panels, sequencer and drum machine side panel
The full interface: transport bar (top), SYNTH and FX panels, the sequencer, and the drum machine on the right.

Getting Started

Click the start button on the overlay. The interface appears with the transport bar along the top. Press the play button — or simply hit the spacebar — to start playback, and press it again to stop.

The tempo is set in the BPM field in the transport bar. It accepts values from 40 to 300 BPM; click the field, type a number, and the running pattern follows immediately. The sequencer and the drum machine both lock to this tempo, so one BPM value drives the whole groove.

Transport bar with play button, BPM field, preset controls, WAV/MIDI export buttons and the MIDI output dropdown
The transport bar: play/BPM on the left, preset management, export, and MIDI I/O on the right.

Two Modes: HOST and SEQ

The app has two fundamentally different ways of making sound, selected with the HOST/SEQ switch in the header.

In HOST mode, the app behaves like a regular MIDI instrument. Notes come from you — played on the computer keyboard or on an external MIDI keyboard — and the 303 voice responds directly, just as if it were a hardware module. The internal sequencer does not drive the synth in this mode. Use HOST mode to jam, to audition sounds while you tweak the knobs, or to play the app from a controller or a DAW.

In SEQ mode, the built-in step sequencer takes over. It plays the currently loaded pattern in a loop, in classic 303 fashion, while you shape the sound with the filter and effects. Pattern editing — notes, accents, slides — also happens here.

Header showing the TT-303 logo, the ACCENT indicator, the MIDI THRU switch and the HOST/SEQ mode switch
The header: ACCENT indicator, MIDI THRU switch, and the HOST/SEQ mode switch on the right (SEQ is active here).

The SYNTH Panel

The SYNTH panel holds the sound-shaping controls of the 303 voice. Most parameters are rotary knobs; the waveform is a two-position switch rather than a knob.

SYNTH panel with the eight sound-shaping knobs, the six preset buttons and the waveform switch
The SYNTH panel: Tuning, Fine, Cutoff Freq, Resonance, Env Mod, Decay, Accent and Volume, plus the six presets (INIT, DEEP, SQCH, SCRM, HOOV, DUB) and the SAW/SQUARE waveform switch.
ControlRangeWhat it does
WaveformSawtooth / SquareSelects the oscillator shape. Sawtooth is the brighter, more aggressive 303 staple; square is hollower and rounder.
Tuning−24…+24 semitonesCoarse pitch offset, up to two octaves in either direction.
Fine−50…+50 centsFine pitch adjustment for detuning against other instruments.
Cutoff Freq0–100Cutoff frequency of the classic 303-style lowpass filter. The single most performance-critical knob on the panel.
Resonance0–100Emphasis at the cutoff frequency — the nasal, whistling peak that makes the filter "squelch".
Env Mod0–100How strongly the note envelope sweeps the filter cutoff. This is the essence of the acid sound: each note opens the filter, then it falls shut.
Decay0–100How quickly the envelope (and the note) fades out. Short values give tight, percussive blips; long values let notes ring.
Accent0–100Intensity of the accent effect applied to accented steps — a louder, sharper, more filter-open hit.
Volume0–100Output level of the 303 voice.
Accent velocity threshold1–127Incoming MIDI velocity at or above which a note is treated as accented. Relevant when playing live in HOST mode.
Slide time0–300 msDuration of the portamento glide between notes that are tied together with a slide.

Working with the knobs

All knobs share the same interaction model:

Presets — Six Starting Points

The six buttons above the knobs — INIT, DEEP, SQCH, SCRM, HOOV and DUB — load built-in factory sounds instantly. They are starting points: pick the one closest to what you hear in your head, then adjust the knobs from there. Loading one never locks anything — every control remains fully editable, and your adjusted result can be stored as a user preset (see the preset section further below).

The FX Panel

The FX panel contains a chain of four processors that the 303 signal passes through. Each can be toggled on or off independently.

FX panel with Drive, Delay, Reverb and Compressor sections, each with its own controls and a 2-band EQ frequency display
The FX panel: Drive (model + amount + EQ), Delay (division + mix + feedback + EQ), Reverb (mix + size + EQ) and Compressor (mix). The green bar under each EQ is the frequency band that passes through.

Drive

A distortion stage with four selectable models — Soft, Hard, Fold and Fuzz — which range from gentle saturation to aggressive clipping and wave-folding. The Drive control sets the amount of distortion. The stage has its own 2-band EQ (Lowcut and Highcut, in Hz) so you can, for example, keep the low end clean while fuzzing the mids.

Delay

A tempo-synced echo. Mix sets the wet/dry balance in percent. The delay time is chosen from four note-value divisions relative to the current BPM: 1/8, dotted 1/8, 1/4 and 1/2 — the dotted eighth is the classic choice for rhythmic interest against straight 16th-note patterns. Feedback (0–90%) controls how many repeats you hear. A dedicated 2-band EQ shapes the echo tone.

Reverb

A room-style reverb with two main controls: Mix (percent wet) and Room Size (20–100%), which scales the virtual space from a small booth to a large hall. It also has its own 2-band EQ, which is useful for darkening the tail or keeping reverb out of the bass frequencies.

Compressor

A simple on/off compressor with a Mix control. Because it is a wet/dry mix rather than a hard insert, it works as parallel compression: at moderate settings it fattens the line without flattening the accents.

The EQ strips

Drive, Delay and Reverb each carry an identical EQ strip with two band edges — Lowcut and Highcut — covering 0 to 20,000 Hz. These are not numeric knobs: you set them by dragging directly inside the frequency-band display, left edge for the low cut, right edge for the high cut. The band between the two edges is what passes through that processor's EQ.

The Sequencer (SEQ Panel)

The sequencer panel is only visible and active in SEQ mode. It is a 16-step sequencer in the spirit of the original, extended with pattern banks and editing tools.

Sequencer panel with pattern banks A to D, the note lane above the step grid, and the GATE/ACC/SLD rows below it
The SEQ panel: banks A–D, LEN/SHUF/GATE knobs, the note lane, and the GATE/ACC/SLD rows for each of the 16 steps.

Pattern banks and playback controls

The step editor

Each step carries four editable properties, one row each:

Clicking sets or toggles a value; clicking and dragging across a row "paints" the same setting onto several steps at once, which is the fastest way to lay out a run of accents or slides.

Pattern tools

Playing Live in HOST Mode

In HOST mode the computer keyboard becomes a two-octave piano. The mapping follows the German keyboard layout:

You can also plug in an external MIDI keyboard; the app uses the Web MIDI API to receive notes directly. The THRU switch forwards incoming MIDI notes to the selected MIDI output, so the app can sit inside a larger MIDI chain instead of terminating it.

MIDI Output

Transport bar detail highlighting the MIDI IN/OUT status and the OUT dropdown on the right
The MIDI status and the OUT dropdown live at the right end of the transport bar (here: 1 IN / 1 OUT connected, output set to "off").

The OUT dropdown in the transport bar selects an external MIDI destination — for example a hardware synthesizer on a USB/MIDI interface, or a DAW reached through a virtual MIDI bridge such as loopMIDI. The default setting is off, in which case nothing is sent.

Two switches decide what leaves the app once an output is chosen:

The selected output is remembered in the browser and restored automatically on your next visit. Note that Web MIDI requires a browser that supports it, and the browser will ask for permission the first time — the app can only see your MIDI devices after you approve that dialog.

The Drum Machine

Next to the 303 panel sits a small, self-contained drum machine. A dropdown selects the drum kit, and each sound in the kit has its own row with an on/off LED and a volume slider, so you can mute individual instruments and balance the kit against the bassline.

The drum machine runs independently of the 303 sequencer — it has its own pattern life — but it is locked to the same transport and the same BPM. Press play once and both start together in sync.

Drum machine panel with the kit dropdown and one row per drum sound, each with an on/off LED and a volume slider
The drum machine panel: kit selector on top, one row per sound with its on/off LED and volume slider.

Saving, Loading and Transferring Presets

The preset library controls sit in the transport bar, next to the play button (see the screenshot at the top of this guide): the name field, SAVE, the preset dropdown, ✕, ⇓ ALL and ⇑ ALL.

One thing to keep in mind: everything is stored in the localStorage of this browser on this device. There is no account and no cloud sync. If you reinstall the browser, switch machines or simply want a backup of your sounds, use ⇓ ALL — the exported file is the only way to carry your library with you.

Exporting Audio and MIDI

Two export buttons turn the currently loaded pattern into files:

The WAV export contains only the 303 voice — the drum machine is not rendered into the file.

Tips & Troubleshooting

No sound at all? First make sure you clicked the start overlay — browsers will not let the audio engine run without that click. Then check that the browser tab is in the foreground and not muted, that the site is not muted in the browser's tab menu, and that your system output is working.

Your MIDI device doesn't appear in the OUT dropdown? Confirm the browser supports Web MIDI and that you accepted the permission prompt. If the device was connected after the page loaded, or the permission state is unclear, restart the browser and reconnect the device.

Presets or settings disappeared after a browser reinstall, or they don't show up on your other computer? That is expected: localStorage is per browser and per device. Always export with ⇓ ALL before reinstalling, and use the exported file to move your library between machines.

The pattern sounds different from what you exported? Remember that the WAV render covers the 303 voice only. If you need the drums as audio, record the app output in real time instead of using the offline WAV export.