OSDN Git Service

eSpeak synth driver: reset lastIndex to None when speech is canceldd. Also move...
authorMichael Curran <mick@kulgan.net>
Sun, 3 Jul 2011 21:38:39 +0000 (07:38 +1000)
committerMichael Curran <mick@kulgan.net>
Sun, 3 Jul 2011 21:38:39 +0000 (07:38 +1000)
source/synthDrivers/_espeak.py

index b5ff773..00cfad2 100755 (executable)
@@ -119,6 +119,8 @@ t_espeak_callback=CFUNCTYPE(c_int,POINTER(c_short),c_int,POINTER(espeak_EVENT))
 def callback(wav,numsamples,event):\r
        try:\r
                global player, isSpeaking, lastIndex\r
+               if not isSpeaking:\r
+                       return 1\r
                for e in event:\r
                        if e.type==espeakEVENT_MARK:\r
                                lastIndex=int(e.id.name)\r
@@ -128,8 +130,6 @@ def callback(wav,numsamples,event):
                        player.idle()\r
                        isSpeaking = False\r
                        return 0\r
-               if not isSpeaking:\r
-                       return 1\r
                if numsamples > 0:\r
                        try:\r
                                player.feed(string_at(wav, numsamples * sizeof(c_short)))\r
@@ -179,7 +179,7 @@ def speak(text):
        _execWhenDone(_speak, text, mustBeAsync=True)\r
 \r
 def stop():\r
-       global isSpeaking, bgQueue\r
+       global isSpeaking, bgQueue, lastIndex\r
        # Kill all speech from now.\r
        # We still want parameter changes to occur, so requeue them.\r
        params = []\r
@@ -196,6 +196,7 @@ def stop():
                bgQueue.put(item)\r
        isSpeaking = False\r
        player.stop()\r
+       lastIndex=None\r
 \r
 def pause(switch):\r
        global player\r