Отправка голосовых сообщений rhvoice wav на нужные vlc

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
lysyy
Сообщения: 113
Зарегистрирован: Вт июн 09, 2015 9:41 pm
Откуда: Moscow
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Отправка голосовых сообщений rhvoice wav на нужные vlc

Сообщение lysyy » Вт май 30, 2017 12:33 am

Отправка голосовых сообщений rhvoice wav на нужные терминалы с vlc.. решение - заплатка, т.к. у меня ни хромы с расширением, ни MajorDroid не говорят больше((( на мобилки соединение на сокет проходит, на терминале показывается tts:сообщение. и все.
Установлено на ubuntu 16, плагин rhvoice рожает wav-файлы.
В каталог /lib веб-сервера положил файлик vlcvoice.php

Код: Выделить всё

<?php
/**
Установка VLC
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" -I ntservice --ntservice-extraintf dummy -I ntservice --http-password=Parol --extraintf=http --http-port=8080
С паролем
start /D "C:\Program Files (x86)\VideoLAN\VLC\" vlc.exe -I ntservice --ntservice-install --ntservice-name=VLC --ntservice-extraintf=dummy --ntservice-options="-I ntservice --http-password=YourPassword --extraintf=http --http-port=8080
Без пароля
start /D "C:\Program Files (x86)\VideoLAN\VLC\" vlc.exe -I ntservice --ntservice-install --ntservice-name=VLC --ntservice-extraintf=dummy --ntservice-options="-I ntservice --extraintf=http --http-port=8080"
sc start vlc

Для удаления 
start /D "C:\Program Files (x86)\VideoLAN\VLC\" vlc.exe -I --ntservice-uninstall --ntservice-name=VLC


$media="http://md64/cached/voice/rh_ac112f7951ece2dd36be25fe2393dd53.wav";
$mediaurl=urlencode($media);
$urlo='http://192.168.1.9:8080/requests/status.xml?command=in_play&input='.$mediaurl;
//$urlo='http://Parol@192.168.1.9:8080/requests/status.xml';
var_dump ($urlo);
///cached/voice/rh_ac112f7951ece2dd36be25fe2393dd53.wav
$otv=getURL($urlo,0);

 */
 function sendtovlc($ph,$destination){
$compname=exec("hostname");
$terminal_rec=SQLSelectOne("SELECT * FROM terminals WHERE NAME LIKE '".DBSafe($destination)."'");
//var_dump($terminal_rec);
if ($terminal_rec['CANPLAY'] && $terminal_rec['HOST'] && $terminal_rec['PLAYER_TYPE'] == "vlcweb") {
   $terminalport=$terminal_rec['PLAYER_PORT'];
   $terminalip=$terminal_rec['HOST'];
$address=$terminal_rec['HOST'];}
else{debmes ("Not found terminal ".$destination);return 0;}

debmes ("Starting sendtovlc $ph $terminalip $terminalport");
$media="http://".$compname."/cached/voice/rh_".md5($ph).'.wav';
//взято из модуля rhvoice

$voice='Anna';
$cached_filename = ROOT . 'cached/voice/rh_' . md5($ph) . '.wav';
                   if (!file_exists($cached_filename)) {
                       $ex='echo "' . $ph . '" | RHVoice-test -p ' . $voice . ' -o '.$cached_filename ;
                      
                   $ex_res=safe_exec($ex);
                   debmes("Creating wav.. ".$ex);
                   debmes($ex_res);
                   sleep(5);
                            if (!file_exists($cached_filename)) {
                                debmes ("No file created!!! ".$ph);
                                }    
                   }
debmes("Media URL ".$media);
$mediaurl=urlencode($media);
$urlo="http://".$terminalip.":".$terminalport."/requests/status.xml?command=in_play&input=".$mediaurl;
debmes($urlo);
$otv=getURL($urlo,0);
if(!$otv){
debmes ("Error! Was not connected to ".$destination);}


 }
 

 
тут идет образование url-wav файла из hostname сервера, поэтому нужно, что бы терминал ресолвил в dns имя сервера (у меня их 2, с дачей)

надо поставить в файл common.class.php вызов функции sendtovlc, место находится до и после // LYSYY's code

Код: Выделить всё

  if ($terminal_rec['LINKED_OBJECT'] && $terminal_rec['LEVEL_LINKED_PROPERTY']) {
   $min_level=(int)getGlobal($terminal_rec['LINKED_OBJECT'].'.'.$terminal_rec['LEVEL_LINKED_PROPERTY']);
  } else {
   $min_level=(int)getGlobal('minMsgLevel');
  }
  if ($level < $min_level) {
   return 0;
  }
  
  // LYSYY's code
  debmes("call sendtovlc ".$destination." ".$ph);
  sendtovlc($ph,$destination);
  
  //
  
  if ($terminal_rec['MAJORDROID_API'] && $terminal_rec['HOST']) {
   $service_port='7999';
   $in='tts:'.$ph;
   $address=$terminal_rec['HOST'];
 
Отправляет на терминал вне зависимости от статуса онлайн - были глюки с долгим необращением, наверное по http, но ведь там может вообще не быть браузера.
Работают say,sayto, sayreply при корректной настройке-должна стоять canplay в таблице terminals-это галка "может проигрывать медиаконтент"

Нужен плагин (От всей души благодарю его создателя Dark_Veter!) rhvoice
lysyy
Сообщения: 113
Зарегистрирован: Вт июн 09, 2015 9:41 pm
Откуда: Moscow
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: Отправка голосовых сообщений rhvoice wav на нужные vlc

Сообщение lysyy » Чт июн 22, 2017 4:45 pm

Добавил проигрывание звука перед сообщением. Дальше в планах-смотреть и ждать, если vlc уже играет голосовое сообщение.
Свой звук пихать в /cms/sounds/Zvu2.mp3
В sleep() поставить, сколько сек ждать его проигрывания.
Кстати, кто-нибудь придумал, как вылечить Majordroid ?
СпойлерПоказать

Код: Выделить всё

<?php
/**
Установка VLC
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" -I ntservice --ntservice-extraintf dummy -I ntservice --http-password=Parol --extraintf=http --http-port=8080
С паролем
start /D "C:\Program Files (x86)\VideoLAN\VLC\" vlc.exe -I ntservice --ntservice-install --ntservice-name=VLC --ntservice-extraintf=dummy --ntservice-options="-I ntservice --http-password=YourPassword --extraintf=http --http-port=8080
Без пароля
start /D "C:\Program Files (x86)\VideoLAN\VLC\" vlc.exe -I ntservice --ntservice-install --ntservice-name=VLC --ntservice-extraintf=dummy --ntservice-options="-I ntservice --extraintf=http --http-port=8080"
sc start vlc

Для удаления 
start /D "C:\Program Files (x86)\VideoLAN\VLC\" vlc.exe -I --ntservice-uninstall --ntservice-name=VLC


$media="http://md64/cached/voice/rh_ac112f7951ece2dd36be25fe2393dd53.wav";
$mediaurl=urlencode($media);
$urlo='http://192.168.1.9:8080/requests/status.xml?command=in_play&input='.$mediaurl;
//$urlo='http://Parol@192.168.1.9:8080/requests/status.xml';
var_dump ($urlo);
///cached/voice/rh_ac112f7951ece2dd36be25fe2393dd53.wav
$otv=getURL($urlo,0);

 */
 
 //if (!defined('SETTINGS_SPEAK_SIGNAL') || SETTINGS_SPEAK_SIGNAL == '1')
 function vlcsignal($destination)
 {
if (!defined('SETTINGS_SPEAK_SIGNAL') || SETTINGS_SPEAK_SIGNAL == '1')
    {
//$lastsound=SQLSelectOne("SELECT * FROM terminals WHERE NAME LIKE '".DBSafe($destination)."'");
//ThisComputer.lastSayTime
$passed = time() - (int)getGlobal('lastSayTime');
if ($passed > 20)
        {    
    
$compname=exec("hostname");
$terminal_rec=SQLSelectOne("SELECT * FROM terminals WHERE NAME LIKE '".DBSafe($destination)."'");
//var_dump($terminal_rec);
if ($terminal_rec['CANPLAY'] && $terminal_rec['HOST'] && $terminal_rec['PLAYER_TYPE'] == "vlcweb") {
   $terminalport=$terminal_rec['PLAYER_PORT'];
   $terminalip=$terminal_rec['HOST'];
    }
else{debmes ("vlcsignal:Not found terminal ".$destination);return 0;}

debmes ("Starting vlcsignal $ph $terminalip $terminalport");

        $media="http://".$compname."/cms/sounds/Zvu2.mp3";
        $mediaurl=urlencode($media);
        $urlo="http://".$terminalip.":".$terminalport."/requests/status.xml?command=in_play&input=".$mediaurl;
        debmes($urlo);
        $otv=getURL($urlo,0);
        sleep(4);
        }
    } 
}
  
 function sendtovlc($ph,$destination){
$compname=exec("hostname");
$terminal_rec=SQLSelectOne("SELECT * FROM terminals WHERE NAME LIKE '".DBSafe($destination)."'");
//var_dump($terminal_rec);
if ($terminal_rec['CANPLAY'] && $terminal_rec['HOST'] && $terminal_rec['PLAYER_TYPE'] == "vlcweb") {
   $terminalport=$terminal_rec['PLAYER_PORT'];
   $terminalip=$terminal_rec['HOST'];
$address=$terminal_rec['HOST'];}
else{debmes ("Not found terminal ".$destination);return 0;}

debmes ("Starting sendtovlc $ph $terminalip $terminalport");
$media="http://".$compname."/cached/voice/rh_".md5($ph).'.wav';
//взято из модуля rhvoice

$voice='Anna';
$cached_filename = ROOT . 'cached/voice/rh_' . md5($ph) . '.wav';
                   if (!file_exists($cached_filename)) {
                       $ex='echo "' . $ph . '" | RHVoice-test -p ' . $voice . ' -o '.$cached_filename ;
                      
                   $ex_res=safe_exec($ex);
                   debmes("Creating wav.. ".$ex);
                   debmes($ex_res);
                   sleep(5);
                            if (!file_exists($cached_filename)) {
                                debmes ("No file created!!! ".$ph);
                                }    
                   }
debmes("Media URL ".$media);
$mediaurl=urlencode($media);
$urlo="http://".$terminalip.":".$terminalport."/requests/status.xml?command=in_play&input=".$mediaurl;
debmes($urlo);
$otv=getURL($urlo,0);
if(!$otv){
debmes ("Error! Was not connected to ".$destination);}


 }
 
 function sendtoallvlc($ph,$terminalip,$terminalport){
$terminals=SQLSelect("SELECT NAME FROM terminals WHERE IS_ONLINE=1 AND MAJORDROID_API=1");
   $total=count($terminals);
   for($i=0;$i<$total;$i++) {
    //sayTo($ph, $level, $terminals[$i]['NAME']);
   }
 $compname=exec("hostname");
debmes ("Starting sendtoALLvlc $ph $terminalip $terminalport");
$media="http://".$compname."/cached/voice/rh_".md5($ph).'.wav';
//взято из модуля rhvoice
$cached_filename = ROOT . 'cached/voice/rh_' . md5($ph) . '.wav';
                   if (!file_exists($cached_filename)) {
                   safe_exec('echo "' . $ph . '" | RHVoice-test -p ' . $voice . ' -o '.$cached_filename );
                   }
debmes($media);
$mediaurl=urlencode($media);
$urlo="http://".$terminalip.":".$terminalport."/requests/status.xml?command=in_play&input=".$mediaurl;
debmes($urlo);
$otv=getURL($urlo,0);
debmes ($otv);

 }
 
Ответить