Asterisk™: будущее телефонии Второе издание
Шрифт:
Случайный выбор музыки во время ожидания
В традиционной офисной АТС музыка во время ожидания поступает из одного источника. В один момент времени все слышат одну и ту же музыку, и даже если никого нет в режиме ожидания, музыка все равно воспроизводится. В Asterisk музыка не воспроизводится, если в ней нет необходимости, и каждому вызывающему абоненту предоставляется собственный источник музыки. Если бы Asterisk просто начинала воспроизводить композиции в том порядке, в каком их находит, для каждого вызова, переведенного в режим ожидания, всегда проигрывалась бы одна и та же мелодия с начала. Чтобы смоделировать традиционное поведение при задержке вызова, Asterisk может (и
всемирным успехом радости людей от прослушивания одних и тех же трех мелодий при ожидании ответа на звонок. Поэтому мы написали этот раздел.
Заключение
Данная глава могла бы стать книгой (и, возможно, однажды так и произойдет). Мы выбрали для рассмотрения несколько тем, которые, на наш взгляд, представляют ценность для большинства читателей, но, несомненно, тем для обсуждения намного больше. Как и многие вопросы в данной книге, они были затронуты лишь в самых общих чертах.
14
Попурри
На 90% задачи уходит 90% времени, а на оставшиеся 10% уходит еще 90% времени.
– Правило девяносто к десяти
Самым сложным при создании данной книги было выбрать не то, о чем писать, а то, о чем не будет возможности рассказать. Теперь, когда базовые вопросы рассмотрены, вы готовы к тому, чтобы услышать правду: мы вовсе не научили вас всему тому, что необходимо знать об Asterisk.
Теперь, пожалуйста, поймите, что это не потому, что мы не хотели дать все самое лучшее, а лишь из-за того, что Asterisk безгранична (во всяком случае, нам так кажется).
В данной главе мы хотим дать вам почувствовать вкус некоторых диковинок, которые Asterisk приберегла для вас. Практически каждый раздел этой главы мог бы стать отдельной книгой (и они станут книгами, если Asterisk добьется того успеха, который мы ей предвещаем).
Festival
Festival - популярный механизм речевого воспроизведения текста с открытым исходным кодом. Основная идея использования Festival с Asterisk заключается в том, что диалплан может передавать тело текста в Festival, который будет «читать» этот текст вызывающему абоненту. Вероятно, самое очевидное применение Festival - чтение электронной почты вслух, когда вы в дороге1.
Настройка и подготовка Festival к работе с Asterisk
В настоящее время существует два способа использования Festival с Asterisk. Первый (самый простой) метод, без доработки и повторной компиляции Festival, - загрузить в конфигурационный файл Festival следующий текст (festival.scm обычно располагается в папке /etc/ или /usr/share/festival/):
(define (tts_textasterisk string mode) "(tts_textasterisk STRING MODE)
Apply tts to STRING. This function is specifically designed for use in server mode so a single function call may synthesize the string. This function name may be added to the server safe functions." [130]
130
Применяем tts к STRING. Эта функция специально разработана для использования в режиме сервера, чтобы можно было синтезировать строку одним вызовом функции. Это имя функции
– Примеч. перев.
(let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string))))) (utt.wave.resample wholeutt 8000) (utt.wave.rescale wholeutt 5) (utt.send.wave.client wholeutt)))
Этот текст можно поместить в любом месте файла, но только так, чтобы он не попал в другие круглые скобки.
Второй (и более традиционный) способ - скомпилировать Festival со специальным патчем для Asterisk (располагающимся в подпапке contrib/ папки исходного кода Asterisk).
Информация по обоим методам имеется в файле README.festival, который находится в подпапке contrib/ папки исходного кода Asterisk. Для любого метода вам придется изменить список доступа Festival в файле festival.scm. Просто выполните поиск по слову localhost и замените его полным доменным именем своего сервера.
Оба метода настраивают Festival так, чтобы он мог правильно взаимодействовать с Asterisk. Настроив Festival, необходимо запустить сервер Festival. После этого можно вызывать приложение Festival из диалплана.
Конфигурация Asterisk для работы с Festival
Конфигурационный файл Asterisk, обеспечивающий настройки для работы с Festival, называется festival.conf, что вполне логично. В этом файле задаются имя хоста и порт используемого сервера Festival, а также некоторые настройки для кэширвания речи, генерируемой Festival. Для большинства установок (если вы собираетесь запускать Festival на своем сервере Asterisk) прекрасно подходят настройки по умолчанию.
Запуск сервера Festival
Чтобы запустить сервер Festival для отладки, просто выполните команду festival с аргументом --server: [root@asterisk ~]# festival --server Убедившись в том, что сервер Festival работает и не отклоняет ваших соединений, можно запустить Festival, введя следующее: [root@asterisk ~]# festival_server 2>&1 >/dev/null &
Вызов Festival из диалплана
Теперь, когда Festival сконфигурирован и сервер Festival запущен, организуем его вызов в простом диалплане:
exten => 123,1,Answer
exten => 123,2,Festival(Asterisk and Festival are working together)
Перед вызовом Festival всегда должно быть вызвано приложение Answer, чтобы гарантировать установление соединения по каналу.
Когда Asterisk соединяется с Festival, на терминале, с которого был запущен сервер Festival, должен появиться такой вывод:
[root@asterisk ~]# festival --server
server Sun May 1 18:38:51 2005 : Festival server started on port 1314 |
client(1) Sun May 1 18:39:20 2005 : accepted from asterisk.localdomain |
client(1) Sun May 1 18:39:21 2005 : disconnected |
Еще один способ использования Festival с Asterisk
Некоторые участники сообщества разработчиков Asterisk сообщают о том, что им удалось передать текст в утилиту Festival text2wave и воспроизвести в Asterisk результирующий WAV-файл. Например, это можно сделать так:
exten => 124,1,Answer
exten => 124,2,System(echo "Это проверка Festival" | /usr/bin/text2wave -scale 1.5 -F 8000 -o /tmp/festival.wav) exten => 124,3,Playback(/tmp/festival) exten => 124,4,System(rm /tmp/festival.wav) exten => 124,5,Hangup