My first song needs work

First of all I know nothing about music theory, how can I make this flow better?

with_fx :reverb, mix: 0.7 do
  with_fx :compressor do
    with_fx :echo, mix: 0.3 do
      live_loop :EpicMelody do
        use_synth :bass_foundation
        #First c major section
        play chord(:C4, :major), amp: 1.5, release: 2
        sleep 1
        play chord(:C3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:C3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:C5, :major), amp: 1.5, release: 2
        sleep 6
        #second c major section
        play chord(:C4, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:C3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:C3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:C5, :major), amp: 1.5, release: 2
        sleep 6.5
        #gmajor section
        play chord(:G4, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:G3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:G3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:G5, :major), amp: 1.5, release: 2
        sleep 6.5
        #fmajor section
        play chord(:F4, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:F3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:F3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:F5, :major), amp: 1.5, release: 2
        sleep 6.5
        #third c major section
        play chord(:C4, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:C3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:C3, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:C5, :major), amp: 1.5, release: 2
        sleep 6.5
        
        #ending riff
        play chord(:F, :major), amp: 1.5, release: 2
        sleep 1
        play chord(:F, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:F, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:F, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:A, :minor), amp: 1.5, release: 2
        sleep 1
        play chord(:G, :major), amp: 1.5, release: 2
        sleep 1
        
        
        play chord(:F, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:F, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:F, :major), amp: 1.5, release: 2
        sleep 0.5
        play chord(:A, :minor), amp: 1.5, release: 2
        sleep 1
        play chord(:G, :major), amp: 1.5, release: 2
        sleep 1
      end
    end
  end
end

live_loop :steady_drumbeat do
  sample :bd_ada, amp: 2
  sleep 0.5
  sample :hat_snap, amp: 1.5
  sleep 0.5
end

live_loop :voxy_bassline do
  with_fx :slicer, phase: 0.25, mix: 1 do
    sample :bass_voxy_hit_c, amp: 1, rate: 1
  end
  sleep 0.5
end

live_loop :percussion do
  sample :drum_cymbal_soft, rate: 1.5, amp: 0.5
  sleep 1
end

live_loop :harmony do
  use_synth :piano
  
  # Harmony for the first C major section
  play chord(:E, :minor), amp: 1, release: 2
  sleep 1
  play chord(:E, :minor), amp: 1, release: 2
  sleep 0.5
  play chord(:E, :minor), amp: 1, release: 2
  sleep 0.5
  play chord(:E, :minor), amp: 1, release: 2
  sleep 6
  
  # Harmony for the second C major section
  play chord(:D, :major), amp: 0.8, release: 2
  sleep 0.5
  play chord(:D, :major), amp: 0.8, release: 2
  sleep 0.5
  play chord(:D, :major), amp: 0.8, release: 2
  sleep 0.5
  play chord(:D, :major), amp: 0.8, release: 2
  sleep 6.5
  
  # Harmony for the G major section
  play chord(:B, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:B, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:B, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:B, :minor), amp: 0.8, release: 2
  sleep 6.5
  
  # Harmony for the F major section
  play chord(:A, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:A, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:A, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:A, :minor), amp: 0.8, release: 2
  sleep 6.5
  #harmony for third major c
  play chord(:E, :minor), amp: 1, release: 2
  sleep 0.5
  play chord(:E, :minor), amp: 1, release: 2
  sleep 0.5
  play chord(:E, :minor), amp: 1, release: 2
  sleep 0.5
  play chord(:E, :minor), amp: 1, release: 2
  sleep 6.5
  
  # Harmony for the F major section of ending riff
  
  play chord(:D, :minor), amp: 0.8, release: 2
  sleep 1
  play chord(:D, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:D, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:D, :minor), amp: 0.8, release: 2
  sleep 0.5
  
  # Harmony for the A minor and G major section of ending riff
  play chord(:E, :minor), amp: 0.8, release: 2  # Harmonizes with A minor
  sleep 1
  play chord(:B, :minor), amp: 0.8, release: 2  # Harmonizes with G major
  sleep 1
  
  
  # Repeat harmony for the second F major, A minor, G major section
  
  play chord(:D, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:D, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:D, :minor), amp: 0.8, release: 2
  sleep 0.5
  play chord(:E, :minor), amp: 0.8, release: 2  # Harmonizes with A minor
  sleep 1
  play chord(:B, :minor), amp: 0.8, release: 2  # Harmonizes with G major
  sleep 1
  # Repeat harmony for subsequent sections as needed
end
1 Like

Hi there. One tyhing you could do to reduce things a bit is to make use of the commands
use_synth_defaults and use_merged_syth_defaults
The former sets default vauldes for subsequent synthj calls, the latter CHANGES only the parameters following it.

So you could insert use_synth_defaults amp: 1.5,release: 2 at the beginning opf the EpicMelody live_loop aftger the use_synth :bass_foundation line, and at thebeinning of the :harmony loop afteer use_synth Piano insert use_synth_defaults amp: 1,release: 2 and when the amp reduces to 0.8 insert use_merged_synth_defaults amp: 0.8 and again when the amp: increases again insert use_merged_synth_defaultgs amp: 1

You could also reduce the epic_melody liveloop with the aid of a function definition. :cplay is defined to play a chord with given root note and type, and sleep for a give delay afterwards.

define :cplay do |croot,ctype,delay|
  play chord(croot,ctype)
  sleep delay
end

#ameded live_loop incuding synth-defaults:

live_loop :EpicMelody do
  use_synth :bass_foundation
  use_synth_defaults amp: 1.5,release: 2
  #First c major section
  cplay :c4,:major,1
  cplay :c3,:major,0.5
  cplay :c3,:major,0.5
  cplay :c5,:major,6
  #second c major section
  cplay :c4,:major,0.5
  cplay :c3,:major,0.5
  cplay :c3,:major,0.5
  cplay :c5,:major,6.5
  #gmajor section
  cplay :g4,:major,0.5
  cplay :g3,:major,0.5
  cplay :g3,:major,0.5
  cplay :g5,:major,6.5
  #fmajor section
  cplay :f4,:major,0.5
  cplay :f3,:major,0.5
  cplay :f3,:major,0.5
  cplay :f5,:major,6.5
  #third c major section
  cplay :c4,:major,0.5
  cplay :c3,:major,0.5
  cplay :c3,:major,0.5
  cplay :c5,:major,6.5
  #ending riff
  cplay :f4,:major,1
  cplay :f4,:major,0.5
  cplay :f4,:major,0.5
  cplay :f4,:major,0.5
  cplay :a4,:minor,1
  cplay :g4,:major,1
  
  cplay :f4,:major,0.5
  cplay :f4,:major,0.5
  cplay :f4,:major,0.5
  cplay :a4,:minor,1
  cplay :g4,:major,1
end

You could do something similar with your harmony loop too,.
Have fun

1 Like

Hey thanks for the advice that is much cleaner looking…

This is great, thanks - so far I’ve been doing note-chord/sleep and reps but not using functions…