2

Thanks to this answer, I was able to grant permission to the Terminal and iTerm2 apps to use a Personal Voice with the 'say' command; e.g.

say -v MyVoice "Hello, world!"

The say command has a number of options, including -o output.aiff which writes the spoken text to an AIFF file.

say -v Alex -o test.aiff "Hello world"
afplay test.aiff

However, I can't get it to work for my personal voice:

say -v MyVoice -o test.aiff "Hello world"
afplay test.aiff

produces nothing but a moment of silence.

It seems most likely, judging from the number of loose ends I've hit playing with the Personal Voice feature, that this is a bug, but perhaps I've overlooked something.

1 Answer 1

2

It seems to be yet another Apple restriction rather than a bug. Although it notes in say's man page that not all voices are compatible with all audio configurations, I tried many of the system voices randomly and they can all be written to file. So, it appears it's a restriction/privacy matter that we need to build a tool to overcome. (After all, Apple does state that we should use our personal voice strictly for personal use and might be trying to protect us from having leaked imprints of our voice out there).

You can verify this if you check the console log when trying this with "say" command:

Cannot use AVSpeechSynthesizerBufferCallback with Personal Voices, defaulting to output channel.

I have thought of making a tool since I found out of this limitation. I'll post a github link here when done, it might help.

Edit: I posted the code on github that enables saving PersonalVoice audio files using say command

9
  • We're getting slightly different results. I don't get any message in system.log about being unable to use Personal Voices, and it writes a 4.1K file that plays nothing. I dl'ed your code, built it, and tried to save some personal voice speech, but got the same 4.1K file. (Also, note typo in Makefile, -e should be -o)
    – Chap
    Commented Nov 24, 2023 at 1:09
  • We're getting the same results, I also get a 4.1k emtpy file and it's not system.log, it's the streaming os log. -e is not a typo, it's the extra argument my code adds in order to not conflict with say command's -o argument. You need to use -e for my code to work and the file extension must be .caf, not .aiff or any other. Commented Nov 24, 2023 at 14:48
  • Air$ ./authorize_terminal Killed: 9 Air:$ DYLD_INSERT_LIBRARIES=./mysay.dylib say -v Chap "text to speak" -e path.caf say: invalid option -- e Usage: say [-v voice] [-o out] [-f in | message] (Have already authorized byt wanted to show the kill 9) FWIW I use bash but also tried zsh.
    – Chap
    Commented Nov 24, 2023 at 19:26
  • This means that the DYLD_INSERT_LIBRARIES isn’t inserting the library into the process and the authorize_terminal executable isn’t allowed to run either. This may happen if system security is set to full rather than reduced or if you haven’t enabled the arm64 ABI for Silicon Macs. I must have wrongly assumed that arm64 was enabled on your machine. What is the output if you type "arch" in terminal and press enter? Commented Nov 24, 2023 at 21:42
  • In any case, I have added x86_64 architecture to the project, so consider re-building it from github. Also, before trying to save to file, make sure that say -v YourPersonalVoice "some text" (without any options) does output audio to speakers. If not, try restarting your machine, I have noticed that PersonalVoice randomly stops working system-wide and needs a restart to fix this. Commented Nov 24, 2023 at 22:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .