По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Друзья, сегодня речь пойдет о синтезе речи в Asterisk. Этот простой способ позволит вам озвучивать требуемое голосовое сообщение в структурах IVR или обычных приветствиях. Да где угодно. Профит этого решения: Единый голос для всех аудио – файлов; Кэширование и сохранение озвученных текстов, фраз в виде медиа - файлов, для последующего использования на Asterisk; Получаем токен Приступим. Прежде всего нужно получить API - токен на использование сервиса от Яндекс. Этот процесс расписан в статье по ссылке ниже (раздел Получение API - токена Yandex.SpeechKit): Получение токена Возвращайтесь с токеном и будем приступать к коду :) Кодим! Для начала создадим директорию /var/lib/asterisk/tts/ и дадим права. Там мы будем хранить текстовый файл, благодаря которому, сможем идентифицировать аудио – файлы по совпадению MD5 названия. Внутри файла будет фраза: mkdir /var/lib/asterisk/tts/ chown asterisk:asterisk /var/lib/asterisk/tts/ chmod 775 /var/lib/asterisk/tts/ В зависимости от дистрибутива и вариантов установки IP – АТС Asterisk, звуковые файлы могут располагаться в другой директории. Вы можете самостоятельно поправить это в скрипте. Использовать будем AGI приложение. Традиционно, комментарии к коду прикладываются: #!/usr/bin/php -q <?php error_reporting(0); // выключаем ошибки, необязательно, нужно в процесcе дебага скрипта require('phpagi.php'); $agi = new AGI(); $str = $agi->request['agi_arg_1']; //записываем в переменную текст, который необходимо озвучить $str = iconv('cp1251', 'utf-8', $str); // конвертируем в кириллическую кодировку $md5 = md5($str); //вычисляем md5 - хэш от переменной $str $prefix = '/var/lib/asterisk/sounds/ru/custom/'; //устанавливаем директорию для файлов. Мы ее создавали по ходу движения $filename = $prefix.$md5; //устанавливаем название файла(оно будет равно md5 текста) $format = 'wav'; //устанавливаем формат получаемого файла от Яндекс $quality = 'hi'; //устанавливаем качество $speaker = 'oksana'; //выбираем голос. На момент написания статьи доступны женские голоса: jane, oksana, alyss и omazh и мужские голоса: zahar и ermil. $emotion = 'evil'; // выбираем интонацию голоса, good — радостный, доброжелательный, evil — раздраженный, neutral — нейтральный (используется по умолчанию). Будем злее :) $speed = '0.9'; // данный параметр отвечает за скорость (темп) речи, подбирается опытным путем на слух, в данном случае оптимальный $key = 'Ваш_токен'; //ваш токен, который вы получили ранее. if (!file_exists($filename.'.wav')) { $qs = http_build_query(array("format" => $format,"quality" => $quality,"lang" => "ru-RU","speaker" => $speaker,"speed" => $speed,"key" => $key,"emotion" => $emotion, "text" => $str)); //формируем строку запроса $ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: "))); $soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); //запрашиваем файл $file = fopen("file1.wav", "w"); //открываем файл для записи fwrite($file, $soundfile); // пишем в файл данные fclose($file); //закрываем файл shell_exec('sox -t raw -r 48k -e signed-integer -b 16 -c 1 file1.wav -t wav -r 8k -c 1 '.$filename.'.wav'); //конвертируем файл под требования Asterisk и закидываем в директорию для аудио shell_exec('chown asterisk:asterisk '.$filename.'.wav'); shell_exec('chmod 775 '.$filename.'.wav'); // даем файлу нужные пермишны; shell_exec('rm -f file1.wav'); // удаляем файл, который создали в процессе обращения к API; shell_exec('echo '.$str.' > /var/lib/asterisk/tts/'.$md5.'.txt'); // добавляем магии ;-) о ней ниже в тексте статьи. } $agi->exec('Playback',"custom/$md5"); //проигрываем файл звонящему. Скачать скрипт синтеза речи После загрузки файла, сохраните его с расширением .php Сохраняем скрипт как texttospeech.php и закидываем его в директорию /var/lib/asterisk/agi-bin. После, даем последовательность следующих команд: dos2unix /var/lib/asterisk/agi-bin/texttospeech.php chown asterisk:asterisk /var/lib/asterisk/agi-bin/texttospeech.php chmod 775 /var/lib/asterisk/agi-bin/texttospeech.php Как вы могли заметить, скрипт настраивается. Голос, интонация, скорость речи, качество получаемого файла – подлежат корректировке для вашей задачи. Схема работы всего процесса следующая: Скрипт получает из диалплана текст по AGI и сохраняет в переменной; Если у нас уже существует аудио – файл для заранее записанной фразы, мы отдаем в диалплан команду на воспроизведение. Если нет – обращаемся к API; Скрипт отправляет запрос в сторону API Яндекса; Происходит конвертация полученного аудио – файла в нужный формат; Даем права файлу для воспроизведения на Asterisk и удаляем временный файл; Делаем отметку о создании файла в служебный текстовый файл; Воспроизводим файл; А как заставить скрипт работать? Очень просто. Открываем файл /etc/asterisk/extensions_custom.conf для редактирования и добавляем в него следующую запись: [text_to_speech] exten => s,1,Answer() exten => s,2,AGI(texttospeech.php,"Привет! Это Мерион Нетворкс. Если ты слышишь это сообщение, значит все сделал правильно!") Сохраняем изменения и прыгаем в FreePBX. Будем вызывать кастомный контекста из FreePBX. Для этого воспользуемся модулем Custom Destinations. Переходим по пути Admin → Custom Destinations и нажимаем Add Destination: Настроили и сохранили. Наша задумка такова – человек звонит на наш номер, набирает 13 и попадает на синтезированное сообщение. Переходим в главный IVR и в секции IVR Entries добавляем следующее: Звоним, проверяем. Работает :) Если хотите заменить фразу, которую нужно озвучить, просто поправьте ее в файле /etc/asterisk/extensions_custom.conf.
img
CentOS Web Panel (CWP) поможет легко установить стек LAMP или LEMP. Это бесплатное решение и работает на CentOS. Если вы ищете место для размещения CMS вроде WordPress, Joomla и т.д., или PHP-приложения, где вам нужен веб-сервер, база данных, электронные письма, мониторинг и безопасность, то у вас есть два варианта. Вы приобретаете виртуальную машину у одног из публичных облачных провайдеров и устанавливаете каждое программное обеспечение вручную. Это может занять много времени, и вам нужны навыки системного администрирования. Или же выбираете способ попроще - вы получаете облачную виртуальную машину и устанавливаете CWP. Затем вы устанавливаете необходимое программное обеспечение через графический интерфейс пользователя. Это займет гораздо меньше времени, чем делать это вручную. CWP позволяет установить более 50 программ/компонентов, самые популярные из которых указаны ниже. Веб-стек - Apache, Nginx, Varnish Стек приложений - PHP-FPM, MySQL, PostgreSQL, phpMyAdmin Безопасность - сертификаты TLS, брандмауэр CSF, Mod Security с правилами OWASP DNS и электронная почта - DNS-сервер, почтовые ящики, AntiSpam, Postfix Мониторинг - метрики сервера, такие как CPU, файловая система, память Диспетчер файлов Crontab В целом она выглядит многообещающим для размещения приложений на основе PHP. Давайте установим CWP и посмотрим, как он выглядит. Установка CWP на CentOS Следующая демонстрация выполняется на виртуальной машине Kamatera. Войдите на сервер CentOS 7.x с учетной записью root-а или учетной записью с привилегией sudo Выполните следующую команду для обновления YUM и установки CWP yum -y install wget yum -y update wget http://centos-webpanel.com/cwp-el7-latest sh cwp-el7-latest Установка займет несколько минут. После окончания вы должны получить соответствующее уведомление. ############################# # CWP Installed # ############################# Go to CentOS WebPanel Admin GUI at http://SERVER_IP:2030/ http://167.71.1x1.xx:2030 SSL: https://167.71.1x1.xx:2031 Для вступления изменений в силу потребуется перезагрузка, которую можно выполнить командой: shutdown -r now К веб-панели CWP можно подключиться по 2030 (HTTP) и 2031 (HTTPS) портам. При первом входе в качестве имени пользователя можно использовать root и его пароль, и после входа в систему вы должны увидеть что-то подобное. Интерфейс выглядит аккуратным и чистым. В левой части навигации можно найти все параметры, необходимые для установки, настройки и управления программным обеспечением и сервером.
img
Как только пакет переносится через шину на исходящую линейную карту или указатель на буфере пакетов перемещается из входной очереди в выходную очередь, сетевому устройству все еще остается работать. Рисунок ниже иллюстрирует это. Обратите внимание на кольцо, показанное на рисунке, это кольцо передачи, а не кольцо приема. На рисунке есть четыре шага: Шаг 1. Пакет передается на передающую сторону маршрутизатора для переадресации. Здесь может потребоваться обработка после переключения, в зависимости от платформы и конкретных функций; они не показаны на этом рисунке. Сначала будет предпринята попытка поместить пакет непосредственно на кольцо передачи, где он может быть передан. Если кольцо уже имеет пакет на нем, или если кольцо заполнено (в зависимости от реализации), пакет не будет помещен на кольцо передачи. Если пакет помещен на кольцо передачи, Шаг 2 пропускается (что означает, что пакет не будет обработан с использованием каких-либо правил Quality of Service [QoS]). В противном случае пакет помещается в очередь вывода, где он будет ожидать передачи в кольцо передачи. Шаг 2. Если пакет не может быть помещен на кольцо передачи, он будет помещен в очередь вывода для хранения в течение некоторого времени. Шаг 3. Код передачи периодически перемещает пакеты из очереди вывода в кольцо передачи. Порядок, в котором пакеты берутся из очереди вывода, будет зависеть от конфигурации QoS; Шаг 4. В какой-то момент после того, как пакет был перемещен в кольцо передачи, передающий PHY-чип, который считывает каждый бит из буфера пакетов, кодирует его в надлежащий формат для исходящего физического типа носителя и копирует пакет на провод.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59