#Schala's theme
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()
mm = SineWave()
righthandintro = [4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab,4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab]
righthandA = [4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab,4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab,4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab,4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab,4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab,4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab,4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab,4*Bb,2*F,4*Ab,2*F,4*Bb,2*F,4*C,4*Ab]
lefthandA = [2*Bb,2*Ab,F,Eb,Cs,C,Bb, .5*Bb]
lefthandvalueA = [w,w,w,h,q,q, 2*w, 2*w]
righthandB = [2*Eb, 2*Cs,2*Bb, 2*F,2*Cs,2*C,2*Cs,2*C,2*Cs,2*Eb,2*Ab,2*Bb,2*Bb,4*Bb,4*Ab,2*Fs, 2*F,2*Eb, 2*Cs,2*Bb, 2*F,2*Cs,2*C,2*Cs,2*C,2*Cs,2*Eb,2*Ab,2*Bb,2*Bb,2*C,2*Cs,2*C,2*Bb,2*Ab,2*Bb]
righthandvalueB = [h+q+th,xth,xth,h,h,xth,xth,h +q, th,h,h,h+q+th,th,h,dq,th,2*w,h+q+th,xth,xth,h,h,xth,xth,h +q, th,h,h,h+q,th,xth,xth,xth,h+q+th,th,2*w]
lefthandB = [Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,.5*Bb,.5*F,C,Ab, Bb,.5*F,Ab,.5*F,.5*Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,Bb,.5*F,C,Ab,  Bb,.5*F,Ab,.5*F,.5*Bb,.5*F,C,Ab,Bb,.5*F,Ab,.5*F,.5*Bb,.5*F,C,Ab]

def PlayATENotes(note):
    s.setFrequency(note)
    s.noteOn(1)
    wait(th)
    s.noteOff(1)

def playComplex(note, value):
    mm.setFrequency(note)
    mm.noteOn(1)
    wait(value)
    mm.noteOff(1)

def Intro():
    s.connect()
    for x in righthandintro:
        PlayATENotes(x)
    s.disconnect()
    
def RightA():
    s.connect()
    for x in righthandA:
        PlayATENotes(x)
    s.disconnect()
    
def LeftA():
    mm.connect()
    for x, i in zip(lefthandA, lefthandvalueA):
        playComplex(x, i)
    mm.disconnect()
    
def RightB():
    mm.connect()
    for x, i in zip(righthandB, righthandvalueB):
        playComplex(x,i)
    mm.disconnect()
    
def LeftB():
    s.connect()
    for x in lefthandB:
        PlayATENotes(x)
    s.disconnect()

def SchalaTheme():
    s.setGain(1)
    Intro()
    doTogether(RightA, LeftA)
    doTogether(RightB, LeftB)
