Show HN: WebAudio Data-Driven audio engine

github.com

2 points by mikezaby 10 hours ago

A couple years back, I found myself in my thirties with programming as my only real interest, and I felt this urge to reconnect with something else.

I used to play drums in high school bands, so I decided to get back into music, this time focusing on electronic music and keyboards.

One day, somehow I came across WebAudio and as a web developer, this clicked (not the transport one) to me. I was excited about the idea of working on a project with web and music at the same time. As a web developer who was heavily using REST APIs and state management tools, I started thinking of an audio engine that could be handled through data.

So Blibliki is a data-driven WebAudio engine for building modular synthesizers and music applications. Think of it like having audio modules (oscillators, filters, envelopes) that you can connect together, but instead of directly manipulating the modules, you just provide data changes. This makes it work really well with state management libraries and lets you save/load patches easily. Also, one other reason for this design is that you can separate the user interface from the underlying engine.

The project has grown into a few parts:

* Engine: The core WebAudio synthesis engine

* Grid: A visual interface where you drag/drop and connect modules

* Transport: Musical timing and scheduling system

I had a first implementation of Blibliki on top of ToneJS, but I started writing directly in WebAudio because I wanted to re-think my original idea, document and explain it to others. So, I documented the early steps in development process in a 4-part blog series about building it from scratch. Then I decided to abort the ToneJS project and continue with a complete re-implementation in WebAudio. In this way I learned many things about audio programming and synthesizers, because I lost many ready-to-use tools of ToneJS.

I'm not pretending this is the next VCV Rack or anything! It's got plenty of missing features and bugs, and I've mostly tested it on Chrome. But it works, it's fun to play with, and I think the data-driven approach is pretty neat for certain use cases. Currently, I'm in active development and I hope to continue this way or even better.

You can check it out:

Blibliki monorepo: https://github.com/mikezaby/blibliki

Grid playground: https://blibliki.com

Blog series: https://mikezaby.com/posts/web-audio-engine-part1

pasxizeis 9 hours ago

Amazing work!

Where would you suggest someone to start if they wanted to get familiar with the codebase?

Also, what are the next steps for the project?