#OceanPalace
G = 196
Ab = 207
A = 220
Bb = 223
B = 247
C = 262
Cs = 277
D = 294
Eb = 311
E = 330
F = 349
Fs = 370
q = .731
h = 2.0 * q
th = q * .5
xth = th * .5
dq = q + th
dth = th + xth
w = 2 *h
s = MoogSynthesizer()

r = Mandolin()

mm = SineWave()
RighthandIntro = [F,2*F,F,2*C,2*Cs,2*C,F,2*F,F,2*C,2*Cs,2*C,F,2*F,F,2*C,2*Cs,2*C,F,2*F,F,2*C,2*Cs,2*C,F,2*F,F,2*C,2*Cs,2*C,F,2*F,F,2*C,2*Cs,2*C,F,2*F,F,2*C,2*Cs,2*C,F,2*F,F,2*C,2*Cs,2*C]
LefthandIntro = [.25*F,.25*F,.5*G,.5*Ab,.5*Ab,.5*Bb,.5*Bb,.25*Eb]
LefthandValueIntro = [h+q+q+q, th, th, h + th, th, dq,q,th]
RighthandAA = [2*Eb,2*Eb,2*Eb,2*D,2*Eb,2*Eb,2*Eb,2*D]
RighthandValueAA = [3*h,h+q,dq,dq,2*h,h+q,dq,dq]
LefthandAA = [.25*F,.25*F,.25*F,.25*F, .25*F,.25*F,.25*F,.25*F,.25*F,.5*G,.5*Ab,.5*Ab,.5*Ab,.5*Ab,.5*Ab,.5*Bb,.5*Bb,.5*Bb,.5*Bb,.25*Eb,.25*F,.25*F,.25*F,.25*F,.25*F,.25*F,.25*F,.25*F,.25*F, .5*G,.5*Ab,.5*Ab,.5*Ab,.5*Ab,.5*Ab,.5*Bb,.5*Bb,.5*Bb,.5*Bb,.5*C]
LefthandValueAA = [dth,th,xth,dq,dth,th,xth,th,th,th,dth,th,xth,q,th,dth,th,xth,q,th,dth,th,xth,q,dth,th,xth,th,th,th,dth,th,xth,q,th,dth,th,xth,q,th]

def playComplexMM(note, value):
    mm.setFrequency(note)
    mm.noteOn(.5)
    wait(value)
    mm.noteOff(.5)

def playComplexR(note, value):
    r.setFrequency(note)
    r.noteOn(.5)
    wait(value)
    r.noteOff(.5)

def playXTHS(note):
    s.setFrequency(note)
    s.noteOn(.5)
    wait(xth)
    s.noteOff(.5)

def playComplexS(note, value):
    s.setFrequency(note)
    s.noteOn(.5)
    wait(value)
    s.noteOff(.5)

def playXTHMM(note):
    mm.setFrequency(note)
    mm.noteOn(.5)
    wait(xth)
    mm.noteOff(.5)

def IntroRight():
    s.connect()
    for x in RighthandIntro:
        playXTHMM(x)
    s.disconnect()
    
def IntroLeft():
    mm.connect()
    for x, i in zip(LefthandIntro,LefthandValueIntro):
        playComplexMM(x, i)
    mm.disconnect()
    
def RightAA():
    s.connect()
    for x, i in zip(RighthandAA, RighthandValueAA):
        playComplexS(x,i)
    s.disconnect()
    
def LeftAA():
    r.connect()
    for x, i in zip(LefthandAA, LefthandValueAA):
        playComplexR(x, i)
    r.disconnect()
    
def OceanPalace():
    doTogether(IntroRight, IntroLeft)
    doTogether(RightAA, LeftAA)




