# -*- coding: ISO-8859-1 -*-
""" capellaScript -- Bernd Jungmann
>>> Threads ausprobieren
Um ein laufenden Vorspiel unterbrechen zu können, möchte ich es
gerne als neuen Thread laufen lassen. 

Wenn der Knopf "Vorspiel abbrechen" gedrückt wird, soll ein Event
gesetzt werden, das der Vorspiel-Thread in kurzen Abständen abfragt,
und das ihn zum Abbruch veranlassen würde.

Leider wird offensichtlich die Ausführung des neuen Threads
unterbrochen, solange die messageBox aktiv ist.

Ersatzweise wäre es denkbar, durch Drücken einer Keyboard-Taste
das Vorspiel zu unterbrechen. Aber offensichtlich ist msvcrt.getch()
nicht in der Lage, auf den nächsten Input zu warten.
<<<
"""
import time
import threading
import msvcrt

def threadfunc(val, val2, event):
    # spiele 2 verschiedene tiefe Töne
    times = 10
    while times > 0:
        times -= 1
        MidiOut.noteOn(0,30,127)
        time.sleep(1)
        MidiOut.noteOff(0, 30)
        MidiOut.noteOn(0,25, 127)
        time.sleep(0.5)
        MidiOut.noteOff(0,25)
        if event.isSet():
            break

intval = 4
intval2 = 3
MidiOut.setMainVolume(0, 127)
MidiOut.programChange(0, 1)
evt = threading.Event()
newthr = threading.Thread(None, threadfunc, "play",(intval, intval2, evt))
newthr.start()
# laß das Vorspiel 1 sec lang spielen
time.sleep(1)
messageBox("MeinScript","Vorspiel abbrechen")
#msvcrt.getch()
evt.set()

