Touchbit is a 'mobile-friendly' interface for live coding bytebeat music using postfix expressions, built on the html5bytebeat library by Greggman. This library provides a ByteBeatNode
which is a WebAudio AudioNode
.
You provide a function whose only input is time t and from that write some code to generate a sound. The output of your function is expected to be 0 to 255.
If the output of your function exceeds 255, it will automatically undergo a modulo 255 operation anyway. Example:
Then, then touch the ▶
button for listen your beat.
Important
Touchbit only performs with postfix notation expressions.
Postfix in this case I guess can be described as forth like. It works with a stack. Each command either adds things to the stack or uses what's on the stack to do something. For example
123 // pushes 123 on the stack stack = 123
456 // pushes 456 on the stack stack = 123, 456
+ // pop the stop 2 things on the stack
// adds them, puts the result on the
// stack stack = 569
Note the stack is only 256 elements deep. If you push 257 elements it wraps around. Similarly if you use pick
with a large value your pick will wrap around. The stack is neither cleared nor reset on each iteration of your function. Some postfix based bytebeat songs take advantage of this where each iteration leaves things on the stack for the next iteration.
You can navigate between the tokens of the expression. The selected token will be replaced by your next input key.
Tip
Long press to navigate directly to the start or end.
Presed once and you'll be able to edit the expression without be evaluated until you press the hold key again.
Presed once and you will insert a empty token before your selected position.
Long press for enter to Insert Mode: every input key it will insert a empty token first (press again for exit insert mode). When in Insert Mode, the cursor indicator changes from a rectangle to a vertical line.
Deletes the selected token. (If in insert mode, deletes the character before the cursor.)
Caution
Long press will erase the entire expression. There is no confirmation dialog box
Reverse and reapply the most recent action or change.
"When you press a number key for the first time, you will enter number mode. In this mode, you will see +
and -
buttons online, allowing you to increase or decrease the rightmost digit by 1.
You can also use ⌫
key to clear the rightmost digit.
Tip
If you press the same number key again, a number editor window will open. Here, you can individually increase or decrease each digit.
The postfix operators are
-
=
,≠
,>
,≥
,<
,≤
These take the top two things from the stack, do the comparision, then push 255 if the result is true or 0 if the result is false.
-
drop
Removes the top thing from the stack -
dup
Duplicates the top thing on the stack. -
swap
Swaps the top 2 things on the stack -
pick
Pops the top thing from the stack and duplicates one item that many items back. In other words if the stack is1,2,3,4,5,6,7,3
thenpick
pops the top thing3
and duplicates the 3rd thing back counting from 0, which is no4
. The stack is then1,2,3,4,5,6,7,4
. -
put
Sets the n'th element from the top of the stack to the current top. In other words if the stack is
1,2,3,4,5,6,7,3,100
then put will pull the top100
and then set the3
element back. The stack will then be1,2,3,4,100,6,7,3
. -
abs
,sqrt
,tan
,log
,exp
,sin
,cos
,tan
,floor
,ceil
,min
,max
,pow
These operators all pop the top value from the stack, apply the operator, then push the result on the stack
-
/
,+
,-
,*
,%
,>>
,<<
,|
,&
,^
,&&
,||
These operators pop the top 2 values from the stack, apply the operator, then push the result. The order is as follows
b = pop a = pop push(a op b)
In other words
4 2 /
is 4 divided by 2. -
~
Pops the top of the stack, applies the binary negate to it, pushes the result.
Tip
All operators in the top row display more options when long-pressed.
Touchbit comes with a set of features tailored specifically to its interface, which is optimized for mobile devices.
Going to Settings > Audio
, you can find a three-band equalizer for adjusting the treble, middle, and bass levels.
Going to Settings > Styles
, you can choose between a few theme palettes or opt to randomize for going wild.
You can share your byte by copying the current URL or by going to Settings > More
, where you can export the current expression to the Greggman editor or copy it to the clipboard.
You can use your mobile device to remotely control another device. Open the receiver in a web browser. Scan the QR code with your phone or paste the ID into the Settings > More > Remote
input. Now you can use the key interface as a controller, and the expression will be evaluated on the secondary device.
A new SEND
button will appear, which will be used to synchronize the expression between devices.
The expression will be played back on both devices, with the mobile device serving as the monitor and the screen acting as the output master. Ideal for live performances.
Tip
If you want to customize the ID for the receiver, add #id=yourphraseid
to the receiver URL. The QR code won't appear upon disconnection.
Click any expression for listen and edit:
"the 42 melody", separately discovery by several people on irc etc
t 5 * t 7 >> & t 3 * t 10 >> & |
from viznut the 3rd iteration video
t 34 ^ t 67 | t 5 >> & | t 15 >> 9 & 1 + * 2 * 0 t 19 >> 3 & 8 SWAP - t SWAP >> - 255 & + 2 /
rhytimgrind from Glitch Machine
t 10 >> 16 % 1 + / 10 % t * t 16 >> 3 % 1 + * DUP 9 PICK | t 5 >> t 7 >> - | + t 2 >> |
quiddit from Glitch Machine
-
📺 the3 ULTIM4TE gu1de t0 BY7EBEAT video tutorial by @gabochi
-
📝 Kragen post and be sure follow the many links.
-
📺 Bytebeat: Music from very short programs, 📺 Part II 📺 Part III Viznut videos
- Gabriel Vinazza - Main user, tester, teacher, and driving force behind this project.
- Greggman Built the core library and brought postfix to online bytebeat.
- Macronodes - Library used as an equalizer.
- Peer.js - Used for remote mode, providing WEBRTC peer-to-peer data transmission.