A Sonic Pi sound tour (in code)?


#1

As I’m digging deeper into Sonic Pi, I’m realizing it’s quite massive at this point. All the different built-in samples, synth options, effects and those options.

Do you know if anyone has arranged a “tour” of all what’s available?

Thinking maybe something that interleaves a variety of sounds with puts to tell you what part of Sonic Pi you’re hearing.

Not a tutorial exactly, as there are lots of fantastic ones that I’ve seen around. Something quicker to get an idea of what’s available.


#2

Best thing I’ve seen is the Mehackit resource: http://sonic-pi.mehackit.org

Although a video series tour is something I want to eventually work on. The Patreon-only live sessions are part of the work-up to this as I figure out how to effectively deliver Sonic Pi info in video form :slight_smile:


#3

I highly recommend Sam ‘s livestream sessions. He gives a lot of information about Sonic Pi!


#4

Cool, thanks! Sam’s sessions have been great so far.

I’m thinking something a little more code level, so I’ll hack on the idea a bit and send back whatever comes out of that.


#5

This is along the lines of what I was thinking:

puts "Welcome to the SonicPi sound tour"
sleep 0.5

puts "First up, the samples..."
sleep 0.5

sample_groups.each do |group|
  puts "Playing #{group}"
  sample_names(group).sort.each do |s|
    puts s
    load_sample s
    sample s
    sleep sample_duration(s) + 0.1
  end
end

sleep 0.5
puts "And now the synths..."
sleep 0.5

synth_names.each do |s|
  next if [:sound_in, :sound_in_stereo].include?(s)
  puts s
  use_synth s
  play :c4
  sleep 1
end

sleep 0.5
puts "And finally some effects..."
sleep 0.5

fx_names.each do |f|
  next if [:record].include?(f)
  puts f
  with_fx f do
    use_synth :saw
    play :c4
    sleep 1
  end
end

Would be nice to extend this to cover a sampling of interesting synth & fx options, but I think it gives a quick idea of what’s in the box without having to read/copy/paste through the whole list.


#6

@matschaffer if such a thing were to be implemented it could alternatively make use of a bunch of functions currently available in the sonic pi language, rather than the underlying plumbing:
For samples, see sample_groups and sample_names, (or, if you’re not interested in printing by category, all_sample_names).
For synths and FX there’s synth_names and fx_names.


#7

Oh, good call @ethancrawford, thanks. Updated the above posting.