| 12 | gencache.EnsureModule('{EEE78583-FE22-11D0-8BEF-0060081841DE}', 0, 1, 0) |
| 13 | |
| 14 | class Sapi4: |
| 15 | |
| 16 | voice_list = [] |
| 17 | |
| 18 | def __init__(self): |
| 19 | #init |
| 20 | self.SpeedPercent=StringVar() |
| 21 | self.PitchPercent=StringVar() |
| 22 | self.VolumeLeftPercent=StringVar() |
| 23 | self.VolumeRightPercent=StringVar() |
| 24 | |
| 25 | try: |
| 26 | self.directss = win32com.client.DispatchWithEvents("{EEE78591-FE22-11D0-8BEF-0060081841DE}", Sapi4Events) |
| 27 | voice_no = self.directss.Find(0) |
| 28 | print 'Woohoo: have found engine' |
| 29 | self.voice = self.directss.Select(voice_no) |
| 30 | voice_name = self.directss.ModeName(voice_no) |
| 31 | self.sapi_compliant = 1 |
| 32 | if len(self.voice_list) < 1: |
| 33 | self.getVoiceList() |
| 34 | self.selectVoice(voice_name) |
| 35 | except: |
| 36 | print 'Bugger: unable to initialise speech!' |
| 37 | #self.quit() |
| 38 | return None |
| 39 | |
| 40 | def selectVoice(self, voice_name=''): |
| 41 | #select voice |
| 42 | voice_index = 0 |
| 43 | voice_no = 0 |
| 44 | found = 0 |
| 45 | for voice_compare in self.voice_list: |
| 46 | voice_no = voice_no + 1 |
| 47 | if voice_compare == voice_name: |
| 48 | found = 1 |
| 49 | break |
| 50 | if found == 0: |
| 51 | voice_no = 1 |
| 52 | self.directss.AudioReset() |
| 53 | |
| 54 | try: |
| 55 | self.directss.Select(voice_no) |
| 56 | self.sapi_compliant = 1 |
| 57 | except: |
| 58 | self.sapi_compliant = 0 |
| 59 | self.directss.Speak(' ') #don't understand why we need this here but voice doesn't change otherwise |
| 60 | self.voice_no = voice_no |
| 61 | self.voice_index = voice_no - 1 |
| 62 | self.voice_name = self.directss.ModeName(voice_no) |
| 63 | #print 'Selected voice: ' + self.voice_name |
| 64 | |
| 65 | self.MinSpeed = self.directss.MinSpeed |
| 66 | self.MaxSpeed = self.directss.MaxSpeed |
| 67 | self.Speed = self.directss.Speed |
| 68 | #print 'Speed: from ' + str(self.MinSpeed) + ' to ' + str(self.MaxSpeed) + ' - current ' + str(self.Speed) |
| 69 | |
| 70 | self.MinPitch = self.directss.MinPitch |
| 71 | self.MaxPitch = self.directss.MaxPitch |