Little piece exploring shifting scales

I’ve been fiddling with the notion of adding sharps to scales, and playing melodies with the same scale degrees across scales. So, aeolian (minor) would shift to dorian, then mixolydian, then ionian (major), then lydian, then locrian a half step up, then phrygian, then aeolian, and so on.

Here’s a little piece I made:

define :rowstocolumns do |*thesearrays|
  results = []
  thesearrays.each_with_index do |thisarray, j|
    thisarray.each_with_index do |thisitem, i|
      (results[i] ||= [])[j] = thisitem
    end #each thisitem
  end #each thisarray
  results #return value
end #define rowstocolumns

define :debugprint do |label, value|
  puts (label || "").to_s + (value || "").to_s
end

whole = 4.0
half =2.0
quarter =1.0
eighth =0.5
sixteenth =0.25
dotted =1.5
triplet =2.0 / 3



scales = [:aeolian, :dorian, :mixolydian, :ionian, :lydian, :locrian, :phrygian].ring
pentatonicsperscale =  {:ionian=>[1, 2, 3, 5, 6], :dorian=>[1, 2, 4, 5, 7], :phrygian=>[1, 3, 4, 6, 7], :lydian=>[2, 3, 5, 6, 7], :mixolydian=>[2, 4, 5, 6, 1], :aeolian=>[3, 4, 5, 7, 1], :locrian=>[3, 4, 6, 7, 2]}
melodynotes = [1, 3, 5, 4, 5, 6, 7, 5, 3, 2, 5]
melodytimes = [eighth * dotted, eighth, eighth * dotted, eighth * dotted, eighth * dotted, eighth, eighth * dotted, eighth * dotted, eighth, eighth, quarter * dotted].ring
melodies = rowstocolumns melodynotes, melodytimes
debugprint "melodies ", melodies

chordnotes = [[1, 3, 5], [1, 4, 6], [1, 3, 5], [2, 4, 7]]
chordtimes = [half, half, half, half]
chords = rowstocolumns chordnotes, chordtimes
debugprint "chords: " , chords

bassnotes = [1, 1, 4, 4, 1, 1, 5, 5]
basstimes = [quarter * dotted, eighth, quarter * dotted, eighth, quarter * dotted, eighth, quarter * dotted, eighth]
bass = rowstocolumns bassnotes, basstimes
debugprint "bassnotes: ", bassnotes
debugprint "basstimes: ", basstimes
debugprint "bass: ", bass

pentatonics = {:ionian=>[1, 2, 3, 5, 6], :dorian=>[1, 2, 4, 5, 7], :phrygian=>[1, 3, 4, 6, 7], :lydian=>[2, 3, 5, 6, 7], :mixolydian=>[2, 4, 5, 6, 1], :aeolian=>[3, 4, 5, 7, 1], :locrian=>[3, 4, 6, 7, 2]}




melodylength = whole * 2

keysignature = :c4


(0..16).each do
  thisscale = scales.tick
  if thisscale == :locrian
    keysignature += 1
  end #if time to modulate
  debugprint "keysignature: ", keysignature
  debugprint "current scale: ", thisscale
  
  with_synth :hollow do
    in_thread do
      use_synth_defaults amp: 2
      
      melodies.each do |thisnote|
        debugprint "thisnote: ", thisnote
        play degree thisnote[0], keysignature, thisscale
        sleep thisnote[1]
      end #each note
      use_synth_defaults amp: 1
    end #thread
  end #with_synth
  
  with_synth :winwood_lead do
    in_thread do
      use_merged_synth_defaults cutoff: 60
      
      chords.each do |thischord|
        debugprint "thischord: ", thischord
        debugprint "thischord[0]: ", thischord[0]
        debugprint "thischord[1]: ", thischord[1]
        thischord[0].each do |thisnote|
          debugprint "thisnote: ", thisnote
          play degree thisnote, keysignature, thisscale
        end #each note in chord
        sleep thischord[1]
      end #this chord'
      use_merged_synth_defaults cutoff: 110
      
    end #in_thread
  end #with_synth
  
  
  
  
  with_synth :bass_foundation do
    in_thread do
      bass.each do |thisnote|
        debugprint "thisnote: ", thisnote
        play degree thisnote[0], keysignature - 36, thisscale
        sleep thisnote[1]
      end #each note
    end #thread
  end #with_synth
  
  
  with_synth :kalimba do
    in_thread do
      use_synth_defaults amp: 5
      thispent = pentatonics[thisscale].sort.ring.reflect.drop_last.to_a
      4.times do
        thispent.each do |thisnote|
          debugprint "thisnote: ", thisnote
          play degree thisnote, keysignature + 24, thisscale
          sleep sixteenth
        end #each note
      end
      use_synth_defaults amp: 1
    end #thread
  end #with_synth
  
  
  sleep melodylength
  
end #(0..9).each


Let me know what you think!

3 Likes

Love this. Especially the nice fruity bass notes. The chord progressions work well.

fun to listen to, and the modulations are cool.

just think there’s missing end there

Don’t think so.
I changed 9 to 16 at the top of the loop, but didn’t update the comment in the end.