Mac OS X - быстро меняйте голоса для преобразования текста в речь
Мне нравится функция преобразования текста в речь в Mac OS X. Поскольку я не являюсь носителем английского языка, я очень рад всем дополнительным языкам, добавленным с момента выхода Lion. Тем не менее, я использую английский, а также свой родной язык (немецкий). Смена голоса - это немного больно. Это просто требует слишком много шагов, чтобы чувствовать себя комфортно.
Есть ли способ сделать это легко? Я искал ярлыки, возможно, выпадающее меню где-то в правом углу, все было бы хорошо.
Поскольку мой поиск не увенчался успехом, я надеюсь найти здесь несколько советов по SuperUser. Большое спасибо!
Роман
4 ответа
Я использовал FastScripts, чтобы назначить ярлык для этого сценария:
try
set old to the clipboard as record
end try
try
tell application "System Events" to keystroke "c" using command down
delay 0.05
say (the clipboard) using "Kyoko"
end try
try
set the clipboard to old
end try
Вы также можете создать сервис в Automator:
В 10.7 и 10.8 есть ошибка, из-за которой ярлыки для служб Automator не всегда работают, пока вы не наведете курсор мыши на меню служб в строке меню. WorkflowServiceRunner также может использовать более 100% ЦП во время разговора текста.
Другой вариант - использовать сценарии пользовательского интерфейса для переключения между двумя голосами:
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
click
delay 0.1
if value is "Alex" then
click menu item "Victoria" of menu 1
else
click menu item "Alex" of menu 1
end if
end tell
end tell
quit application "System Preferences"
Изменение ключа SelectedVoiceID в com.apple.speech.voice.prefs.plist также работает, но я не знаю, как применить изменения немедленно.
Спасибо большое Лаури.
Я расширил ваш подход сценариев пользовательского интерфейса для правильной работы с немецкими и английскими голосами. Проблема в том, что когда ваш системный язык не английский, все не системные языки скрыты (если в данный момент не выбран). Вы должны выбрать: показать больше голосов.. сначала, чтобы добраться до желаемого языка. Моему коду не хватает элегантности, но он работает. Вот оно (обновлено):
tell application "System Preferences"
reveal anchor "TTS" of pane "com.apple.preference.speech"
end tell
set tom to 0
tell application "System Events" to tell process "System Preferences"
tell pop up button 1 of tab group 1 of window 1
click
delay 0.2 -- without this the value was sometimes "Loading Voices…"
if value is "Tom" then
click menu item "Anna" of menu 1
else
click menu item "Mehr Stimmen anzeigen" of menu 1 -- show up all available voice
set tom to 1
end if
end tell
end tell
if tom is 1 then
delay 0.5
tell application "System Events" to tell process "System Preferences"
tell pop up button 1 of tab group 1 of window 1
click
delay 0.2 -- without this the value was sometimes "Loading Voices…"
click menu item "Tom" of menu 1
end tell
end tell
end if
quit application "System Preferences"
Прямые изменения в ~/Library/Preferences/com.apple.speech.voice.prefs.plist
на самом деле не нужны, если вы получаете голоса bash-script, которые действительно добавляют все необходимые функции командной строки.
Apple Script для изменения стандартного голоса на Алекса с помощью Голоса будет выглядеть так:
on run
do shell script "voices -d Alex"
end run
Я предпочитаю терминал, и вместо того, чтобы тестировать вторжение в строку меню полиглота, я сделал этот (по общему признанию простой-глупый) сценарий оболочки (который использует голоса) для моих потребностей в переключении языка. С этим все, что я делаю, чтобы изменить язык по умолчанию, это заскочить в терминал, чтобы набрать speak swedish
или же speak french
, Это отлично вписывается в мой рабочий процесс. Я надеюсь, что вы можете найти решение, которое соответствует вашему.
# Choose a voice in one of some selected languages
# Use "voices" from https://github.com/mklement0/voices#manual-installation
if [[ $1 = "" ]]
then
echo "ERROR. No language specified. Type a language as in 'speak hebrew'"
fi
if [[ $1 = "swedish" || $1 = "Swedish" ]]
then
voices -d Klara
fi
if [[ $1 = "english" || $1 = "English" ]]
then
voices -d Daniel
fi
if [[ $1 = "american" || $1 = "American" ]]
then
voices -d Alex
fi
if [[ $1 = "french" || $1 = "French" ]]
then
voices -d Aurelie
fi
if [[ $1 = "spanish" || $1 = "Spanish" ]]
then
voices -d Jorge
fi
Я сохраняю его в своих скриптах как "speak.command", chmod it +x и добавляю соответствующий псевдоним в мой.bash_profile, чтобы вызвать его, набрав speak
,
Я написал инструмент строки состояния для этого:
https://github.com/Fredmf/polyglott
По-видимому, он все еще работает в Сьерре