[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Синтез речи в Zabbix



25.02.2013 03:00, Admont пишет:
> 23.02.2013 15:24, "Артём Н." пишет:
>> Кто-нибудь прикручивал сабж?
>> Есть ли готовые решения?
>> Искал. Не нашёл.
>> Очень требуется, прежде всего, для создания "вау-эффекта".
> 
> Вроде вcё стандартно - создать action на trigger. В качестве action использовать
> запуск команды для озвучивания необходимой фразы, например в festival, и
> воспроизведения.
Блин, я как-то и не подумал о действиях...
Да, вариант.
Но крайне много минусов.
Первый: передача звука. У меня есть браузер, который есть везде и запущен теми,
кому это надо.
У них ОС windows. Как я буду передавать звук из RHVoice, например, на
windows-машину?
Ставить на каждой дополнительное ПО?
Второй: при добавлении каждого триггера, требуется добавлять его в действие.
Ну да, текст триггера, который я хочу проговаривать, возможно прописать макросом
наверное (с действиями я как-то не особо), так?
Но, всё-равно, надо добавлять...
Третий: он всегда будет говорить, а штатная кнопка/галочка в Zabbix - "Отключить
звук" не будет работать.

Я сегодня копал эту проблемку. По крайней мере, в версии 1.8 всё сделано на JS.
Код для таблицы, которая показывает триггеры, на PHP и реализуется вставкой
embed/bgsound, в зависимости от браузера. Но он не особо интересен.

Гораздо интереснее всплывающее окно.
Там проигрывание реализовано целиком на JS. Просто браузеру передаётся тэг
<audio> (там используется Prototype и видимо сделано через него, т.е. зависит от
браузера).
Т.е., достаточно сделать запрос (используя AJAX) к простенькому php сценарию,
вызывающему синтезатор, параметром которого является текст сообщения.
Синтезатор выводит звук в файл (в идеале - в именованный канал).
Затем, функция вставляет путь к этому файлу в теге <audio>.

Добавляется всё в файле zabbix/js/classes.что-то-там-messages. В методе
playSound. Там, где message.sound = , очевидно вместо оригинального sound:
message.sound = "wav_channel.wav". При этом, файл должен находиться в каталоге
audio (иначе, придётся малость переделать функцию create в main.js).
Текст триггера возможно взять из message (большой объект).
Регулярными выражениями на JS возможно сделать всё, что угодно.
Если кого интересует и у меня будет готовый вариант, могу выкинуть сюда.

Единственное почему у меня не пошло: синтезатор вылетал с ошибкой Segmentation
fault, когда запускался через сервер. При простом запуске php speechsint.php,
всё работало: файл создавался, звук проигрывался.
Видимо, это вызвано тем, что я запускал скомпилированный на Squeeze синтезатор,
на FC 12, которая установлена на сервере. Когда дадут отдельные железные машины,
организую несколько виртуалок и поставлю на виртуалку для мониторинга что-нибудь
нормальное (Debian, например).

Но, может, и сейчас кто прольёт свет: почему синтезатор вылетает, при запуске
через сервер, хотя так запускается?


Reply to: