There's enough detail there that you can take those instructions and reimplement your own version of it, and you'll end up with essentially the same 'piece of music', but certainly a different interpretation of it. Because while the score lays out some details precisely, it leaves other choices less clear. What does 'all inversions' really mean when enumerating chords? Does it include open, spread voicings? What durations should we choose from for our random waveforms? How short is 'short' when deciding to repeat? And of course, what wave synths should you use, and how should you modulate them?
All those are similar to the decisions a traditional instrumentalist makes when interpreting a sheet music score for performance - here, a generative music coder can follow this 'score' and produce a program that represents their own interpretation of the piece.
Coding it up in Sonic Pi (https://sonic-pi.net/) was a fun exercise, and I feel like I was able to produce something along the lines of what the composer intended. It carries the same kind of mood that the recording in the video has. But it's my own 'performance' of the work, if that makes sense (even if it's actually Sonic Pi 'performing' it at runtime...)
All of which got me thinking about the relationship more generally between specification, and implementation. Considering different programmers' implementations of algorithms as individual 'performances' of scores from the overall design - and then thinking about developers building elements of a larger system architecture as individual performers working to deliver their part of the performance as part of a band or orchestra. Some groups, maybe they're directed by a conductor-architect; others maybe are improvisers, riffing off one another and occasionally stepping up to deliver a solo. And some are maybe solid session performers, showing up and delivering strong but unflashy performances to a producer's specification.
So overall, a nice meditative coding exercise for a Sunday afternoon, and a shift in perspective. Thanks for sharing it.
I had some feedback from a art curator about a previous piece of work that I was going to show (this one in fact https://www.vitling.xyz/welcome-to-tech-talk/ ), and she didn't really understand what was going on. After explaining what was happening and how it all works she told me "I love it now; but you're hiding all the interesting parts from the audience".
One of the interesting parts about generative art is that the "work" I do is really the ruleset/algorithm, rather than the audio or visuals that come out of it, so I always want to find a way to show what's happening 'inside the box' so to speak. Source code can be nice, but only for those who can read it, and the core idea often gets lost in boilerplate and technical weirdness. That's where I got to the idea of writing a score for it instead, which just lays out the basic premise of what's going on - enough to understand that what's being played is generative but not so much as to get lost in the detail.
I think it usually just means: take the chord in its ‘root position’, and take inversions (that is, sort of (up to octaves) cyclic permutations) of it. So it would be leaving out lots of those more open, sparse voicings.
I mentioned Sonic Pi in my post - it actually has a bunch of built in API support for this sort of thing.
Generating all the basic inversions of all those chords for all those root notes is as simple as:
(note_range :A2, :D5).each { |root|
[:major, :minor, :major7, :minor7].each { |chord|
chord_size = chord(root, chord).to_a.length
for i in 0..chord_size do
the_chord = chord(root, chord, inversion: i)
end
}
}
'the_chord' gets set to arrays of midi notes corresponding to every inversion of every chord.https://www.vitling.xyz/toys/acid-banger/
Also of note: all the demos open to a silent "click to start" screen, and all the autoplaying videos are muted by default even, like on TFA.
The Behringer lets you connect to an app via USB so you can program it that way too.
The sound engine is easy to use and the knobs encourage experimentation - the interaction of the filter, the envelope and the accent is where the fun is. And of course the slide!
But yes arguably synth experience won't even help, the 303 sequencer is very weird and unlike any other sequencer
I tried to research something across these lines before, and I cannot quite recollect what exactly was the problem with the books I came across on my own (I think it was mostly just too basic to be useful), but somehow I never got any "general" understanding of "how music works". Even though I've got some very basic solfeggio training long time ago (admittedly, I was too young to ask questions I now find interesting and understand what's the purpose of what we were doing there, but at least I can read the notation).
An explanation of how this application might work (haven't verified from the source or letting it run long enough): let's say it chooses a subset of notes ("scale degrees") from a minor key, probably chosen at random. A subset of 5 or fewer notes from a scale (a pentatonic scale) will constrain the possible space of melodies so that most configurations will sound good. Even fewer and you get a more predictably pleasant (but perhaps less interesting) result. For instance, the notes that comprise the root chord will always sound good when played in any order. Acid lines typically suggest some kind of minor chord by playing an arpeggio (usually a repetitive melody consisting entirely of notes from a particular chord).
Also, a subset of notes from one scale are always going to be present in another scale. You can transition (modulate) from one scale to another by having a section use a shared subset of notes, then switching to the new one. In this manner, you can have a single piece of music traverse all possible scales (in acid techno, almost entirely minor scales).
That's a great observation, thank you!
And there's no single actual music theory book recommendation in this thread.
(And I don't think it's a lack of patience to learn terms that's the problem here, definitely not in my case. I know names for all intervals literally for a longest part of my life. I kinda know how each of them "feels". But it's still too far from being able to write music "algorithmically", and I don't know what would be the next step. Most books I come across just try to teach me interval names once again, and I'm pretty sure there must be more theory in music than that.)
It's a fascinating book in its own right on a bunch of theories about the neurology of music but it includes a very basic introduction to theory at the beginning.
Hi, it's me, the original artist :-D and this thing is taking up a lot of space in my 1-room apartment.
I'm not sure if I would want to sell it or not, but I find it funny that the business bitches here are talking about costs to hire someone to clone it and/or set up a factory before suggesting to talk to the person who actually did it.
Someone with the right hardware skillset could put one together in a weekend pretty easily, maybe 10-15 hours work or so. Skills include RaspberryPi experience, Arduino experience, integration between RasPi and Arduino, addressable LED strip driven by Arduino experience, assembly (both electronics/soldering and artistic construction/sourcing of an enclosure and the "pretty looking led strip in aquarium tube with wire stiffeners" bits).
Software is another skill required here, and for this you'll need both RasPi programming and Arduino programming, plus music specific knowledge and skills. That'll be a harder task to become or find someone with both skill sets. I'd expect top maybe be able to get the basic software for the RasPi/Arduino running in a weekend, but that iterating over configurations or "compositions" that look and sound interesting to be a long term ongoing project.
If you don't have all or some those skills, you may find people at a local hackerspace/makerspace who'll help you out with this things, but I'd expect it to take at least 5-10 times as long to build it yourself with volunteer help than it'd take someone who already has all those skills.
If you wanted to just commission someone to build/program one for you as a one off, I know a few people who do that kind of work, and I'd expect them to charge you $5k - $10k for it, if they're expected to provide some sort of warranty and ongoing support to you.
(If you wanted small run production of then, I'd guess at something like $100-250k setup for scrappy startup style hardware manufacturing design, or closer to $250-$500k for contracted industrial design from an experienced industrial design firm. Then you might be able to manufacture them in production runs of 500-1000 for somewhere around $100 each, and six months later there'd be ripoffs on AliExpress for $49 plus shipping.)
I already got LEDs, except the wire and tubes. My LEDs are already in tubes (one can choose on Aliexpress).
I would take an esp32 and run WLED on it. LedFX also works with it, to illuminate according to sound. Not that fancy like addressing each pixel with your own rules, but nice enough to watch it for a while.
Without the pi but with the esp32 it’s about 70€ for the parts.
couldn't this all be done only with the Raspberry Pi, using all those GPIO pins that it has? Feels like it is being underutilized and the project ought to be simplified to a single board (a single mains connection needed would be a very nice consequence too)
It is breif, but weird. Anyway, this is a really beautiful display, it's branches feel closer to tendrils, and I imagine if the music had picked minor chords predominantly this would be an experience closer to my negative view of trees. Thankfully the power of music prevails.
Try this:
https://www.youtube.com/watch?v=x-OAHzyBIas
or this:
https://www.youtube.com/watch?v=8WGx5z9wVNY&list=PLfimnwaZdu...
Probably because it uses the same 303's and 909's :)
If you wouldn't mind reviewing https://news.ycombinator.com/newsguidelines.html and taking the intended spirit of the site more to heart, we'd be grateful.
Find all the chords from the set that have all but one note in common with the playing chord.
Choose one of these at random.
Go back to 3 and repeat forever.
This means a fairly small group of chords. Not sure it covers more than one key.A triad 1 3 5 can become 7 3 5, then 7 2 5, which is a 5th. Once you can move a 5th you can move anywhere because it's a move of 7 in the integers modulo 12 (numbering all the notes chromatically) which will get you back round to 0 in 12 moves.
Maj -> Min is only one note change, as is moving inversions or adding or removing a 4th note.
I'm just so glad that HN seems not to be getting paid (or even influenced much?) to direct that fire-hose (as far as I know anyway!) Killer job dang! Can't believe you get so much done, kudos!
I use it myself on a Pi 4 to control a WS2815 strip of 466 pixels on the fascia of my house, for holiday decorations.
Go check out the Wikipedia page on Neo-Riemannian theory for more details, but here are a few key facts about P, L, and R: For any chord x, then if x is major, then P(x), L(x), and R(x) are all minor. If x is minor, then P(x), L(x) and R(x) are all major. P, L, and R are all inverses of themselves, so that P(P(x)) = x, and so on for L and R. It's possible to reach any major or minor chord from any other major or minor chord by some sequence of P, L, and R transformations. For example, from C major, applying L then R gets you to G major; applying R then P gets you to A major; and applying L then P gets you to E major.
Hopping around via Neo-Riemannian transformations are a quick way to use smooth voice leading to get to a "remote" key center (i.e., one that doesn't have many scale tones in common with the key you started in), but I was surprised when listening to the piece how (relatively) stable the harmony seemed. What's interesting here is that because of the way the algorithm is constructed, P transforms are much less common than L or R transforms (or just staying with the same chord) -- and crucially, P transforms are a vital ingredient in quickly moving to remote keys. By my rough calculations (which assume the Markov process has reached steady state and ignore the limits on min/max pitch), only 1/27th of all chord changes are P transforms. It also turns out that in steady state, 7th chords are more common than simple triads by a ratio of 16:11.
And for someone to have a video demo, it just makes it better. Lots of code projects die before they take off because the author only described it with a wall of text.
WS2812B / Arduino / Raspberry Pi / C++