omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Can't install pyttsx3 module

    Pythonista
    6
    33
    18073
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • lyubomyr83
      lyubomyr83 @sulcud last edited by

      @sulcud
      Maybe you know how to change default voice from female to male?
      And how can i print all availible voices?

      1 Reply Last reply Reply Quote 0
      • ccc
        ccc last edited by

        @lyubomyr83 said:

        how can i print all availible voices?

        https://forum.omz-software.com/topic/4706/how-to-use-speech-say-in-different-voice/2

        1 Reply Last reply Reply Quote 0
        • sulcud
          sulcud last edited by sulcud

          @lyubomyr83, I made this class to make it easier to work with the reference @ccc is pointing to, all could be done thanks to the work of @JonB

          
          import objc_util
          import re
          
          
          class SpeechModule(object):
          	def __init__(self):
          		self.__AVSpeechUtterance = objc_util.ObjCClass('AVSpeechUtterance')
          		self.__AVSpeechSynthesizer = objc_util.ObjCClass('AVSpeechSynthesizer')
          		self.__AVSpeechSynthesisVoice = objc_util.ObjCClass('AVSpeechSynthesisVoice')
          		self.__synthesizer = self.__AVSpeechSynthesizer.new()
          
          	def get_synthesis_languages(self) -> list:
          		return self.__AVSpeechSynthesisVoice.speechVoices()
          
          	def say(self, msg: str, language: objc_util.ObjCInstance, rate=0.5):
          
          		utterance = self.__AVSpeechUtterance.speechUtteranceWithString_(msg)
          		utterance.rate = rate
          		utterance.voice = voice
          		utterance.useCompactVoice = False
          		self.__synthesizer.speakUtterance_(utterance)
          
          	def is_speaking(self) -> bool:
          		return self.__synthesizer.isSpeaking()
          
          	def is_paused(self) -> bool:
          		return self.__synthesizer.isPaused()
          
          	def pause(self) -> bool:
          		return self.__synthesizer.pauseSpeakingAtBoundary_(True)
          
          	def stop(self) -> bool:
          		return self.__synthesizer.stopSpeakingAtBoundary_(True)
          
          	def continue_speaking(self):
          		self.__synthesizer.continueSpeaking()
          
          

          Here is an example how to use it

          
          import time
          
          speech_ = SpeechModule()
          
          available_voices = speech_.get_synthesis_languages()
          
          us_english_voices = tuple(filter(lambda voice: "en-US" in str(voice), available_voices))
          
          voice = us_english_voices[0]
          
          speech_.say('Hello friend! how are you?', voice, 0.3)
          
          time.sleep(1)
          speech_.stop()
          print(speech_.is_speaking())
          speech_.say("nevermind", voice)
          

          For some reason I can’t make that pause function to work correctly, anyway, it is an idea for your project and maybe my class could be buggy, so objc gurus invocation (@cvp @mikael @JonB @ccc )

          cvp 2 Replies Last reply Reply Quote 0
          • cvp
            cvp @sulcud last edited by

            @sulcud 👍 perfect except the fact to include me in a gurus list 😢

            1 Reply Last reply Reply Quote 0
            • cvp
              cvp @sulcud last edited by cvp

              @sulcud said:

              For some reason I can’t make that pause function to work correctly,

              Parameter of pauseSpeakingAtBoundary_ is not a Boolean but an integer, see AVSpeechBoundary , try 0=Immediately instead ofTrue

              1 Reply Last reply Reply Quote 0
              • sulcud
                sulcud last edited by sulcud

                @cvp, you are right, using 0 fixes it, did you find anyway to fix the false positives that is_paused and is_speaking functions return?

                cvp mikael 4 Replies Last reply Reply Quote 0
                • cvp
                  cvp @sulcud last edited by cvp

                  @sulcud I don't have tested your code thus I didn't know there were some problems, except this one you described. I'll try later, sorry

                  1 Reply Last reply Reply Quote 0
                  • cvp
                    cvp @sulcud last edited by

                    @sulcud First, parameter of stopSpeakingAtBoundary_ is also integer...

                    1 Reply Last reply Reply Quote 0
                    • cvp
                      cvp @sulcud last edited by

                      @sulcud said:

                      did you find anyway to fix the false positives that is_paused and is_speaking functions return?

                      No, sorry

                      1 Reply Last reply Reply Quote 0
                      • JonB
                        JonB last edited by

                        Haven't tried, but often objc_util.on_main_thread fixes problems like is_paused not reporting correct no values.

                        Note is_speaking will return true even if paused...

                        cvp 1 Reply Last reply Reply Quote 0
                        • cvp
                          cvp @JonB last edited by

                          @JonB nothing changed for is_speaking, as you did foresee

                          1 Reply Last reply Reply Quote 0
                          • JonB
                            JonB last edited by

                            Discussion
                            Returns YES if the synthesizer is speaking or has utterances enqueued to speak, even if it is currently paused. Returns NO if the synthesizer has finished speaking all utterances in its queue or if it has not yet been given an utterance to speak.

                            So if you want to know when speaking stops, one would want to check if not speaking, or speaking and paused.

                            Because of threading and such, it might be more reliable to implement the delegate, and then keep track of state within the delegate object, that can then be queried in python code.

                            1 Reply Last reply Reply Quote 1
                            • mikael
                              mikael @sulcud last edited by

                              @sulcud, looking at this putting a wrapper around the delegate as @JonB suggests looks like the best way to get fine control over the speech, being able to highlight individual words as they are spoken etc.

                              Such a wrapper could also include synchronous methods, so that it would be easy to just say something and move on after the talking is done.

                              1 Reply Last reply Reply Quote 1
                              • lyubomyr83
                                lyubomyr83 @sulcud last edited by

                                @sulcud
                                I was remove speech module in my iOS. How to recover???

                                1 Reply Last reply Reply Quote 0
                                • sulcud
                                  sulcud last edited by sulcud

                                  I think that erasing a Pythonista build-in module is not possible, remember that python has a weird importing system so if you have a script/folder called speech in the same folder of your main script maybe you are importing it instead of the build in one. (python import order is: current dir, ... , site-packages, build-in) but If that is not the case, I think a fresh install of Pythonista could work

                                  lyubomyr83 1 Reply Last reply Reply Quote 1
                                  • lyubomyr83
                                    lyubomyr83 @sulcud last edited by

                                    @sulcud fresh install doesn't helped. I was delete speech module before over stash(((. Now i can't recover.

                                    1 Reply Last reply Reply Quote 0
                                    • JonB
                                      JonB last edited by JonB

                                      Make sure you don't have a speech.py in site-packages, or in the same folder as the main script you are running. Also make sure you don't have any folders called speech inside site-packages, that includes an init file.

                                      As a check, in the console, try

                                      import speech
                                      

                                      If that fails, look at the traceback to show you what failed, which should include a path to the module it was trying to import.

                                      1 Reply Last reply Reply Quote 0
                                      • cvp
                                        cvp last edited by

                                        You can also try

                                        import speech
                                        import inspect
                                        print(inspect.getfile(speech)) 
                                        

                                        Either you will get an error module 'speech' (built-in)> is a built-in module
                                        Either you will get its path if another speech module is imported

                                        lyubomyr83 1 Reply Last reply Reply Quote 0
                                        • lyubomyr83
                                          lyubomyr83 @cvp last edited by

                                          @cvp
                                          get an error module 'speech' (built-in)> is a built-in module

                                          cvp JonB 2 Replies Last reply Reply Quote 0
                                          • cvp
                                            cvp @lyubomyr83 last edited by

                                            @lyubomyr83 thus, you did not remove it...

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors