Mac OS X - быстро меняйте голоса для преобразования текста в речь


10

Мне нравится функция преобразования текста в речь в Mac OS X. Поскольку я не являюсь носителем английского языка, я очень рад всем дополнительным языкам, добавленным с момента выхода Lion. Тем не менее, я использую английский, а также свой родной язык (немецкий). Смена голоса - это немного больно. Это просто требует слишком много шагов, чтобы чувствовать себя комфортно.

Есть ли способ сделать это легко? Я искал ярлыки, возможно выпадающее меню где-то в правом углу, все было бы хорошо.

Поскольку мой поиск не увенчался успехом, я надеюсь найти здесь несколько советов по SuperUser. Большое спасибо!

Роман


Я работаю на Mac и создал Talkie: расширение для преобразования текста в речь с автоматическим определением языка. Это все с открытым исходным кодом, но некоторые функции есть в коммерческом выпуске Talkie Premium. Проще всего использовать в браузере (с сочетаниями клавиш), но вы можете использовать его из любого приложения через буфер обмена (премиум). Может помочь вам! joelpurra.com/projects/talkie
Джоэл Пурра

Ответы:


9

Я использовал 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 также работает, но я не знаю, как применить изменения немедленно.


Вау, большое спасибо за этот очень подробный ответ и за то, что показал мне так много вариантов. Служба Automator прекрасно работает для меня, более того, теперь я знаю об этих службах. Я мог бы также хотеть добавить некоторые другие :)

1
Качественный товар. Начиная с OSX 10.10: чтобы ~/Library/Preferences/com.apple.speech.voice.prefs.plistнемедленно применить изменения , запустите pkill com.apple.speech.speechsynthesisd, после чего система автоматически перезапустит процесс, и в этот момент изменения будут получены.
mklement0

1
На моей OS X 10.10.4 ваш сценарий пользовательского интерфейса работает, только если я вставляю строку «активировать» между строками 1 и 2. В противном случае я получаю сообщение об ошибке: «группа вкладок 1 окна 1 процесса \« Системные настройки \ »« не может читать ... Есть предложения, почему это относится ко мне, а не к другим?
Дженс Вирт,

3

Спасибо большое Лаури.

Я расширил ваш подход сценариев пользовательского интерфейса для правильной работы с немецкими и английскими голосами. Проблема в том, что когда ваш системный язык не английский, все не системные языки скрыты (если в данный момент не выбраны). Вы должны выбрать: показать больше голосов .. сначала, чтобы добраться до желаемого языка. Моему коду не хватает элегантности, но он работает. Вот оно (обновлено):

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"

0

Прямые изменения в ~/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.


-2

Я написал инструмент строки состояния для этого:

https://github.com/Fredmf/polyglott

По-видимому, он все еще работает в Сьерре


1
Не могли бы вы расширить свой ответ, включив пример варианта использования, который решит проблему ОП. Пожалуйста, смотрите meta.superuser.com/questions/5329/…
Burgi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.