That is very cool! Just spent a bit of time playing with it, and while I wouldn't say I was a 303/808 connoisseur (unlike a friend who is pretty famous for his use of them), sounds pretty good to me; it's not perfect (it sounds like the filters aren't quite there in terms of extreme settings of resonance and envelope), but it's good. I've not used RB338 for years, so it could be mis-remembering, but it's almost like the sounds need controls that 'go to 11' to get to where you'd want them to be?
I like the simplicity of it and the ease of producing a WAV from a session, and the UI seems to be simple and straightforward to use. I'll test it out on some students this week, see what they come up with.
I have a couple of minor criticisms - I don't think the ballistics of the rotary controls is right, but I can't quite put my finger on -why-, just seems a bit too sensitive or there's something about the linearity of it? Would it be possible to add the Cubase-style "shift reduces the sensitivity while dragging" to them?
The other thing was editing the grid - I'd prefer left click to toggle an event on and off rather than right-click to clear; while this is personal preference, it's one that I've got used to using Cubase for 20 years or so in the drum editor, so it's a little counter-intuitive to have to do it another way, and I think many other editors are similar?
Finally, any chance of an undo in the editor?
But overall, love it. An amazing demonstration of what's possible in a browser, and of your skills!
I would, I own a real TB-303 (as well as a TR-808 and a TR-909), and this suffers from the same problems that all emulations suffer (even Roland's own TR-3 and TR-03): the sound is really 'static'; real 303s have an instability in the sound that gives them a nice natural vibrato, which at the extremes (resonance full, and sweeping the cut-off), causes mini-ripples of sound that give the 303 that sound.
Have a listen to this to see what I mean (try to avoid the Roland shills with their "it's just as good" opinion) [1]
It's pretty much the same with all emulations of analogue gear. I am yet to hear any plugin or emulation come close to the sound of analogue. The closest I've experienced to-date Uhe Diva, but even that doesn't have the liveliness of the real deal.
You're right, but that doesn't make this any less awesome :)
To me, it's a demo of what's capable with the Web Audio API. It's _amazing_, because with a URL you can share a drum machine equal to any of the other emulators you'd need to buy (or, at least, download).
It's good for sure, listen to the last sliding notes on the funk riff, the analog is much more characteristic, the smooth gradient is perceptible, it's the interaction of analog harmonics, as another post mentioned it's often at the extremes that the most interesting sounds emerge, these I imagine are areas where interesting sonic dynamics will occur. All music making stuff is cool, from gong to modular analog through string box bass and digital tricks, we are lucky to have such tools to hand, the original 303 cost a lot, they still do...
I think it is, but on quite a subliminal level. As well as producing music I also DJ, and I notice a marked increase in energy levels of people on a dancefloor when I play tracks that I know are made with analogue synths and drum machines.
Two weeks ago I was playing at a club in London and played Donnato Dozzy - Gol [1], it's so simple as a track, almost nothing to it, but it's a real 303 and 808 that drives the track. I had tons of people asking me what it was, and I could see the room had got more energetic. I even had this conversation about it after the night.
So even for those that don't know exactly why, I think they do feel. I've seen it happen lots of times.
> But I'm buying all analog, and mostly VCO synths
It's still there with DCOs in my opinion. They're cleaner for sure, but they still have that sound. My Juno 106 is one hell of a synth, and that's DCOs, as is my Waldorf Pulse 2 (which for almost no money is a great sounding machine), but then I have the VCOs: Moog Sub 37, Roland TB-303, Roland SH-101, and the incredible DSI OB-6. They're all amazing sound. Especially compared to my digital synths (Nord Lead A1, Roland Super JV 1080). I've stopped using plugins completely now.
>I notice a marked increase in energy levels of people on a dancefloor when I play tracks that I know are made with analogue synths and drum machines.
I'm sorry, but I cannot just let you get away with that. There are so, so many other factors that would "energise" people on a dance-floor than simply whether the source of one or two elements in the track playing are voltage or digital based.
While analogue stuff does sound better (in my opinion), this, along with the inherent confirmation bias of such an observation, is utter make-believe.
> I'm sorry, but I cannot just let you get away with that. There are so, so many other factors that would "energise" people on a dance-floor than simply whether the source of one or two elements in the track playing are voltage or digital based.
I've been DJing in nightclubs for 20 years. Please take my word for it that I know what I'm talking about here. This isn't a one-off.
Well I'm also musician and DJ with about 20 years producing, and 15 years experience performing. I think if you were playing super-minimal, atonal techno or house then for sure - but for genres involving more elements and instrumentation, I just don't see it.
Nice track (Gol). I agree, in a stripped down setting the characteristics are more exposed, and digital synths can get boring quick.
DCO - I like them too, I just have enough of them already (MKS-70, MKS-50, JX-3P, Cheetah MS6). Might pick up the new Behringer 12 poly DCO if it's good, but that'll be enough DCO for me. Still plenty of room for VCO synths though, I've got 6-7 VCO mono synths but they are all small or racked and sound very different :)
I'm not really a brand snob - whatever sounds good. They got a bad name for ripping off circuit designs, but there is some Behringer gear that does the job. The deepmind 12 is designed by ex-Midas/Klark Teknik engineers (Behringer bought them) and Uli has been wanting to release an analog synth for ages - I think it'll be alright, will reserve judgement.
It'll probably sound too clean and will end up buying vintage VCO synths instead though :)
Sounds more interesting for sure (I have a Midas Venice F32, and a lot of respect for the Midas engineers). My comment was mostly about Behringer's poor build quality (reputation).
Maybe just get a Jupiter 8, it'll save the hassle ;)
It's a new venue in Dalston called Club Makossa for the Dr Blacks night; near Dalston Superstore and the now defunct Dance Tunnel.
> will have to try and catch you play sometime if you play that sort of thing
I play a range of stuff, but yeah that's fairly typical for when I play out. I don't know when I'll be playing in London again, but will probs be back playing for Dr Blacks again in february.
I have some stuff on my Soundcloud page that might be of interest:
On a more techno level, check out me and my friend DJing back-to-back for 4 hours as 'Waterwalk' in Berlin. There's a number of Donnato Dozzy tracks on there, and Peter Van Hoesen - who I consider to be quite similar as a producer (if a bit tougher): https://soundcloud.com/water-walk/waterwalk-live-from-staub-...
Won't let me reply to you directly, but cool! I shall keep an eye out as I live round that neck of the woods - hadn't even heard of that venue. I'll give your mixes a listen tomorrow, cheers – recognised your name from the 4Four site I used to go on occasionally :)
Heh, yeah I still run 4four - although you'll be lucky to log into it now, it was killed by the march of various sites (Facebook, Soundcloud, RA), to the point that it went from 10,000 unique visitors per day to 100s. I'd like to resurrect it at some point, but it'd need a better value-proposition.
Where can I find information on simulating circuits -- the underlying algorithms and models? Does it take in account factors like temperature (I hope so)?
This isn't analogue modelling though -- you're just using KVL/KCL to derive the transfer function H(w) and applying the same transfer function as a digital filter.
It's literally the first thing I would do if I wanted to come up with something that sounded the least bit like the real thing.
I was using my own FIR derivation of a third-order low-pass Butterworth filter to do software synthesis in 2008 while I was in high school. This is truly basic stuff.
Real analogue modelling has things like noise, hysteresis, and a dependence on such broad factors as temperature and even EM fields.
Roland's reissues are pretty dull and lifeless compared to the real thing. The x0xb0x and possibly the TT-303 are the only two 303 clones I've heard that get close, probably due to the fact they're close copies of the original's analog circuitry. But even they don't quite get there. That's why the 303 still commands such a high price, even after Roland's ACB reissues.
DCO synths don't have tuning problems, modern VCO synths (like the OB-6) have built-in tuning circuits. Even on the older gear that needs manual tuning (like my SH-101), it doesn't take too long to tune. If a synth is drifting wildly, then it's more likely to be a fault/time for reconditioning.
In terms of signal-to-noise, well yeah they're all noisy, but not terribly if you do your gain staging properly, and gate anything that's excessively noisy.
Actually the noise is part of the character of the imperfection. Look at emulations of classic gear, and they're all digitally putting the noise back in.
I did do a lot of back and forth testing with Rebirth, and the VST plugin: ABL3 whilst developing this and specifically whilst setting the max values for the cutoff, resonance and env.mod. - The tricky thing is that they all have an affect on each other, the max resonance is lower when the cutoff is lower for example.
Regarding the rotary controls: These work by measuring the distance in pixels from the point you first clicked to the point the mouse have moved to. I only managed to test this on a 3 different computers so I think if you have a really high resolution, the knobs will move too fast. I'll change this at some point to be percentage based instead of pixel based.
I added the right-click to delete as that is how FL-Studio works, which is my favorite daw. Its handy to keep the left click as you can use it to select a note in the drum editor and then set velocity.
Please fix the rotary controls. Use the atan2 of the mouse's current window position minus the position of the dial's center to calculate the "current angle"/offset of the dial. I'm just waking up, so there might be slightly more to it than that, but not much.
It's impossible to please everyone with rotary controls. If I read you correctly, you're asking for them to be controlled by actual rotary movement of the mouse. Many people dislike that (and I'm one of them) because it's hard to make circular motions smoothly. Meanwhile, the rest of the people dislike linearly-mapped rotary controls because the motion doesn't match the visual form of the control.
I would have suggested making them respond linearly, but to both x and y motion. That is, the effective position change is the maximum of the mouse x and y axis displacements from the click position.
My view is that rotary motion is not useful in an on-screen GUI (unless you have a MS Surface Dial perhaps?); rotary-looking controls only exist to save space and provide a friendly appearance. The way they actually behave should be whatever is most efficient to drive, regardless of their shape.
You've misread me--I'm suggesting to use the angle formed between vertical and the mouse's current position, and then wherever it moves, to add to the current position of the rotary knob.
This doesn't mean that you end up with having to carefully dial the knob, but it does let you click and drag the mouse in such a way that the rotary dial at least rotates in the direction you'd expect. The current behavior sometimes turns CW, sometimes CCW, seemingly at random--if we decide to skeuomorph, we might as well skeumorph correctly.
You could achieve both your core requirements from the final two paragraphs by having, effectively, a slider control underneath the rotary dial. The slider is the actual control — behaving as you describe in para 2 — and the rotary dial is merely for pleasing visual feedback. The GUI would have to emphasise the roles of those two separate parts somehow.
The resonance appears to decrease with cutoff frequency because of high pass filtering in the feedback loop of the 303 filter... Higher frequencies have more feedback and thus more resonance.
The envmod knob also affects both the max and min cutoff values from the main envelope generator.. that part is tricky - the envmod and cutoff knobs are exponentially tapered, but the filter control circuit also contains an exponentiator so the sweep is sort of doubly exponential but its hard to tell the difference.
The rotary controls aren't working like that at all for me; that's actually how I expected them to work, once I learnt that they weren't rotary (my initial expectation). For me, they are moving solely in terms of vertical mouse movement; up goes clockwise; down, anti.
Actually, now I've used them for a bit, I find them fine to use. The initial learning curve is steep, but maybe it's worth it. What I'd ask for next is keyboard compatibility :)
I meant that it checks the point you clicked on the Y-axis only, then checks where on the Y-axis the mouse has moved to. I did it this way as it is how almost all music programs and vst etc do it.
audiotool is made with Flash. And a good demonstration of the actual usefulness of Flash to develop complex applications that could be deployed online. Too bad Adobe was incapable of taking good care of that product and didn't listen the community. I'm sure WebAudio can get better, but the OP's demo still proves that it's brittle. Changing anything in the patterns stops all sounds and the sequencer has hard time keeping a consistent tempo. I'm sure it will get better but Flash was really in advance for its time as audiotool demonstrated. Well, at least now people have stopped complaining about Flash "killing their battery". They can now blame Javascript /s
I've found that a steady method for timing is by calculating the number of samples to render per "tick" and decrement the counter after each completed sample when rendering audio to the buffer in JavaScriptNode/ScriptProcessor. Eg.
Upon the counter reaching zero, the render loop actually jumps to do sequencing and effects/modulation and then resets to counter.
In my case, the tick occurs at 50Hz because that's the PAL frame clock used in Amiga and MS-DOS module trackers like Scream Tracker and FastTracker 2. Typically trackers use a "speed" setting to additionally specify the number of ticks per pattern step - usually 6.
Although you do get sample-accurate timing, you also get latency up to the size of a single audio buffer (I use 4096 samples). While this isn't really an issue when doing purely playback, it obviously is when the audio is controlled real-time (eg. MIDI).
>it's almost like the sounds need controls that 'go to 11' to get to where you'd want them to be?
People modded the real hardware to do just that (eg. Real World Interfaces' Devil Fish mod: http://www.firstpr.com.au/rwi/dfish/ ). I'm not enough of a 303 connoisseur either to say if this softsynth is realistic or not, but maybe you're remembering the sound of modded hardware.
No, I'm pretty sure I'm thinking of RB-338, and definitely not a modded one; I had access to a 303 back in the day for a few weeks and it could have been that, but it was definitely standard. My friend I mentioned before has a number of 303s, both standard and modded, and showed me some of the extreme settings he gets on them (everything he makes is properly extreme!), but I don't know 100% that RB-338 wasn't more extreme than standard.
TB-303 was one of the synths I always drooled over as a kid, though I do think that it's legend is perhaps bigger than the synth itself was.
Going back to this Show HN: this is an awesome project. Sounds good (albeit I too can't comment on accuracy) and performs well too (ie it doesn't appear to grind my browser to a halt like many technical demos do). The UX could use a little work but frankly few DAWs have good UX in my opinion so this is at least as good as the professional products in that department.
I'm kinda the same with the 303; I have enjoyed playing with them, but never got what some others can do out of them, but I think a lot is the music you're into - I was far more into prog stuff so never really got on that well with pattern-based sequencers.
Hey HN, this is something I have been working on for most of this year. It started out as a more fully featured web-based daw that would have lots of different instruments with its own plugin format. I got quite far into the project and built a very modular system so it is easy to create more instruments by just dropping in a js file and a view file for the visuals.
It was taking longer than I thought so I decided to create a V2 of my old Acid Machine app using this code as a base.
It's great to see people talking about it after being hidden away on my laptop for so long. If anyone has any technical questions, I would love to answer them. Also.. I am on the lookout for some freelance work at the moment.
Awesome! Brings back memories of playing with Rebirth. Love the different design.
Boy I still remember playing with Propellerhead Rebirth in the late '90s and that was pretty great at the time. It made me a bit of money in high school to simply create some basslines and burn them onto a CD for friends.
By the time Reason 3.0 came out I stopped playing with this kind of software and only really used tools like Audacity for editing sound files. But also, my taste for Electronic music had died down. It had become very generic for me for the most part.
Still though, it's cool to a web version of this software and the amazing things you can do with HTML5.
Wow this is awesome! I'm building something similar with WebMIDI and WebAudio and I've been blocked trying to get recording to work. My current solution is sampling my OscillatorNodes with a MediaRecorder and turning the resulting blob into an .ogg file but it only works in Firefox (Chrome has a bug with decoding ogg with WebAudio). Do you mind elaborating on how you do your wav recording?
I experimented with the MediaRecorder too but couldn't get anything to work. In the end, I used this: https://github.com/mattdiamond/Recorderjs - It has been abandoned by the author and the forceDownload function does not work anymore so I had to replace that. I'll send you a copy of my version if you like?
slightly inefficient, but you can use a ScriptProcessorNode [1]. just copy the buffer right before it reaches your destination and encode it as WAV when you're done recording. (Audio Worker would be the ideal solution but i don't think they're implemented yet).
I tried this but using ScriptProcessorNodes is a pain in practice because of how the events work:
>An event, implementing the AudioProcessingEvent interface, is sent to the object each time the input buffer contains new data, and the event handler terminates when it has filled the output buffer with data.
Events just fire like mad until you put stuff in the output buffer. Couldn't get it to work like I needed it to.
i mean, of course events are going to fire like mad. welcome to the world of audio processing. :)
MediaRecorder works the same way (but for MediaStreamSources, not BufferSources).
the idea is that audio buffers are processed in chunks- an event fires for each chunk that is processed. the act of "recording" is just reassembling these chunks into a single ArrayBuffer.
edit: seems like Recorderjs works exactly this way (but implements features more than just recording, like exporting as WAV).
This is the key I was missing in my implementation. Another challenge is wiring this up to multiple OscillatorNodes - the docs say a ScriptProcessorNode can only have one input. In my implementation I create a new OscillatorNode whenever you press a key.
In Acid Machine, I have created a kind of virtual 4 channel mixer, that is the only thing that connects directly to the main destination output. All osc nodes that are generated by an instrument get connected to the instruments master gain node, then that connects to one of the mixer channels. All mixer channels then connect to a master mixer gain, then the output.
If you do it that way, you just need to attach the recorder to the master output of the mixer.
it's also decent practice to send your oscillators into a mixer anyway so that they can be rerouted at large.
for instance, say you have 4 oscillators, 2 fx buses and an output. you route (4 oscillators) -> mixer -> fx bus 1 -> output. then if you want to switch the fx bus for your oscillators, you can just reroute the mixer instead of each oscillator individually.
in the case of a recorder, you'd want the end of your entire graph to look like this: mixer -> recorder -> output. this way your recorder is capturing all audio (oscillators, effects, etc). (and, as noted above, you have the option to reroute the mixer directly to the output when it's not recording).
My mixer channels are a gain node (for input), followed by 2 gain nodes - which are used as fx slots and replaced when an effect is added, the last fx slot connects to another gain node (for channel output) - that then connects to the mixer master gain node.
You could have it as simple as 1 gain node for each channel which you use for input and output to the mixer master gain. This would make it difficult to add fx later though.
if all you're trying to do is combine nodes in the graph a gain node is standard. (that is, you can connect any number of oscillators to a single gain).
Nice, I like the simplicity. Your download function is almost exactly the same as my modification to recorderJS, so you could just grab a copy of that and swap out the download function for your code.
This took me a minute to figure out so writing it down in case it helps someone else. The sequencer button allows you to string your patterns together into a song. To actually play them in that sequence though, you need to click the "Pattern Mode" grey button at the top of the screen and toggle it to "Song Mode". Then, the play button (or spacebar) will play your song in that pattern.
Very nice. Sounds quite good and works very well. I tested it with Firefox 50 on Linux. No audio issues of any kind.
Is there a way to use the keyboard to control the synth and the knobs? I grew up with trackers (and later Jeskola Buzz) and I always enjoyed playing with synths using a "keyboard piano" input.
You can use your keyboard number keys to play the drum machine.
I could probably add in keyboard control for the synth knobs, I might add that in a future update. If you have a midi controller, you can control almost everything with the midi learn functionality.
I don't have a midi controller so it would be nice to have a way to play the notes "live" with the keyboard. And perhaps turn the knobs using number keys or function keys.
This is very good work in this space. Rebirth 338 was the bees knees tipping point for virtual analog on a PC. We have been seeing numerous things that hint at the direction of where things can end up and this is a good way to establish cred for browser-based audio generation.
Generally good piano roll implementation, controls.
It'd be nice to have a master fader and possibly a compressor amongst the effects implmemented.
I'd also love a swing parameter.
Something I've noticed is that knobs with a touch screen can be rough since your digit is covering the visual feedback. Maybe a single vertical line indicator next to the knob could mean you would know where you are and how far you can go when tweaking one?
This is awesome! Now if only there was a web-protocol for syncing the audio clocks of two webapps I could really jam out with this and (shameless plug) http://io808.com together.
Now I'm really trying to think of ways that could be done in a fast way. Any ideas?
The instruments in Acid Machine 2 are built in a modular way, kind of like a basic vst plugin. This is because I started out trying to make a more fully featured web daw. It would be possible to add in more instruments in the future.
it "looks" a lot better than it did, but I have no idea what is going on. Used to play around with the old version quite a lot when bored at work :)
I guess I was just used to how it worked before, this re-design of multiple full screen views is confusing, couldn't figure out how to get things to play, quick live edits don't seem possible now either.
It did take me a while to make a decision about the separate screens. I wanted a more fully featured piano roll screen and couldn't fit it in properly underneath the synth like the old version. I thought about putting the piano roll in a window so that you could still see the controls at the same time. This could be an option in a future update.
It should show a full screen message on FF to say that it will not work as well as Chrome. It has a continue button to hide the message. Did you see that or did it just show the loading bar straight away?
I like the simplicity of it and the ease of producing a WAV from a session, and the UI seems to be simple and straightforward to use. I'll test it out on some students this week, see what they come up with.
I have a couple of minor criticisms - I don't think the ballistics of the rotary controls is right, but I can't quite put my finger on -why-, just seems a bit too sensitive or there's something about the linearity of it? Would it be possible to add the Cubase-style "shift reduces the sensitivity while dragging" to them?
The other thing was editing the grid - I'd prefer left click to toggle an event on and off rather than right-click to clear; while this is personal preference, it's one that I've got used to using Cubase for 20 years or so in the drum editor, so it's a little counter-intuitive to have to do it another way, and I think many other editors are similar?
Finally, any chance of an undo in the editor?
But overall, love it. An amazing demonstration of what's possible in a browser, and of your skills!