Skip to content

AttributeError: 'NSSpeechDriver' object has no attribute '_current_text' #361

Open
@james-trayford

Description

Hi, I've hit a problem trying to use pyttsx3 for speech synthesis on Mac OSX Sonoma 14.2

I can get the say function to run ok, but when I try the engine.save_to_file() method, this crashes on engine.runAndWait() with the error: AttributeError: 'NSSpeechDriver' object has no attribute '_current_text' (see trace at bottom). However, the output file appears to produce successfully.

If I catch this error in a try block, I can get my application to run first time and have the audio file I need, but I think this leaves the NSSS engine in an abortive state - If i run again I get the Error run loop already started. I've tried also adding:

if engine._inLoop:                                                                                                                                                                  
      engine.endLoop()

to try and force stop the loop but I get Stopper already registered for this runLoop.

Grateful for any insight!

Trace:

in the `except` block, but this

AttributeError                            Traceback (most recent call last)
Cell In[4], line 6
      3 # render at default 48 kHz rate
      4 soni = Sonification(score, events, generator, system,
      5                     caption=caption_en)
----> 6 soni.render()
      7 soni.notebook_display(show_waveform=0)

File ~/Documents/Code/strauss_dev/src/strauss/sonification.py:205, in Sonification.render(self, downsamp)
    203     else:
    204         pass
--> 205     render_caption(self.caption, self.samprate,
    206                self.ttsmodel, str(cpath))
    207 rate_in, wavobj = wavfile.read(cpath)
    208 wavobj = np.array(wavobj)

File ~/Documents/Code/strauss_dev/src/strauss/tts_caption.py:121, in render_caption(caption, samprate, model, caption_path)
    117 engine.save_to_file(caption, caption_path)
    119 try:
    120     # TODO: explore why NSS triggers error hear without catching
--> 121     engine.runAndWait()

File ~/Documents/Code/strauss_dev/venv/lib/python3.11/site-packages/pyttsx3/engine.py:183, in Engine.runAndWait(self)
    181 self._inLoop = True
    182 self._driverLoop = True
--> 183 self.proxy.runAndWait()

File ~/Documents/Code/strauss_dev/venv/lib/python3.11/site-packages/pyttsx3/driver.py:195, in DriverProxy.runAndWait(self)
    190 '''
    191 Called by the engine to start an event loop, process all commands in
    192 the queue at the start of the loop, and then exit the loop.
    193 '''
    194 self._push(self._engine.endLoop, tuple())
--> 195 self._driver.startLoop()

File ~/Documents/Code/strauss_dev/venv/lib/python3.11/site-packages/pyttsx3/drivers/nsss.py:77, in NSSpeechDriver.startLoop(self)
     75 if nextfire is not None:
     76     nextfire = soon.earlierDate_(nextfire)
---> 77 if not runLoop.runMode_beforeDate_(NSDefaultRunLoopMode, nextfire):
     78     stopper.stop()
     79     break

File ~/Documents/Code/strauss_dev/venv/lib/python3.11/site-packages/pyttsx3/drivers/nsss.py:159, in NSSpeechDriver.speechSynthesizer_willSpeakWord_ofString_(self, tts, rng, text)
    158 def speechSynthesizer_willSpeakWord_ofString_(self, tts, rng, text):
--> 159     if self._current_text:
    160         current_word = self._current_text[rng.location:rng.location + rng.length]
    161     else:

AttributeError: 'NSSpeechDriver' object has no attribute '_current_text'

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions