Top
Best
New

Posted by samaaron 4 days ago

Sonic Pi v5(www.patreon.com)
380 points | 90 comments
harwoodr 17 hours ago|
For those wondering what it actually is, as I was:

https://sonic-pi.net/

"Sonic Pi is your free code-based music creation and performance tool."

markcerqueira 12 hours ago||
Reminds me of ChucK: https://chuck.cs.princeton.edu.
peapicker 8 hours ago||
I had a lot of fun with ChucK back in the day, really nice system.
xrd 15 hours ago||
I love Sonic Pi. I am a terrible musician but I really enjoy finding chords for a song and then putting them into a sonic pi buffer and messing around. U2 started as a cover band, right, so maybe this is a path to becoming musical someday.

The one thing that confuses me about Sonic Pi is the buffers/editor. I always wish I could replace the UI with my own embedded editor (emacs in my case). I would then be able to manage all my songs as files. Right now I hunt for "least crowded" buffer window, comment out the code for the song or songs, and then add my new song. If I had my own embedded editor (like emacs), I could rename buffers to be songs, have an unlimited amount (rather than just ten), integrated version control, etc.

Am I missing something simple about how others use sonic pi?

The big breakthrough of sonic pi is representing music as a highly readable text file. I assume I don't know how to use the built in editor and buffer system because I feel a lot of friction there.

samaaron 15 hours ago||
If you look in the source code you’ll find an example REPL which serves as a great minimal example of how you can build your own interface.

You essentially need to spawn a process, read the session’s port numbers and then send messages via OSC over the local network loopback.

This could easily done from your favourite editor of choice (e.g. Emacs).

xrd 15 hours ago||
Hi Sam, big fan of you and your work!

Does this mean I just don't understand how to use the existing UI? I'm often messing around with a bunch of chords and sounds and I quickly run out of scratch space. Does that mean I'm doing it wrong?

samaaron 15 hours ago||
What do you mean by “running out of scratch space?”

Do you mean your code was too long that Sonic Pi refused to run it? If so this has been addressed in v5 with much larger buffer sizes supported.

Or do you mean you ran out of buffer? In which case v5 helps again as you can now save and load all the buffers to and from a single save-file :-)

Tcepsa 12 hours ago|||
You can save/load the contents of a single buffer or all buffers. For a single buffer, select the buffer you want to save, then go to the Live menu and choose "Save Buffer As". To load a file into a buffer, choose the buffer you want to load it into and then go to the Live menu and select "Load into Buffer"

You can also save off all the buffers together (e.g. if you've put different parts of the same song into different buffers) by going to the Live menu and choosing "Save Set As" (or just "Save Set" if you want to overwrite what was previously in your last saved set e.g. you made changes to your song and you want to replace the previous version).

So to achieve a workflow similar to what you're describing, you construct your song (in up to ten buffers) and then save the set and clear the buffers or load a different set to work on another song. True, it doesn't give you infinite buffers, but it does give you a way to "manage all [your] songs as files".

You can then use e.g. Magit to version control the files just as you would if you were working in Emacs itself.

The sets are also saved as text files in a very human readable format; basically just all of the buffers dumped out one after another with some delimiters. You could even use Emacs to edit them and then load them into Sonic Pi to run them! (That said, I'm not sure there's a good sonic-pi-mode for things like indentation and autocomplete yet. Hopefully someday; I would love to have my custom evil-mode Emacs keybindings while working in Sonic Pi, but I get that it's not really a priority right now ;) )

simongray 3 hours ago||
> I always wish I could replace the UI with my own embedded editor (emacs in my case)

Consider his his older project instead? https://overtone.github.io/

He even used to perform using emacs before he created Sonic Pi.

samaaron 4 days ago||
Sonic Pi v5 is released.

Sonic Pi is now more friendly, more accessible, more powerful and more fun.

There's something to excite everyone - from the friendlier error messages, to the pro-audio config, to the new dynamic visuals for performance.

Enjoy!

specproc 16 hours ago||
I've been playing with it the last few weeks, great software and really fun to use. Fantastic timing. Thanks for all the hard work that went into the release.

I'm particularly happy to see keyboard shortcut preferences in the release notes, that's been a real pain point.

Thanking you kindly, sir.

Fervicus 17 hours ago|||
Congrats on the release Sam! Looking forward to checking it out. What's your favorite new feature?
samaaron 16 hours ago||
I love the new Link Audio which lets you stream and receive audio on the local network with any other Link Audio capable software such as Ableton Live.

I also like the new QuickStart Cards as a way to get started that doesn’t require reading the built-in tutorial.

Lapel2742 14 hours ago|||
I tried it. but the Flatpak seems to be missing some of the documentation.
samaaron 13 hours ago||
Apologies but I’m not the maintainer of the Sonic Pi Flatpak.

Instead v5 officially supports AppImage builds.

pzo 15 hours ago||
if you want to attract more userbase that's probably the least meaningful copy-text someone can provide. Not only doesn't even in one sentence what sonic pi v5 is but also doesn't explain whats difference between v4 and v5 - I mean what it means more friendly/accessible/fun really?
samaaron 14 hours ago||
Not sure if it’s possible to explain this in one sentence - I was just explaining the goals.

As a summary - friendly as in better autocomplete, better error messages. There are vast accessibility improvements for those with low vision and those that use screen readers. It’s more fun for many reasons but stand out ones are support for game controller input, interactive docs and low-friction QuickStart cards.

The post linked goes into more detail and the release notes go even further: https://github.com/sonic-pi-net/sonic-pi/releases/tag/v5.0.0

chaosprint 31 minutes ago||
Congratulations on your release, Sam!

Are you still considering hardware demos, such as those on Raspberry Pi?

If anyone here also wants to try a different syntax, check out http://glicol.org/.

nazgulsenpai 17 hours ago||
Every time I click a HN post with the Something Pi naming convention my graybeard brain expects to see an SBC. This is something just about as interesting! I grew up on (and still use) trackers for sequencing. It might be fun to try a similar workflow in this!
pdpi 16 hours ago||
The SBC in question here is the Raspberry Pi — Sonic Pi was one of the early pieces of educational that made up the RPi ecosystem, and Sam Aaron was sponsored by the Raspberry Pi Foundation to write it.
strbean 16 hours ago||
A bit confusing that `<something> Pi` developed two meanings:

- `<brand/line> Pi` as a brand/line of SBCs, with Raspberry Pi being the original

- `<anything> Pi` as a software package targeting Raspberry Pis or SBCs generally

thenthenthen 16 hours ago|||
Oh my pi! (Same here, yesterday I came to the conclusion that I dont understand any of the front page links. Thanks for commenters clearing it up also!)
minraws 17 hours ago||
I blame Mario for ruining me until a year ago Pi was RPi or 3.142... but yeah this is nice, I have been using daws and have written my own small piano roll app because bosca ceoil vanished a couple years ago, but this is nice too.

I think that app(bosca ceoil) is now back around among us, though I don't recall what had happened back in the day.

fitsumbelay 11 hours ago||
Since my first pi I've always been blown away by sonic pi's capacity and it's price. Surely worth the cost of the Pi itself and then some.

It's so good I feel the rare guilt of not using it enough especially as I see myself as lifelong musically-inclined (skill level is another topic tho ...)

Genuinely grateful to Aaron and everyone who helps keep this project going. Damn near a public good IMHO

hiccuphippo 17 hours ago||
How does it compare to https://strudel.cc/ ?
Fervicus 17 hours ago||
For starters, strudel runs in the browser while Sonic Pi is a stand alone application.
herpdyderp 17 hours ago||
The primary difference to me is that strudel's license is so restrictive that it's impossible to use on anything. This is MIT.
throwaway89201 12 hours ago|||
I don't know what you mean with this. Strudel is AGPL, which is hardly "impossible to use on anything". The default sound banks are CC-by(-sa), CC0 and unspecified. The unspecified ones might indeed be a problem, but the other ones are fine.

As long as you allow anyone to get the source code of any derivative work you make of the Strudel code, and you take some measures to keep the distribution of the two works somewhat separate, you're should be good. And yes, there's a lot of FUD by the FSF, but your pet projects shouldn't be encumbered by such a narrow reading of 'derivative work'.

spacechild1 16 hours ago||||
How exactly does the license matter if you just want to make music?
herpdyderp 16 hours ago||
I want to embed the player into standalone video game binaries that don't require internet access to download the restrictively licensed files. I'm not looking to embed music file outputs, I want the music to remain customizable on the fly.
abc42 5 hours ago|||
You could make your video game source AGPL. Source code is hardly a differentiating factor these days so you'll lose nothing.
fn-mote 15 hours ago|||
Seems like a pretty special use-case.
herpdyderp 13 hours ago||
I don't think it'd be that special if the licenses allowed it. (Meaning I believe it'd be normal already if it were possible.)
glimshe 16 hours ago|||
I think the underlying Supercollider sound engine uses the more restrictive GPL, though...
samaaron 15 hours ago|||
Actually v5 no longer uses SuperCollider’s scsynth engine.

I completely replaced it with my own port called SuperSonic - which targets native (used in this Sonic Pi release), WASM and embedded.

See https://github.com/samaaron/supersonic

spacechild1 14 hours ago|||
Hi, Sam! I have to say that's a strange statement. SuperSonic still uses scsynth as its synthesis engine. How is that a "complete replacement"?

I see that you are trying to circumvent the GPL, with somewhat dubious arguments. I'm pretty sure that running scsynth in an AudioWorklet creates a combined program and not an aggregate. (I'm not the only one who has raised this concern.)

Since scsynth is the foundation of Sonic Pi, why not respect the intention of its author?

samaaron 14 hours ago||
Sorry if it came across as strange. I’m just making sure people don’t confuse the two as SuperSonic isn’t an official SuperCollider project and I don’t want to cause any confusion.

I’m also definitely not wanting to circumnavigate the GPL! I have wholeheartedly embraced it as whilst I would argue it isnt scsynth it is most definitely a derivative work with a lot of shared code. There’s also a lot that is different/new.

Instead I’m only attempting to uphold the same network boundary that has existed since v3 of SuperCollider. When used over a network using an open and documented protocol that doesn’t tend to be considered a derivative work. This is observed in other software is such as databases.

Oh and in Sonic Pi’s case I am not running anything in an audioworklet. SuperSonic is built and shipped in its native form as a totally separate process. No js or browsers involved.

Sorry for any confusion.

spacechild1 11 hours ago||
Thanks for the kind response!

> I’m also definitely not wanting to circumnavigate the GPL!

You are going to great lengths to make sure that SuperSonic (and thus scsynth) can be used by non-GPL code. You are explicitly advertising in the README:

> Your application code interacts only with the MIT-licensed client APIs and is not intended to be a derivative work of the GPL components.

https://github.com/samaaron/supersonic#license

Or in the LICENSE file:

> SuperSonic is deliberately designed with a strict execution boundary between the GPL-licensed audio engine and application-level code.

https://github.com/samaaron/supersonic/blob/2652a28eb6cb51a4...

What's the point of this if not circumventing the GPL?

---

Running scsynth (or a derived application) as a separate process and communicating via sockets should be fine, at least from a legal standpoint. This is what Sonic Pi resp. the native SuperSonic clients do.

The SuperSonic JS client, however, lives in the same process as the scsynth WASM module. The fact that the two modules communicate via OSC messages is not really relevant. They clearly form a single combined program and therefore must comply with the GPL.

I'm pretty sure the same applies to the Erlang module. According to the LICENSE file, the scsynth engine is implemented as a shared library that the client calls into. This would be a textbook case of a combined program.

I would ask you to change the licenses accordingly.

samaaron 11 hours ago||
> You are going to great lengths to make sure that SuperSonic (and thus scsynth) can be used from non-GPL code

Sure because it’s my understanding that using a clearly documented protocol that doesn’t share internal data structures does not constitute a derivative work. I’m not trying to change anything rather make the boundary clear.

>They clearly form a single combined program and therefore must comply with the GPL.

I don’t think that this is necessarily the case - if the shape of the architectural boundary is the same as the networked OSC case then I think it’s very reasonable to argue that its aggregation and not derivative. I don’t believe the gpl actually states anything about process boundaries or linking mechanisms. Rather it’s generally the advice that a compiled work is derivative as it likely does share internal data structures etc.

I also don’t quite know what licenses you’re asking me to change. The parts of SuperSonic that derive from scsynth are clearly licensed gpl. The parts that are my copyright are clearly licensed MIT.

I’m really not trying to circumnavigate anything. I’m just trying to assert that calling gpl software over a clearly documented and formal boundary that does not share internal data structures doesn’t trigger the gpl - regardless of linking or process specifics. The issue is about copyright not implementation details.

spacechild1 9 hours ago||
> if the shape of the architectural boundary is the same as the networked OSC case then I think it’s very reasonable to argue that its aggregation and not derivative.

Where do you got that? The GPLv3 license text only says:

> A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit.

The JS/WASM and Erlang modules in SuperSonic are clearly combined to form a larger program. The GPL v3 does not say anything about networking protocols, "architectural boundaries" or sharing internal data structures.

The GPL v3 FAQ further clarifies:

> If the modules are included in the same executable file, they are definitely combined in one program. If modules are designed to run linked together in a shared address space, that almost surely means combining them into one program.

https://www.gnu.org/licenses/gpl-faq.html#MereAggregation

If you use a GPL-licensed library, your whole program must comply with the GPL. That's exactly why the LGPL exists: it adds an exception to the GPL so that a library may be used in a non-GPL program. James could have licensed scsynth under the LGPL, but he did not.

> I also don’t quite know what licenses you’re asking me to change.

The license of the JS and Erlang clients because they call into scsynth code (in the same process).

samaaron 6 hours ago||
Fair - the aggregate clause does say “larger program” so I overstated. However, it doesn’t define combination, and “based on the Program” is defined in section 0 via copyright permission - which is why I keep returning to copyright rather than mechanism.

The JS client doesn’t call into scsynth code. In postMessage mode the client and the engine run in separate execution contexts with no shared memory, exchanging serialised OSC - the browser enforces that boundary the same way the kernel does between processes on a socket.

Also, the JS and Erlang clients are entirely my own code and copyright surely their licence isn’t in question. I think the question you’re actually raising is what obligations fall on users who combine their software with SuperSonic. You already state that my approach in Sonic Pi is fine.

skor 11 hours ago||||
Hi! why a port and not contribution to the original project? What were the reasons? Will this be 100% compatible in the future? Thanks!!
samaaron 2 hours ago||
SuperSonic started life as an experiment side project and was the first successful AudioWorklet port of scsynth. When I got it working I shared it with the SuperCollider community with the hope that some form of contribution collaboration might happen but there didn’t seem to be much interest - and mostly friction possibly due to the fact that I had made use of LLMs to navigate and study the original code base. They then built their own audioworklet version which they merged into mainline. That was a signal for me to continue independently which I did - subsequently adding native and embedded targets to SuperSonic.

Sonic Pi uses the native version which includes substantial improvements specifically for the use case for Sonic Pi (schools and beginner ergonomics) vs pro audio workflows.

Also I definitely intend to keep things compatible where feasible and have already done this since November 2025.

glimshe 15 hours ago|||
It seems that SuperSonic also uses GPL, no?
samaaron 14 hours ago||
Yep, as it’s a derivative work. But I have put effort into making the interface purely network shaped so it’s possible to use it from non-gpl projects without them being considered a derivative work and triggering the gpl.
spacechild1 14 hours ago||
Careful! Just because you are exchanging messages via sockets does not necessarily make it a mere aggregate! Quoting the official GPL FAQ:

> By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.

https://www.gnu.org/licenses/gpl-faq.html#MereAggregation

samaaron 14 hours ago|||
Oh that sounds like the official SuperCollider stance might be that any use of scsynth from an existing project via the network OSC API is considered an aggregate. Is this the case?

I definitely don’t want to create any issues and it would be great to get some clarity here.

spacechild1 11 hours ago|||
I don't think that the SuperCollider team has an official stance on this and I can't really speak for all developers. Legally, I think you're on the safe side as long as scsynth runs in a separate process (which is the case for Sonic Pi). However, it's probably against the intentions of James McCartney. If he had wanted scsynth to be used by non-GPL programs, he would have released it under the LGPL. But that's just my assumption. If you're in doubt, just ask him :)
fl0id 13 hours ago|||
also keep in mind that the gnu.org want gpl to apply as widely as possible. Generally, your approach should be fine imo
gamblor956 13 hours ago|||
that too could be a basis to consider the two parts as combined into a larger program.

That would not stand up in court. This battle has been fought before. Interoperability is not a trojan horse to spread the GPL anymore than it is a trojan horse to impose copyright restrictions by private software.

herpdyderp 16 hours ago|||
Darn, you're right. Looks like there's still no hope here.
zaphar 14 hours ago||
I donate to this software because it's so much fun to play around with. My wife (of 30 years as of today) knows way more about music than I do and this is one way for me to connect a little bit with her hobby.
samaaron 13 hours ago||
Congratulations on you anniversary! I’m so happy to hear that Sonic Pi helps you connect together with music. It makes me smile :-)

Thanks also for your kind support.

fuklief 14 hours ago||
Congrats on the 30 years of marriage!
stets 17 hours ago||
This looks like a lot of fun. I wish they'd name it better though, the name makes me think it's a raspberry pi related thing. or a piece of hardware.
samaaron 16 hours ago||
Sonic Pi was originally written for the Raspberry Pi and shipped on their OS for many years - hence the name :-)
Zetaphor 16 hours ago|||
In the defense of Sonic Pi, the first version of it and the Raspberry Pi were released in the same year. Obviously one went on to become more popular
samaaron 16 hours ago||
That’s because Sonic Pi was originally built specifically for and in collaboration with Raspberry Pi :-)
kwanbix 17 hours ago||
Was thinking the same.
fmo91 16 hours ago|
This is one of my favorite software projects. I have played a bit with it a few years ago, and I often recommend others to play with it. I would love to have more musical knowledge, but even with my limited resources, I can do some cool stuff.

Congratulations and thank you for your hard work all these years!

More comments...