From 08244f9a95046d73c87e3c08ee0484b58bf3cf5f Mon Sep 17 00:00:00 2001 From: Nav <62173713+codeaye@users.noreply.github.com> Date: Sat, 8 Apr 2023 18:20:48 +0000 Subject: [PATCH 1/5] Fix save_to_file on Macos Ventura when using nsss --- pyttsx3/drivers/nsss.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyttsx3/drivers/nsss.py b/pyttsx3/drivers/nsss.py index 6cf5f81..98429ef 100644 --- a/pyttsx3/drivers/nsss.py +++ b/pyttsx3/drivers/nsss.py @@ -3,6 +3,7 @@ from AppKit import NSSpeechSynthesizer from PyObjCTools import AppHelper from ..voice import Voice +import os def buildDriver(proxy): @@ -100,7 +101,11 @@ def setProperty(self, name, value): @objc.python_method def save_to_file(self, text, filename): url = Foundation.NSURL.fileURLWithPath_(filename) - self._tts.startSpeakingString_toURL_(text, url) + pr = os.fork() + if pr == 0: + self._tts.startSpeakingString_toURL_(text, url) + else: + os.wait() def speechSynthesizer_didFinishSpeaking_(self, tts, success): if not self._completed: From b1cebb37368ec8233a1c588627b8367202bc7a6d Mon Sep 17 00:00:00 2001 From: Nav <62173713+codeaye@users.noreply.github.com> Date: Sat, 8 Apr 2023 19:43:53 +0100 Subject: [PATCH 2/5] back to the workaround cus why not --- pyttsx3/drivers/nsss.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pyttsx3/drivers/nsss.py b/pyttsx3/drivers/nsss.py index 98429ef..917a406 100644 --- a/pyttsx3/drivers/nsss.py +++ b/pyttsx3/drivers/nsss.py @@ -3,7 +3,6 @@ from AppKit import NSSpeechSynthesizer from PyObjCTools import AppHelper from ..voice import Voice -import os def buildDriver(proxy): @@ -101,11 +100,10 @@ def setProperty(self, name, value): @objc.python_method def save_to_file(self, text, filename): url = Foundation.NSURL.fileURLWithPath_(filename) - pr = os.fork() - if pr == 0: - self._tts.startSpeakingString_toURL_(text, url) - else: - os.wait() + import time + + self._tts.startSpeakingString_toURL_(text, url) + time.sleep(len(text) * 0.01) def speechSynthesizer_didFinishSpeaking_(self, tts, success): if not self._completed: From 84d1c93f34006d0196192ce6b039a50910793f04 Mon Sep 17 00:00:00 2001 From: Nav <62173713+codeaye@users.noreply.github.com> Date: Sat, 8 Apr 2023 19:55:01 +0100 Subject: [PATCH 3/5] Update nsss.py --- pyttsx3/drivers/nsss.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyttsx3/drivers/nsss.py b/pyttsx3/drivers/nsss.py index 917a406..40b8622 100644 --- a/pyttsx3/drivers/nsss.py +++ b/pyttsx3/drivers/nsss.py @@ -2,7 +2,7 @@ from Foundation import * from AppKit import NSSpeechSynthesizer from PyObjCTools import AppHelper -from ..voice import Voice +from pyttsx3.voice import Voice def buildDriver(proxy): From 6457f6592e194c2fab9b45a0a2aaeda29850ca85 Mon Sep 17 00:00:00 2001 From: Nav <62173713+codeaye@users.noreply.github.com> Date: Sat, 8 Apr 2023 19:56:17 +0100 Subject: [PATCH 4/5] Update nsss.py --- pyttsx3/drivers/nsss.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyttsx3/drivers/nsss.py b/pyttsx3/drivers/nsss.py index 40b8622..8a2427d 100644 --- a/pyttsx3/drivers/nsss.py +++ b/pyttsx3/drivers/nsss.py @@ -60,8 +60,7 @@ def _toVoice(self, attr): except KeyError: lang = attr['VoiceLanguage'] return Voice(attr['VoiceIdentifier'], attr['VoiceName'], - [lang], attr['VoiceGender'], - attr['VoiceAge']) + [lang], attr['VoiceGender']) @objc.python_method def getProperty(self, name): From 9aa422e6b098305e6bf400eb24bc60ec703ee188 Mon Sep 17 00:00:00 2001 From: Nav <62173713+codeaye@users.noreply.github.com> Date: Sat, 8 Apr 2023 20:49:40 +0100 Subject: [PATCH 5/5] Update nsss.py --- pyttsx3/drivers/nsss.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyttsx3/drivers/nsss.py b/pyttsx3/drivers/nsss.py index 8a2427d..1b27ef9 100644 --- a/pyttsx3/drivers/nsss.py +++ b/pyttsx3/drivers/nsss.py @@ -102,7 +102,7 @@ def save_to_file(self, text, filename): import time self._tts.startSpeakingString_toURL_(text, url) - time.sleep(len(text) * 0.01) + time.sleep(max(1, len(text) * 0.01)) def speechSynthesizer_didFinishSpeaking_(self, tts, success): if not self._completed: