Есть ли функция «Говорить текст», как в Okular, для программы чтения документов в Gnome?

Я только что заметил, что есть следующее: Функция «Говорить текст» в Okular не работает. Как заставить его работать?

Есть ли у нас решение для Gnome без установки платформы KDE через репозиторий, оснастку или flatpak?

2
задан 6 August 2020 в 14:54

1 ответ

У меня настроен диспетчер речи (еще не идеально - документация в некоторых местах немного тонкая), но spd-say у меня работает. Если команда работает для вас, вы можете попробовать мое решение. Я создал два небольших сценария оболочки в ~ / .local / bin с именами speak-selection и shutup. Независимо от того, какую среду рабочего стола или оконный менеджер я использую, я могу связать их с пользовательскими нажатиями клавиш (alt-super-z и alt-super-x соответственно в моем случае), и я должен получить желаемый эффект. Я сделал это как сценарии на тот случай, если у меня когда-нибудь будет причина изменить способ их работы, а также чтобы я мог реализовать альтернативы на других платформах и не менять свое мышление.

Вот это содержимое ~ / .local / bin / speak-selection:

#! /bin/sh

xclip -o | sed -e 's/^!-!/ !-!/g' -e '$a\' | spd-say -e -w

Страница руководства для xclip сообщает нам, что по умолчанию он читает буфер выбора XA_PRIMARY. Классическое поведение X11 в терминах xterms, когда можно выделить текст «для копирования» и щелкнуть средней кнопкой мыши «для вставки», основано на буфере выбора XA_PRIMARY. Большинство современных DE на самом деле хотят, чтобы вы использовали вместо этого фактический буфер обмена (XA_CLIPBOARD), потому что представление о том, что у вас есть три вещи, которые могут работать как буфер обмена, странно , но мы пользуемся этим.

Команда sed немного очищает содержимое буфера выбора. Для sed есть два выражения (-e), и они:

  1. Если строка начинается с! - !, то, что следует ниже, интерпретируется как команда SSIP (изменить высоту звука, скорость, громкость и т. Д.), И я в принципе никогда не хочу этого с содержимое выделения, поэтому, если оно появляется, я убираю его, добавляя пробел.

  2. Если последняя строка ввода не имеет новой строки, она добавляется. Это необходимо? Я' м не уверен на 100%. Думаю, я добавил это, пытаясь разобраться, почему оборвалась речь, и я не уверен, добавил ли я это до или после того, как понял, что в основном всегда хотел -w, но, похоже, это не повредит.

Наконец, результат передается по конвейеру spd-say -e -w, который произносит stdin и ожидает, пока диспетчер речи не сделает это, прежде чем выйти, что позволяет избежать прерывания речи.

Содержимое ~ / .local / bin / shutup тривиальны:

#! /bin/sh

spd-say -C

Вы никогда не захотите реализовать функцию "начать разговор" без функции "выключения". Спросите любого слепого, кто использовал синтез речи, и он скажет вам, что это важная функция.

1
ответ дан 11 August 2020 в 20:11

Другие вопросы по тегам:

Похожие вопросы: