macostext-to-speechmacos-catalinasirinsspeechsynthesizer

Make the `say` terminal utility and NSSpeechSynthesizer work with Siri voices


macOS Big Sur itself is capable of using a Siri voice for TTS, as evidenced by the fact that you can select one as the system voice in System Preferences > Accessibility > Speech, e.g. in combination with the shortcut-key-based Speak selected text when the key is pressed feature.
(Curiously, though, a Siri voice selected as the system voice does not take effect if you right-click text and select Speech > Start Speaking from the context menu and possibly also not for other accessibility features - this discrepancy is the subject of this MacRumors forum thread.)

Unfortunately, it appears that this functionality isn't exposed through a utility or API.


[1] The bundle IDs of the installed Siri voices can be determined as follows:

ls /System/Library/Speech/Voices/*.SpeechVoice/Contents/Info.plist | grep -i siri | xargs -n 1 /usr/libexec/PlistBuddy -c 'print CFBundleIdentifier'

Note: The above works for me as of macOS Big Sur, upgraded from an earlier version, with at least one Siri voice installed. Siu Ching Pong -Asuka Kenji- reports that on a freshly installed, non-upgraded Big Sur machine the System/Library/Speech/Voices directory is empty.

To find the bundle IDs of all available (downloadable) Siri voices:

/usr/libexec/PlistBuddy -c 'print DownloadableCustomVoices' /System/Library/PrivateFrameworks/SpeechObjects.framework/Resources/SpeechDataDefaults.plist | grep 'VoiceIdentifier' | sed -E 's/.+ = //'

Solution

  • In a WWDC20 talk, Apple says Siri voices are not available in AVSpeechSynthesizer.

    The talk is called "Create a seamless speech experience in your apps." Apparently this applies to Catalina as well.

    Here's the relevant slide:

    WWDC20 Slide

    I started a thread at macrumors regarding similar problems configuring the system voice to speak text.