Tristan Chord in Sonic Pi? (Tristan & Isolde - Wagner)

I’m trying to figure out how to create a loop from the Tristan chord…

Looking at a youtube of the notes and listening to the sound it looks that the notes last…

Dunno how to code exactly…who can help me a bit?

# tristan chord

use_synth :fm

play 60, release: 0.5, decay: 0.5
sleep 0.5
play 65, release: 1.5, decay: 3
sleep 1.5
play 65, release: 1.0, decay: 1.5
sleep 1
play 64, release: 0.5, decay: 0.5
sleep 1.5

play 63, release: 3.0, decay: 0
play 66, release: 1.5, decay: 0
sleep 3
play 66, release: 1.0, decay: 1
sleep 1
play 67, release: 0.5, decay: 0.5
sleep 0.5
play 63, release: 1.5, decay: 3.5
play 67, release: 0.5, decay: 3.5
sleep 1.50
play 68, release: 1.0, decay: 1
sleep 1
play 68, release: 0.5, decay: 0.5
play 63, release: 0.5, decay: 0.5
sleep 0.5

Hi Tonny
Try this:

#Tristan Chord
#use more than one part playing together in threads

n1=[:a3,:f4,:e4,:gs4,:a4,:as4,:b4,:r]
d1=[0.5,2.5,0.5,2.5,0.5,0.5,1.5,1] #duration unit 1 = crotchet

n2=[:r,:ds4,:d4,:r]
d2=[3.5,3,2,1]

n3=[:r,[:f3,:b3],[:e3,:gs3],:r] #can play chords if notes same length in them
d3=[3.5,3,2,1]

define :play_list do |nlist,dlist| #function to play lists of notes and corresponding durations
  nlist.zip(dlist).each do |n,d| #"zip" lists together and extract corresponding pairs in turn
    play n,sustain: d*0.9,release: d*0.1
    sleep d
  end
end
use_bpm 120

in_thread do #play parts in threads so they play together
  play_list(n1,d1)
end
in_thread do
  play_list(n2,d2)
end
play_list(n3,d3)

Thanks for your prompt response…advanced code for me…I play it at 60 bpm…resembles more the youtube!

live_loop :Tristan do
  with_fx [:compressor, :ixi_techno, :gverb, :normaliser, :reverb].choose, mix: rrand(0.3,0.6) do
    
    use_synth [:hollow, :dark_ambience, :blade, :piano].choose
    
    n1=[60,65,65,64,66,67,68,:r]
    d1=[0.5,1.5,1,0.5,2.5,1,1.5,1]
    
    n2=[:r,63,63,:r]
    d2=[3.5,3,2,1]
    
    n3=[:r,[:f3,:b3],[:e3,:gs3],:r] #can play chords if notes same length in them
    d3=[3.5,3,2,1]
    
    define :play_list do |nlist,dlist| #function to play lists of notes and corresponding durations
      nlist.zip(dlist).each do |n,d|
        play n,sustain: d*0.999999,release: d*0.000001, amp: rrand(0.6,1.1)
        sleep d
      end
    end
    
    bpm = 70 + 2*dice + dice + dice
    
    use_bpm bpm
    
    in_thread do #play parts in threads so they play together
      play_list(n1,d1)
    end
    in_thread do
      play_list(n2,d2)
    end
    play_list(n3,d3)
  end
  sleep 1
end

Sounds good with various fx and synths

2 Likes