# What is bitrhythm about ?

## Intro

In Bitrhythm you get a coding playground to make music with webaudio, canvas and webgl apis. You can share the final track as a URL which enables interactive music with your listener. The url size limit acts as a contraint on creativity.

Apart from the core html apis, you can also use the following libraries

1. Tuna
2. Timbral
3. Tone.js
4. Underscore / Rambda
5. cellx (observers)
6. Magenta.js (Machine Learning)
7. P5.js / D3
8. Winamp Visualisations (butterchurn)

```{code-block} html
---
force: true
---
@<
import common
cog.out(common.external_libraries)
@>
@@
```

A few things implemented from scratch in Bitrhythm are,

1. DSL for describing music sequences - similar to the tracker notation
2. A core Music Loop that runs your javascript code, with an edit mode
3. A knob and guard abstraction for programming automation

You can use Bitrhythm for making music similar to the music possible with trackers like Buzz / Renoise / OpenMPT. I call this approach Hard Coding music. This is also known as executable music in the Demoscene.

You can also use Bitrhythm for Live Coding and Algorithmic composition.

## ADC 2021

I presented Bitrhythm in ADC '21 and the ICLC '21 for other audio developers.

[Slides ADC '21](https://xyzzyapps.link/ADC21.pdf)<br>
Video - TBD

[Slides ICLC '21](https://xyzzyapps.link/ICLC21.pdf)<br>
[Video](https://www.youtube.com/watch?v=LDQ1PMqZowQ)  ~ 20 minute mark

## Inspiration for the project

I make [web apps](https://xyzzyapps.link) for a living. I started messing with algorithmic composition using pure data around 2011. In many ways Pure Data was my first DAW. Although nothing much came out of it musically, it transformed the way I view programming. The unix pipes concept is identical to the data flow model in pure data; albeit with more connections.

For my music I moved onto Electribe, Renoise, Reaper and live looping with my guitar. I started exploring sonic pi in 2019 but TBH none of the live coding tools were doing what I wanted - basically tweaking /knob-twisting in techno so I started my work on this project. [This library](https://www.youtube.com/watch?v=adz1Gv5Lm34) in sonic pi comes close to what I am trying todo with this project. In bitrhythm time is divided into ticks like renoise tracker.

After my initial work on the project in 2019, the project got sidetracked. After seeing [endless acid banger](https://www.vitling.xyz/toys/acid-banger/) I had an epiphany to work on this project again with programmatic knobs. I was able to compose an endless and interactive dubtechno demo track. In March 2021, I also picked up on literate programming so this document will have both code and documentation intertwined.

The documentation for the literate programming project - wheel is [available here](https://xyzzyapps.link/wheel/).

## License

[CC-BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/)

## Support this project

My goal is to make bitrhythm easy for both professionals and music learners. Support my work to get regular updates. Supporters will also get free accounts when I add pro features! Also get notified on latest developments and tutorials in the web audio world.

<p><script src="https://gumroad.com/js/gumroad.js"></script><a class="gumroad-button" href="https://gumroad.com/l/iEVpN" target="_blank" rel="noopener"><span class="gumroad-button-logo"></span>Support Bitrhythm</a></p>

You can find me on [theaudioprogrammer](https://theaudioprogrammer.com/), demoscene and algorave discord as @xyzzy.

