Non serve conoscere la teoria musicale a memoria: Sonic Pi ha scale e chord che restituiscono le note giuste come una lista.

scale(:e3, :minor_pentatonic)
# => (ring 52, 55, 57, 59, 62, 64)

chord(:e3, :minor)
# => (ring 52, 55, 59)

# arpeggio: suona le note della scala una a una
scale(:e3, :minor_pentatonic).each do |n|
  play n
  sleep 0.2
end

play chord(:a3, :major7)  # accordo suonato insieme

scale prende una tonica e un tipo (:minor, :major, :minor_pentatonic, :dorian...) e ti dà le note; chord fa lo stesso per gli accordi.

Combinali con .choose per melodie casuali sempre "in chiave", o con .tick per scorrerle in ordine. La teoria musicale diventa un'API.