更改默认的语音转语音

|
Tell application \"System Preferences\" 
    set \"default voice\" to \"Agnes\" 
end tell 
结果是:   无法将“默认语音”设置为“安娜”。   不允许访问。     
已邀请:
        您的方法有两个问题:
System Preferences
应用程序的词典不包含
default voice
元素或任何其他用于更改TTS(文本到语音)默认语音的版本(自OS X 10.11起);实际上,苹果似乎没有提供编程方式来更改默认语音(甚至没有通过其“ 3”级可可类)。 通过双引号
default voice
,您正在尝试将值分配给字符串文字,这将始终失败。 注意:此答案的早期版本指向Dropbox位置中名为named5ѭ的Bash脚本。此脚本此后已重命名为
voices
,对其语法进行了修改,现在可以作为开源项目正确发布-参见下文。 不幸的是,从OSX 10.11(El Capitan)开始,没有记录的编程方法可以更改默认语音。 可以完成此操作,但是这样做需要使用未记录的系统内部文件,因此不能保证将来的兼容性。
voices
是我编写的一个CLI,它就是这样做的-已验证可以在OSX 10.11到OSX 10.8上运行。 然后,您可以从AppleScript中执行以下操作:
do shell script \"/path/to/voices -d {voiceName}\"
例如,如果您将“ 6”放置在“ 10”中并想切换为“ 11”作为默认声音,请使用:
do shell script \"/usr/local/bin/voices -d Agnes\"
如果您恰好安装了Node.js,则可以使用以下命令安装
voices
/usr/local/bin
npm install voices -g
否则,请按照此处的说明进行操作。     
        似乎立即应用对16的更改。
d=com.apple.speech.voice.prefs
if [[ $(defaults read $d SelectedVoiceName) = Kathy ]]; then
  defaults write $d SelectedVoiceCreator -int 1835364215
  defaults write $d SelectedVoiceID -int 201
  defaults write $d SelectedVoiceName Alex  
else
  defaults write $d SelectedVoiceCreator -int 1836346163
  defaults write $d SelectedVoiceID -int 2
  defaults write $d SelectedVoiceName Kathy
fi
使用UI脚本的另一种选择:
tell application \"System Preferences\"
    reveal anchor \"TTS\" of pane \"com.apple.preference.speech\"
end tell
tell application \"System Events\" to tell process \"System Preferences\"
    tell pop up button 1 of tab group 1 of window 1
        delay 0.1
        click
        if value is \"Alex\" then
            click menu item \"Kathy\" of menu 1
        else
            click menu item \"Alex\" of menu 1
        end if
    end tell
end tell
quit application \"System Preferences\"
没有延迟,如果之前未打开“系统偏好设置”,则该值为“ 19”。     
        要使其与优胜美地一起使用,您需要在以下mklement0提供的脚本的底部添加以下两行: 从mklement0到文件的原始链接:https://dl.dropboxusercontent.com/u/10047483/voice 添加以下两行以重新启动SpeechSynthesisServer,否则您将无法使用快捷键立即访问新的默认语音:
killall SpeechSynthesisServer
open /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesisServer.app
    
        这正在工作:
property currentVoice : \"Vicki\"

set systemVoices to {\"Agnes\", \"Albert\", \"Alex\", \"BadNews\", \"Bahh\", \"Bells\", \"Boing\", \"Bruce\", ¬
 \"Bubbles\", \"Cellos\", \"Deranged\", \"Fred\", \"GoodNews\", \"Hysterical\", \"Junior\", \"Kathy\", ¬
 \"Organ\", \"Princess\", \"Ralph\", \"Trinoids\", \"Vicki\", \"Victoria\", \"Whisper\", \"Zarvox\"}

    repeat

     activate me

     set theResult to display dialog \"Say What?\" default answer ¬

      \"\" buttons {\"Quit\", \"Speak\", \"Change Voice\"} ¬

      default button \"Speak\" cancel button \"Quit\"


if button returned of theResult is \"Quit\" then exit repeat

 else if button returned of theResult is \"Change Voice\" then

  set currentVoice to item 1 of ¬

(choose from list systemVoices with prompt \"Choose new voice.\")

 end if

 if text returned of theResult is not \"\" then

  say text returned of theResult using currentVoice volume 1

 end if

end repeat
    

要回复问题请先登录注册