Как стать автором
Обновить

Комментарии 43

Ииииии.....?
Уж не Ваш ПК ли это сказал?
Считается, что компьютер никогда не сможет говорить как человек.
Но сможете ли вы так:

cd /usr/local/src/kernel-2.6.33.1
configure | festival
Считается, что компьютер никогда не сможет говорить как человек
Кем считается? Британскими учёными? Почему не сможет?
НЛО прилетело и опубликовало эту надпись здесь
Дорого друг, вы не хуже меня знаете: что пока жив Чак Норис, никакого Скайнета не будет.
Вроде в Win7 есть функции воспреизведение голосом печатного текста.
В WinXP она тоже была, только вроде надо было что то скачать — доустановить, кажется движок сам.
Пуск->Панель управления->Звук, речь и аудиоустройства->Речь (Start->Control Panel-> Sound, Speech and Audio Devices->Speech).
Вполне может быть, просто я никогда этим особо не занимался а в 7-ке случайно заметил, когда режим Бога наcтраивал =)
НЛО прилетело и опубликовало эту надпись здесь
О, первое апреля как раз близко, возьму на заметку :)
Пошутить здорово можно! )) Как то я был на работе, а девушка дома, я логинюсь с работы по ssh на сервак домой (белый IP), и начинаю беседывать с ней запуская синтезатор и передавая ему нужные фразы :D, она звонит мне в панике, говорит «твой компьютер со мной разговаривает!!!» )))
а как же классический прикол с выдвиганием сидюка по среди ночи/просмотра ужастика?
теперь можно дополнить фразой «дайте покушать/заплати за интернет не вставая со стула!» :)
tts можно заменить подготовленными записями, типа play 20-hours.mp3 15-minutes.mp3
у меня так сервер оповещает о землятресениях =)
Респект =)

Для того чтобы не было задержек, можно сначала сохранять вывод festival в файл (wav или mp3), и только когда он будет готов, ставить плеер на паузу и проигрывать временный файл. После этого файл можно даже удалить =)
Вроде как-то в режиме сервера можно запустить festival.
У кого-нибудь получилось? И как качество звука?
У меня проблема возникла при установке festival на ubuntu

[root@ubuntu:/home/vitaliy]
# echo «Привет» | festival --tts --language russian 20:11:45
«Unsupported language, using English»
SIOD ERROR: unbound variable: voice_rab_diphone
festival: fatal error exiting.
Чтобы оно вообще заговорило (хотя бы и на английском) надо было в самой программе (в терминале запускаем festival) набрать, вместе со скобками:
(SayText «What is thy bidding, my master?»)

Русский словарь у меня по дефолту отсутствовал, пришлось добавить festvox-ru. Других вариантов русского не увидел.

Дальше в самой программе было проще:

festival> (voice.list)показывает список установленных в системе голосов
(rab_diphone kal_diphone msu_ru_nsh_clunits)
festival> (voice_msu_ru_nsh_clunits)выставляет нужный нам голос
msu_ru_nsh_clunits#<Utterance 0x7f22224ec030>
festival> (SayText «Я ЛЮБЛЮ ХАБРАХАБР»)произносит желанную фразу
#<Utterance 0x7f2222560610>

Почему-то не распознались маленькие буквы, пришлось использовать только заглавные.

Все вышеописанное работало на версии 1.96 beta.
А, ну и кавычки, понятное дело, нужны обычные, а не фигуристые как парсер повтыкал.
Спасибо, таким способом работает. А способом из статьи — ошибки как у betal.
Обошел проблему так:
echo "(voice_msu_ru_nsh_clunits) (SayText \«Привет, Хабрахабр!\»)" | festival

P.S. а у меня строчные буквы работают…
В Убунту есть же встроенная возможность отображать температуру за окном рядом с часами + при наведении мышки на градусы показываются дополнительные сообщения о погоде: ветер, осадки и т.п., и эти сообщения на русском языке.



Может, кто-нибудь подскажет, как взять погоду оттуда, а не с сайта?
vitali@vitali-desktop:~/.bin$ /home/vitali/.bin/get_cur_tmpr.sh | /home/vitali/.bin/sayit.sh
/home/vitali/.bin/sayit.sh: строка 3: ошибка синтаксиса около неожиданной лексемы `newline'
/home/vitali/.bin/sayit.sh: строка 3: `read str <&'


Делал всё как по инструкции…
В чём может быть проблема?
3-я строка, может он ругается на /usr/bin/mocp -P, это пауза плееру moc, если у вас он не установлен тогда ругнется конечно, попробуйте скрипты запусать без пайпа "|", проче будет понять где ошибка.
Поставил пакет moc, проблема не исчезла, ошибка таже…

vitali@vitali-desktop:~/.bin$ /home/vitali/.bin/get_cur_tmpr | /home/vitali/.bin/sayit
/home/vitali/.bin/sayit: строка 3: ошибка синтаксиса около неожиданной лексемы `newline'
/home/vitali/.bin/sayit: строка 3: `read str <&'
vitali@vitali-desktop:~/.bin$ /home/vitali/.bin/get_cur_tmpr
-9
#!/bin/bash
# читаем фразу из стандартного ввода
read str
#запускаем синтезатор
echo "(voice_msu_ru_nsh_clunits) (SayText \"$str\")" | festival
Теперь всё работает… однако по какой то причине программа говорит просто «Девять» вместо положенных «Минус девять»

и скрипт gmail тоже почему то не пашет.

vitali@vitali-desktop:~/.bin$ /home/vitali/.bin/gmail | /home/vitali/.bin/sayit

FATAL_ERROR: The server is not running

Invalid card number.
Usage: amixer <options> [command]

Available options:
  -h,--help       this help
  -c,--card N     select the card
  -D,--device N   select the device, default 'default'
  -d,--debug      debug mode
  -n,--nocheck    do not perform range checking
  -v,--version    print version of this program
  -q,--quiet      be quiet
  -i,--inactive   show also inactive controls
  -a,--abstract L select abstraction level (none or basic)
  -s,--stdin      Read and execute commands from stdin sequentially

Available commands:
  scontrols       show all mixer simple controls
  scontents	  show contents of all mixer simple controls (default command)
  sset sID P      set contents for one mixer simple control
  sget sID        get contents for one mixer simple control
  controls        show all controls for given card
  contents        show contents of all controls for given card
  cset cID P      set control contents for one control
  cget cID        get control contents for one control
Invalid card number.
Usage: amixer <options> [command]

Available options:
  -h,--help       this help
  -c,--card N     select the card
  -D,--device N   select the device, default 'default'
  -d,--debug      debug mode
  -n,--nocheck    do not perform range checking
  -v,--version    print version of this program
  -q,--quiet      be quiet
  -i,--inactive   show also inactive controls
  -a,--abstract L select abstraction level (none or basic)
  -s,--stdin      Read and execute commands from stdin sequentially

Available commands:
  scontrols       show all mixer simple controls
  scontents	  show contents of all mixer simple controls (default command)
  sset sID P      set contents for one mixer simple control
  sget sID        get contents for one mixer simple control
  controls        show all controls for given card
  contents        show contents of all controls for given card
  cset cID P      set control contents for one control
  cget cID        get control contents for one control

FATAL_ERROR: The server is not running
И это «Девять» повторяет 2 раза…
vitali@vitali-desktop:~/.bin$ /home/vitali/.bin/get_cur_tmpr
-9


Если скрипт возвращает "-9", то читаться будет «девять»
По-идее, скрипт должен возвращать «минус девять», но это, как видно, не так. Значит проблема со скиптом возвращения температуры.

Кстати, в нём у автора явная ошибка:
stringZ=`cat /home/eugene/.tmp/index.html

вместо
stringZ=`cat /home/eugene/.tmp/index.html`
с минусом проблему решил заменив

tmpr="-"

на

tmpr=«минус „

Проблема с озвучиванием температуру дважды, исключительно мой косяк и уже исправлен.

Вообщем спасибо за помощь.

Однако проблема с gmail всё ещё осталась :(
gmail у меня работал.
Предполагаю, что ты где то накосячил
Подскажите, версию Ubuntu Server какую используете?
9.10
А кто-нибудь нашёл женский английский голос как в фильмах?
Такс… а я где-то видел руководство, как научить udev сообщать голосом о подключённых устройствах
Проверить сейчас возможности нет, но подозреваю, что правило, которое надо положить в /etc/udev/rules.d/, будет выглядеть примерно так:
ACTION!="add", GOTO="festival_say_end"
RUN+="echo $name | festival --tts --language russian"
LABEL="festival_say_end"
Практика показала, что с потоками у udev какая-то фигня, поэтому лучше так:
RUN+="/home/torkvemada/sayit.sh Подключен $name"

И соответственно шелл-скрипт:
#!/bin/bash
echo "$@" | festival --tts --language russian

Но в идеале надо добавить еще обработчики по типам, иначе даже на обычную флэшку произносит по пять сообщений — «Подключен sg1», «Подключен sdb1»…
вот так получилось (Ubuntu 9.10):
добавляем в файл /etc/udev/rules.d/70-mount-usb-storage.rules следующие строчки

# Добавление
ACTION==«add», KERNEL==«sd[a-z][0-9]», ENV{ID_USB_DRIVER}==«usb-storage», RUN+=«echo 'обнаруженъъ носитель информации' | festival --tts --language russian»

# Удаление
ACTION==«remove», KERNEL==«sd[a-z][0-9]», ENV{ID_USB_DRIVER}==«usb-storage», RUN+=«echo 'устройство удалено' | festival --tts --language russian»
Заставил говорить скайп.

Создал скрипт следующего содержания:
#!/bin/bash
echo "(voice_msu_ru_nsh_clunits) (SayText \"$1\")" | festival


В настройках уведомления вбиваем ~/say.sh "%smessage"
Берём девушку с красивым лицом торсом голосом, записываем 73 фразы и юзаем их.
Минусы:
— при склейках цифр могут быть нестыковки
— надо продумать список того что надо записать
Плюсы:
— красивый голос
— общение с девушкой
Отличная статья. Собираюсь все себе такое же реализовать да руки не доходят.
Еще круче было бы приглушать музыку, чтобы она играла тихо, и на ее фоне зачитывать объявления. Но для этого видимо надо будет похитрому настраивать звуковую систему, чтобы могла получать сигнал из двух источников, наверно это можно сделать через pulseaudio.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации