24
votes
  • The say command-line utility seems to be unaware of Siri voices as of macOS 11 (Big Sur):

    • say -v '?' doesn't list Siri voices.

    • Targeting a Siri voice explicitly doesn't work:

      • say -v NoraSiri hi! doesn't find the Nora Siri voice (which is the default Siri voice).
    • Using a bundle ID (e.g., com.apple.speech.synthesis.voice.custom.siri.nora.premium)[1] doesn't complain about an unknown voice, but speech output fails with Open speech channel failed: -86:

      • say -v com.apple.speech.synthesis.voice.custom.siri.nora.premium hi!

      • Seemingly, any string with prefix com.apple.speech.synthesis.voice.custom triggers this error.

  • Similarly, NSSpeechSynthesizer doesn't list Siri voices as available and doesn't support selecting one for speech output.

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.

  • Is there any way to use Siri voices with say or NSSpeechSynthesizer?

[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/.+ = //'
2
I am testing your command for listing bundle IDs. It does not work on my machine (macOS Big Sur Version 11.4). The directory /System/Library/Speech/Voices/ is empty. It seems that the files are moved to /System/Library/SpeechBase/Voices/. However, the files for Siri are not found there (grep does not match anything). - Siu Ching Pong -Asuka Kenji-
On my machine (macOS Big Sur Version 11.4), the voice identifiers for Siri could be found inside the file /System/Library/PrivateFrameworks/SpeechObjects.framework/Versions/A/Resources/SpeechDataDefaults.plist. - Siu Ching Pong -Asuka Kenji-
That is curious, @SiuChingPong-AsukaKenji-: For me, the original command still works, as of macOS Big Sur 11.5.1 - mklement0
Perhaps it is because mine is a clean install of macOS Big Sur. When I installed Big Sur, I wiped out all the things on my Mac. The fact that your command still works on your machine may be due to upgrading from a previous version of macOS. Those files are carried from the old one. By the way, I am curious whether my locations work on your machine too. 😉 - Siu Ching Pong -Asuka Kenji-
@SiuChingPong-AsukaKenji-: indeed, my machine is upgraded, but please note that your file - also present in earlier versions - is just a catalog of metadata about downloadable voices, whereas my command lists only the installed Siri voices. I've added a command to extract the bundle IDs of all downloadable Siri voices too. (As an aside: /System/Library/PrivateFrameworks/SpeechObjects.framework/Resources/SpeechDataDefaults.plist is the better path to use (/Versions/A removed). - mklement0

2 Answers

9
votes

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.

-3
votes

Using the keyboard shortcut can activate the new Siri voice (noraSiri)