At first glance this looks very cool. There is a lot of good documentations and it seems like a powerful set of libraries around it to make something very neat.
BUT...to put my PM hat on, I'm not sure who is the target audience here?
A - musicians who want to compose music with code.
B - people who want to learn programming by having fun with music creation.
C - programmers who want to learn music theory.
If the intention is a fun vehicle to to teach programming, then I think there are better ways. I looked thought the samples and I think as a kid I would get tired very quickly. There are so many function calls to learn. Right away I have to understand the concept of random and what it does.
I think if the idea is to empower musicians, this seems like a lot of work to create music.
At the end, you have to know some music principle and already understand a lot of different programming concepts to actually do anything.
This combination makes doing programming dependent on knowing music theory and creating music knowing a lot of programming and exploring all the different functions and libraries to then apply your music theory to.
To me it would be frustrating. And for musicians who I guess, can potentially create some sounds that might be difficult with existing tools, just to hard to do.
It would have been far better to have a simple 2D game board (tanks, robots, etc. I know it's been done) as a programing tool than inside a complex world of music theory.
Or at least make the libraries not dependent on music theory and provided some higher level presets with built in abstractions. Example: loop song(type: techno_beat, length:300) (do some stuff here) end_loop
It might be useful to divide the wold in neat venn diagrams of "target audiences" when you are running a business, but it is not good to start taking this stuff too seriously. There's more to life than that.
We are humans beings and we like to create. The digital computer is a meta-tool, in the sense that it is possible to invent entire new mediums of expression within it. This appears to be a particularly interesting one. I think you underestimate kids. I know I would be very excited to have access to this tool back in the day, and would be delighted to be able to use randomness to manipulate sound. Being called a "superhuman musician" for pressing a button would make me want to puke.
Take your PM hat off sometimes and smell the roses.
The creator of sonic pi gave a keynote talk at my company's dev conference last month. He was pretty clear that it was originally created to help teach children programming. It does have other audiences now though.
He mentioned that he tried starting with simple games like you suggest but that kids have unrealistic expectations of what they'll be able to do and it leads to disappointment. They can imagine a commercial quality game quite easily but have no hope of creating one. But with music they're excited to be able to make any sound at all and don't expect to be able to create a film score.
He mentioned that he tried starting with simple games like you suggest but that kids have unrealistic expectations of what they'll be able to do and it leads to disappointment.
Very interesting. I guess that could also make sense.
@pjmlp thanks for clarifying. I had no idea there was such a thing.
@darpa_escapee - thanks for guiding me into that rabbit hole. Csound looked the most promising to me. Pure Data needs more screenshot and samples, the site was very hard for me to dive through and Overtone Clojure it's cool. Wanted to learn that at one point, but I'm sticking first with learning Haskell.
Max/MSP is a popular one, basically a fleshed-out commercial version of Pure Data. As somebody with a background in procedural and OO programming, I personally find that graphical approach immensely frustrating, but I’ve known lots of people to whom it speaks.
For a more code-like experience, SuperCollider seems pretty fun, though I haven’t gotten deep into it. ChucK (http://chuck.cs.princeton.edu) is another neat option, if you really want to feel like you’re controlling every sample that goes by.
It's a species of programmable synthesiser. If it looks like a lot of work, you should see someone playing an analog modular synth. In fact, you should see someone playing classical piano; that's years of practice and a whole chunk of music theory.
I inserted 'classical' because otherwise someone would counter with an example of someone who's a self-taught piano genius with no musical theory training.
One of the problems that the Ruby community seems to have focused on is bridging the gap between code and ideas. I say this as a non-Ruby-programmer.
At the end of the day, computers simply read language and convert that into some basic operations. But still, the average non programmer feels like software is this black box of mystery which takes years to comprehend. And that's not true!
I know plenty of people programming synth's on Ableton, mostly using their mouse to point and drag. And I suspect a lot of them suffer from 'click and drag fatigue'. Most of them would be able understand all of the parameters being exposed here.
Helping bring practical programming to non-programmers is a noble goal. And I hope they succeed... because what programmers want to keep re-writing the same boilerplate for the next 20 years?
> One of the problems that the Ruby community seems to have focused on is bridging the gap between code and ideas. I say this as a non-Ruby-programmer.
As a Rubyist, I say this is pretty well on-the-mark. People ask me all the time why I love Ruby, why I think Ruby is the best language ever made, why I think in a thousand years, Ruby will have eaten all the other languages.
It's because at the end of the day, Ruby is a far more pleasing mental interface to software systems than anything else. If it's not Ruby we're all programming with in a thousand years, what language it is we are programming in, will look a lot like Ruby.
> Ruby is a far more pleasing mental interface to software systems than anything else.
I've heard this argument for basically every niche language, usually things like Lisp and (color) Forth. I've concluded that different people have very different internal mental models of programming.
I've used Lisp, and fell in love with it, before finding Ruby. Ruby is better than Lisp. It took me some time to realize this. Lisp isn't bad, but it's not Ruby.
I wouldn't call Ruby a niche language. You can use it for anything, it's very much a general purpose programming language. Most people only build websites with it, but you do see lots of other kinds of things built with it too, including, you know, a digital audio workstation.
I'd call PHP a niche language before I'd pin that on Ruby.
Software is eating the world. You can simulate almost all the instruments with software, create patterns easily with basic programming skills and create the music that you want in a cheaper and cleaner way compared to the traditional methods. Since this is not a commercial project, there might not be a well-defined target audience but I guess it works both ways. It can attract the software developers to learn some basic music theory and also attract the musicians to learn some programming so that they don't need to do it manually using DAW software.
As a casual user of SonicPi, I would really hate to see Sam give up on this project in favor of another crappy game that's supposed to teach kids to program. I already produce music on instruments and hardware devices. There are so few software tools out there where you can do what SonicPi does at an entry level like I am. It can be really easy to DJ a set w/ this, but you can also get really deep into musical concepts. That's something I really appreciate.
I think you're really underestimating the number of people who are programmers and musicians. As one, I've found Sonic Pi to be fun to mess around with.
Also, how do you make something like this without music theory? At the end of the day, you need an abstraction. Why make a new abstraction for creating music when everybody already agreed on one?
Well...I program and play music for fun. I enjoy making digital music on Linux with JACK and the way it basically turns your computer into a modular recording studio. I've always been interested in ways to combine programming and music. I've checked out a few different music libraries before, but they've always been fairly low level. As in, program your own oscillators for every synthesizer or sound, program your song, compile then playback. Which honestly, isn't very fun. Or, it's a closed, all inclusive package with builtin editor and massive library compatible with nothing else.
Something with a simple api that can be programmed on the fly is pretty cool. This is something i'm personally interested in checking out and playing with.
BUT...to put my PM hat on, I'm not sure who is the target audience here?
A - musicians who want to compose music with code. B - people who want to learn programming by having fun with music creation. C - programmers who want to learn music theory.
If the intention is a fun vehicle to to teach programming, then I think there are better ways. I looked thought the samples and I think as a kid I would get tired very quickly. There are so many function calls to learn. Right away I have to understand the concept of random and what it does.
I think if the idea is to empower musicians, this seems like a lot of work to create music.
At the end, you have to know some music principle and already understand a lot of different programming concepts to actually do anything.
This combination makes doing programming dependent on knowing music theory and creating music knowing a lot of programming and exploring all the different functions and libraries to then apply your music theory to.
To me it would be frustrating. And for musicians who I guess, can potentially create some sounds that might be difficult with existing tools, just to hard to do.
It would have been far better to have a simple 2D game board (tanks, robots, etc. I know it's been done) as a programing tool than inside a complex world of music theory.
Or at least make the libraries not dependent on music theory and provided some higher level presets with built in abstractions. Example: loop song(type: techno_beat, length:300) (do some stuff here) end_loop
Make the user feel like superhuman musicians.