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 withOpen 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
orNSSpeechSynthesizer
?
[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/.+ = //'
/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). – Indoaryan/System/Library/PrivateFrameworks/SpeechObjects.framework/Versions/A/Resources/SpeechDataDefaults.plist
. – Indoaryan/System/Library/PrivateFrameworks/SpeechObjects.framework/Resources/SpeechDataDefaults.plist
is the better path to use (/Versions/A
removed). – Hadfield