35
  • 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).

      • Update: As ccpizza's answer points out, if a Siri voice happens to be the system voice (i.e. the default voice), say can use it, implicitly, namely without -v, starting with macOS Ventura ; the answer also has updated-for-Ventura instructions for how to change the system voice interactively.

    • 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/.+ = //'
mklement0
  • 382,024
  • 64
  • 607
  • 775
  • 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- Aug 06 '21 at 16:47
  • 1
    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- Aug 06 '21 at 17:27
  • That is curious, @SiuChingPong-AsukaKenji-: For me, the original command still works, as of macOS Big Sur 11.5.1 – mklement0 Aug 06 '21 at 18:50
  • 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- Aug 06 '21 at 19:21
  • 1
    @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 Aug 06 '21 at 20:29
  • 1
    On my M1 MacBook Pro with Big Sur (never upgraded), the expected system voice are presents in /System/Library/Speech/Voices but "say -v" does not work as noted above. By "expected" I mean those available to me in the Accessibility Sys Pref pane (including AronSiri, Alison, Ava, NoraSiri, Samantha, and Tom). – Jonathan Dagle Oct 17 '21 at 02:21
  • 2
    Added for completeness: I can get high quality Tom or other on-Siri voices to work in Terminal when they are selected as "System Voice" in Accessibility. – Jonathan Dagle Oct 17 '21 at 02:28

3 Answers3

10

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.

mklement0
  • 382,024
  • 64
  • 607
  • 775
Jonathan Dagle
  • 116
  • 1
  • 4
  • 1
    Thanks, Jonathan - that seems to be the answer as of macOS Catalina (10.15). However, it sounds like there is hope this may eventually be implemented in a future version, which would be [macOS Big Sur (11.0)](https://en.wikipedia.org/wiki/MacOS_Big_Sur) at the earliest. – mklement0 Jul 01 '20 at 15:56
  • I wonder whether anyone has experience with Siri voices in macOS Monterey? As of macOS 11.6, Siri voices are still not available. – Jonathan Dagle Oct 17 '21 at 02:40
4

As stated in the original question, explicitly selecting a siri voice with say -v <some-siri-voice> does not work, yet what does seem to work (verified on Ventura, 13.0.1) is selecting a Siri voice as the system default under System settings... ⇾ AccessibilitySpoken ContentSystem voiceManage voices... ⇾ [select a downloaded siri voice] ⇾ click Ok, and then use e.g. say nobody expects the spanish inquisition (without -v).

❗️ This behaviour does not seem to be available on versions prior to Ventura, e.g. on Monterey (12.0.1) and earlier, say will not use a siri voice if it's set as system default.

ccpizza
  • 28,968
  • 18
  • 162
  • 169
  • @mklement0: you are right, updated the config steps; the op implied that siri voices do not 'work' with `say` while in practice it does not work when selecting those voices explicitly with `-v name` yet it does work using the _System voice_ workaround, which is of course not perfect. – ccpizza Apr 28 '23 at 14:44
  • 1
    @mklement0: checked on a monterey system, and found that `say` won't use a siri voice if it's set as system default and falls back to a lower quality ootb voice; answer updated – ccpizza Apr 30 '23 at 10:35
-6

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

Lester Lo
  • 179
  • 1
  • 2
  • 4
    Thanks, but that is already mentioned in the question (the paragraph that starts with "The OS itself ..."). What I'm looking for are _programmatic_ ways of using Siri voices. – mklement0 Jun 16 '20 at 16:22