return to table of content

Show HN: Billard – Generate music from ball collisions in 2D space

groovity
5 replies
23h26m

Doesn’t make any sound on Safari iOS. Yea I clicked the loudspeaker

ErneX
4 replies
23h15m

unmute your device

groovity
2 replies
21h32m

Gee, I didn't try anything obvious.

corobo
1 replies
21h4m

If anyone else still can't hear anything even after cranking the volume - the grandparent comment means take your phone out of silent mode in addition to raising the volume above 0

ErneX
0 replies
8h16m

It’s not intuitive at all when other apps like video playback do reproduce audio when you are in silent mode, so yeah.

bozhark
0 replies
23h5m

And turn the volume up a lot

bogwog
4 replies
23h53m

Cool, but it really does just sound like a bunch of random noises. I think it'd be more interesting if the balls were regular polygons instead of actual circles, since the reflections would be more predictable.

tanseydavid
1 replies
22h37m

Switch to CHORD mode.

Ylpertnodi
0 replies
13h53m

Two browsers: one on Chord mode, one solo.

ferfumarma
0 replies
4h20m

It's like a digital wind chime

CamperBob2
0 replies
23h19m

It gets interesting when you click to add more balls in the path of one that's already moving.

riiii
2 replies
21h22m

I like this. I'd love to be able to move the red balls too.

sneak
0 replies
21h19m

Boop them while dragging the note balls.

bambax
0 replies
21h14m

You sort of can, if you select a non-red ball, move it around, and then and change its state to moving ('ball state' in the config panel).

dr_kiszonka
2 replies
20h21m

Fun! What do the yin yang button and the one to the right of it do?

bambax
1 replies
20h9m

Yin mode lets ball change state when they collide (from moving to playing and vice versa); and the chords button (not the most obvious design, true ;-) let bigger balls trigger triads instead of single notes.

dr_kiszonka
0 replies
13h38m

Thanks for the explanation!

dinglestepup
2 replies
19h14m

Great tool!

One feature that I miss in many generative music experiments is the ability to export the generated MIDI clip. Could be a different target audience, not sure, but being able to export and re-use a pattern adds a lot of appeal.

An example that I love to show is this poly rhythm generator: generatorpoly.ozieblowski.dev

A bit off-topic. Does browser MIDI implementation allow syncing across tabs with MIDI clock? It would be interesting to develop an open way to sync all these fun organic generators.

diggan
0 replies
6h36m

A bit off-topic. Does browser MIDI implementation allow syncing across tabs with MIDI clock? It would be interesting to develop an open way to sync all these fun organic generators.

The Web MIDI API can receive/transmit any type of MIDI events, including clock messages, then it would be up to the receiver to be in sync to it. Although as far as I know, JavaScript timing is not very accurate, so I think it'll be hard to actually make things be in enough sync.

bambax
0 replies
9h59m

You meant https://poly.ozieblowski.dev/ ? (generatorpoly.ozieblowski.dev doesn't work). It's neat.

Web MIDI clock is still a mess AFAIK, so MIDI sync in the browser seems far away. This tool doesn't really have a concept of tempo so it would probably not benefit much from syncing (except maybe for receiving start/stop?)

But you can do a lot of things with MIDI notes, including using them to drive filters, etc. so you can totally use this to modify an existing piece on another MIDI instrument, live.

chaosprint
2 replies
22h31m

This is awesome. A great interactive piece that is simple and fun. Love the idea of the random ball spawning.

I seem to have triggered "infinite sample playback" when I stuck the ball in a corner and the audio crashed. One experience I've had with this kind of large sample playback (in SuperCollider) is that by dynamically reducing the volume, it creates an interesting textured sound [1].

Of course for every project using Tone.js I would like to mention one of my project glicol.js which is in active development [2]. It has better performance but needs more use case to find what's needed in the API.

[1] https://github.com/chaosprint/Packing

[2] https://github.com/chaosprint/glicol

bambax
1 replies
20h33m

Glicol is absolutely amazing!!

SushiHippie
0 replies
16h3m

Seconded, what "sold it for me was this demo of Kraftwerk - Das Model:

https://glicol.org/demo#themodel (remember to play with line 14)

Since then, I've been playing around with it a bit and found out that it even has a cli/tui [0], although that one seems to have a few more bugs than the web version It's going to be my main way of using it as I don't want to miss my $EDITOR instead of editing on the web.

[0] https://github.com/glicol/glicol-cli

breck
2 replies
22h21m

Love it.

Any chance you are going to share the source code?

bambax
1 replies
21h4m

Thanks!

The code is not obfuscated or minified in any way, so it's easy enough to read. But I'm not sure it deserves to be actually published... ;-)

breck
0 replies
20h26m

Thanks, but in addition to checking out the source I'm more interested in following your work and what you do next on github (or gitlab, etc)

zeristor
1 replies
21h56m

'Crockery drifts across the surface of "clinamen", and when gentle currents get these white porcelain bowls clinking, French artist Celeste Boursier-Mougenot creates a changing, chiming soundscape.'

https://www.youtube.com/watch?v=RdCutpuUrX4

bambax
0 replies
21h35m

Wow. Really close concept indeed. Thanks for sharing.

teleforce
1 replies
23h19m

Fun fact, it's reported that the new Rolls-Royce Spectre 2024 turn signal's sound was created by combining the sound of finger nail tapping the car's aircond vent metal and the sound of a couple wine glasses touching. The resulting turn sound signal remarkably turned out to be exactly the same as normal turn signal in any other car, pardon the multiple puns.

Ylpertnodi
0 replies
14h13m

Where are the puns?

riedel
1 replies
23h42m

Reminds me a bit of the 3DS Electroplankton game. Wasn't quite so addictive though. Would be great to have a bit more control to generate repetitive patterns.

pierrec
1 replies
22h16m

This genre of musical sandbox is a really satisfying and fun rabbit hole. You can even take it to production (mainly ambient music production, that is). My favorite for usage inside DAWs is Droplets, which works as a plugin but also has a web version: https://fynthesizer.github.io/Drip/

There are other plugins for this, each with its own personality. For example Bitwig's Ricochet is a totally different take on the same idea, where they managed to make it usable for more rhythmic purposes: https://www.youtube.com/watch?v=WFvIYkTGRzA

bambax
0 replies
21h36m

Yeah, I knew about Droplets -- it's is really well executed, but maybe a little too predictable for my taste.

Didn't know about Ricochet (not a Bitwig user), but it's very impressive!

Also, you're the creator of protoplug? What a fantastic idea!

parpfish
1 replies
20h37m

“Music” or just “pleasant background noise”

Ylpertnodi
0 replies
14h16m

Both. But I've passed on the site to musicians and non-musicians alike - everybody loves is. The midi capability is stunning and ability to choose tonalities can be 'just left to play', or used as an inspirations for the basis for repetetive or repeating motives: repetition, and an element of predictability - both based in a predictable tonality is what most people seek in what they call 'music'.

Trapping the balls may give you something more approaching 'music'. Changing the root note, also. And the 'mode', too.

mock-possum
1 replies
23h39m

Have you ever looked at vcvrack.com? It’s free modular synth software, and I’ll bet the community would love to see something like this developed into a module.

bambax
0 replies
22h32m

Oh yes I love vcvrack (and Cardinal); but this is JavaScript, and for all I know vcvrack modules are C++? But sure it would make for a cool module.

bozhark
1 replies
23h7m

Could you add accelerometer as input method for phones?

bambax
0 replies
22h33m

I would need to test it more. The accelerometer generates lots of events that would end up changing gravity constantly (when held up); maybe with a low-pass filter so that gravity changes more slowly it would work.

bergwerf
1 replies
9h56m

Love it! One idea is to vary the intensity (volume, duration) with the collision momentum.

bambax
0 replies
9h29m

MIDI velocity does change with collision momentum. But with webaudio I wasn't able to make it sound convincing so I disabled it.

Ylpertnodi
1 replies
22h17m

Fantastic. On mobile atm, so midi ill investigate later. Have you considered making a .vst3 plugin?

bambax
0 replies
21h42m

I'm looking at nih-plug which is an audio plugin framework in Rust. I'm a Rust complete and utter noob, but this looks fun and a great way to learn (I'd rather not dive into the likes of Juce). So I guess we'll see!

Biganon
1 replies
21h46m

On Firefox mobile, the note resonates 0.5 second after the collision, making the experience very frustrating

bambax
0 replies
21h32m

Sorry to hear that. I use Firefox on a fairly old Android device from 2017, and it's acceptable? Maybe the device you're using is very busy?

It'd be hard to trigger the sound before the collision (although possible, in theory)...

windows2020
0 replies
19h28m

Nice. I trapped them all in a corner.

w_for_wumbo
0 replies
20h7m

This is amazing, it's like what I was trying to build a similar concept recently. (I think the whole AI consciousness conversations are speeding up our understanding of the shared nature of the conceptual thought space in which we all reside.)

I feel like we're getting to the point where we're combining the knowledge of geometry, music, art, maths, optics, biology etc. and we're going to be recreating some of the interconnected aspects of the natural world through the digital realm.

Once we do this, I think we're unlocking the possibility of a symbiosis with silicone-based life, where our discoveries work to lighten the path through the void of the unknown.

tombert
0 replies
19h48m

There was a free program years ago called "Ball Droppings" that was fun to play around with. This reminds me of that.

https://youtu.be/G6IKsek8DKE

qwertox
0 replies
22h35m

Ends up looking like a constellation.

otherayden
0 replies
21h40m

This is awesome lol, very fun to trap the ball in a corner

makach
0 replies
11h22m

Aahh, I used to play that song on the piano...

jcims
0 replies
22h41m

This is a lot of fun!

Reminds me of the 'polyrhythm' genre of videos on youtube (eg. LucidRhythms)

One fun thing to do is load the canvas up with a bunch of balls really close to each other then click the yin and yang icon which causes them to change state when struck.

Adding some kind of gravity might be fun.

hkon
0 replies
19h56m

What is happening when I lock some of the balls inside and then the sounds just stop. Is something overloading?

gcanyon
0 replies
18h4m

I made something similar to this in a quicktime movie (once upon a time they were interactive) back around... '98? I wish I still had a copy of it :-( I wonder if it would still play/run?

It was made with LiveStage(? -- and be prepared if you google that) from TotallyHip Software, as part of a promotion for them.

fallinditch
0 replies
15h37m

Very nice, satisfying indeed. Will be generating some MIDI!

dt23
0 replies
23h20m

Wow, this is super cool. The whole experience of interacting/watching/listening to it is very relaxing and harmonious-feeling. Thanks for sharing! :)

doubloon
0 replies
17h55m

great job

dekhn
0 replies
22h20m

I happened to be writing a desktop app that does something similar to this; I saw https://www.youtube.com/shorts/lF8fEn20OaU and many related videos, so I wrote up a simple QGraphicsView/pymunk app that implements these. The code is a dog's breakfast and will be under development for some time.

I see some videos which suggest that the developer actually set up the map and the physics such that specific songs get played, although I think there is some trickery to simplify it.

At the moment I'm working on a subproject which is generating the audio sounds for various bumping events, having found musicpy/sf2_loader a quick way to generate samples.

cantSpellSober
0 replies
20h47m

Awesome! Next step is mash it up with Pong and Guitar Hero so you have to use a paddle to hit the balls in the right direction to play a song.

block_dagger
0 replies
23h55m

Cool! I will try this out as a layer in my live ambient set later today.

ameesdotme
0 replies
23h34m

Had a lot of fun with this. Also a good laugh when trapping some balls and hearing the midi-engine go apeshit and eventually crashing.

Ylpertnodi
0 replies
13h56m

Had this open on three different browsers, and three different modes - for the adventurous.

"Trapping the balls", has never been so much fun.

Fantastic - thanks.

Liftyee
0 replies
6h22m

Fun little sandbox. Interesting how when in "yin/yang" mode, the balls seem to stop changing state when the tab is not in focus - is this a feature? I only found this by filling up the screen with a cacophony of balls, and then switching tabs.

DidYaWipe
0 replies
14h54m

Moody "limited series" soundtrack: DONE.