Показано с 1 по 10 из 26

Тема: Звуковое оповещение/сообщение

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #25
    Пользователь
    Регистрация
    09.08.2013
    Адрес
    Башкортостан
    Сообщений
    234

    По умолчанию

    Прошло больше года как начал использовать синтезированную речь.
    Сообщений не много. Одна группа сообщений связана с безопасностью. Вторая с авариями в инженерных сетях дома.
    От синтезатора гугла отказался и перешел на яндекс.
    Синтез происходит следующим образом:
    При появлении события, которое необходимо озвучить ПЛК передает информацию на OpenHAB (по modbus TCP).
    OH в свою очередь формирует текстовую строку в зависимости от кода события и вызывает php скрипт.
    php формирует запрос к Яндексу на синтез. Полученный синтезированный речевой файл передает на asterisk, который воспроизводит его используя функцию интеркома на групповой номер. В группу номеров подключены все имеющиеся телефоны.
    Код:
    <!--?php
    
    
    
    
    ###################################################
    # Ubuntu 16.04/ PHP7
    #
    # Скрипт получает на входе текстовую строку,
    # синтезирует из нее речевой аудиофайл,
    # копирует полученный файл на сервер asterisk
    # подключается к asterisk ami и воспроизводит файл/ 
    #
    # Для работы скрипта требуется установить php-ssh2
    # 
    # sudo apt-get update
    # sudo apt-get install php-ssh2
    # Сервер на котором запускается php и сервер  
    # asterisk - на разных ip
    ###################################################
    
    
    # --- Входные переменные ---
    $speaker = $_REQUEST['speaker']; // Голоса: Женские - jane, oksana, alyss omazh, Мужские - zahar, ermil
    $emotion = $_REQUEST['emotion']; // Эмоциональная окраска голоса. Возможные значения: 
                     // good — радостный, доброжелательный
                     // evil — раздраженный
                     // neutral — нейтральный (используется по умолчанию)
    $speech = $_REQUEST['speech'];  // имя файла синтезированного текста (file.mp3)
    $text = $_REQUEST['text'];    // Синтезируемый текст
    
    
    # --- настройка Asterisk  ---
    $strhost = "192.168.1.11";     // Адрес сервера FreePBX
    $strport = "5038";        // Порт AMI 
    $timeout = "100";
    $ami_user = "openhab\r\n";    // Пользователь AMI интерфейса FreePBX
    $ami_password = "password\r\n";// Пароль AMI
    $ssh_user = "user";
    $ssh_password = "password";
    $errno=0 ;
    $errstr=0 ;
    
    
    # ------ Настройки Yandex.Speech ---------------
    $KeyCode="2a4c42ce-b445-43d8-b5a7-88f6cee9c1221a";    // API Key Yandex.Speech
    
    
    if (empty($speaker)) { $speaker = "omazh"; }; // значения по умолчанию
    if (empty($emotion)) { $emotion = "evil"; };  // значения по умолчанию
    if (empty($speech)) { $speech = "speech.mp3"; };  // значения по умолчанию
    if (empty($text)) { $text = "Внимание! Обнаружено нарушение периметра безопасности!"; };  // значения по умолчанию
    $SpeechFile="/tmp/$speech";    // Путь/Имя файла в который будет записана синтезируемая речь
    echo "$SpeechFile \r\n";
    $qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => $speaker,"key" =>$KeyCode,"emotion" => $emotion, "text" => $text));
    $ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n")));
    $soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx);
    $i=file_put_contents($SpeechFile, $soundfile);
    
    
    echo("i=$i \r\n");
    
    
    // Если синтезировали речь - копируем полученный файл на FreePBX
    if ( $i > 0 ) {
        // Подключаемся к серверу по ssh
        if ($connection = ssh2_connect($strhost, 22)) {
           echo "Connection Successful!\r\n";
        }  else {
          die("Connection Failed...\r\n");
        };
        // авторизуемся на сервере
        if (ssh2_auth_password($connection, $ssh_user, $ssh_password)) {
          echo "Authentication Successful!\r\n";
        } else {
          die("Authentication Failed...\r\n");
        }
        // Копируем файл на FreePBX
        ssh2_scp_send($connection, $SpeechFile, "/tmp/$speech", 0644); // /tmp/$speech - каталог должен совпадать с каталогом из контекста
                                       // /etc.asterisk/extention_custom.conf  -> pa-custom -> Playback(/tmp/${var1})
        if (!$connection) die('Send failed');
        };
    
    
    
    
    #-------------- вызываем asterisk AMI и воспроизводим синтезированный аудиофайл---------------------
    $var1 = basename($speech, '.mp3') + "\r\n\r\n"; // для asterisk требуется имя без расширения
    $sconn = fsockopen ($strhost, $strport, $$errno, $$errstr, $timeout) or die("Connection to $strhost:$strport failed");
    
    
    if (!$sconn) { echo "$errstr ($errno)
    \n"; } 
    
    
      else {
    
    
      fputs ($sconn, "Action: login\r\n");
      fputs ($sconn, "Username: $ami_user");
      fputs ($sconn, "Secret: $ami_password");
      fputs ($sconn, "Events: off\r\n\r\n");
      usleep(500);
    
    
      fputs ($sconn, "Action: Originate\r\n");
      fputs ($sconn, "Channel: Local/590@from-internal\r\n");
      fputs ($sconn, "Callerid: OpenHAB\r\n");
      fputs ($sconn, "Timeout: 15000\r\n");
      fputs ($sconn, "Context: pa-custom\r\n");
      fputs ($sconn, "Exten: 577\r\n");
      fputs ($sconn, "Priority: 1\r\n\r\n");
      fputs ($sconn, "Async: yes\r\n\r\n" );
      fputs ($sconn, "Variable: var1=$var1" );
      fputs ($sconn, "Action: Logoff\r\n\r\n");
      usleep (500);
    
    
      fclose ($sconn);
    
    
      } 
    ?>
    Последний раз редактировалось Smith2007; 16.10.2016 в 22:50.

Похожие темы

  1. сообщение PLC2: stopped
    от Olk_74 в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 28.11.2014, 09:38
  2. СМС сообщение
    от Сергеев Василий в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 09.03.2011, 08:24
  3. не могу прочесть сообщение
    от Карнаухов Дмитрий в разделе Трёп (Курилка)
    Ответов: 2
    Последнее сообщение: 23.03.2007, 05:42

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •