Демонстрация возможностей системы

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

Модератор: immortal

OlegM
Сообщения: 96
Зарегистрирован: Пт май 15, 2015 3:28 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: Демонстрация возможностей системы

Сообщение OlegM » Вт ноя 14, 2017 11:31 pm

alekszander писал(а):коллеги, подскажите как сейчас реализовать скрипт DemoSay. Посмотрел по Connect у других пользователей, не говорит ни чего. Есть ли рабочая реализация?
Коллеги помогите. Очень надо.
Это работает замечательно
if (gg('DemoCancel')) {
return;
}

$ph='';

if (!is_array($params)) {
$ph=$params;
}


if (!$ph) {
$ph="Hello, world!";
}

$yandex_file=YandexTTS($ph, 'en');

if ($yandex_file) {
@touch($yandex_file);
system('/usr/bin/mplayer '.$yandex_file);

}
OlegM
Сообщения: 96
Зарегистрирован: Пт май 15, 2015 3:28 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: Демонстрация возможностей системы

Сообщение OlegM » Ср ноя 15, 2017 9:36 am

Да и еще... Вместо

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

system('/usr/bin/mplayer '.$yandex_file); 
можно использовать

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

playSound($yandex_file, 1); 
Вдогонку Сергею. Почему голос работает только на сервере? Когда Алиса говорит и пишет сама, то работает на всех устройствах, а данном случае только на сервере.
За это сообщение автора OlegM поблагодарил:
alekszander (Вт ноя 21, 2017 9:15 am)
Рейтинг: 1.16%
alekszander
Сообщения: 178
Зарегистрирован: Вс янв 05, 2014 5:37 am
Благодарил (а): 10 раз
Поблагодарили: 17 раз

Re: Демонстрация возможностей системы

Сообщение alekszander » Ср ноя 15, 2017 2:36 pm

OlegM писал(а):
alekszander писал(а):коллеги, подскажите как сейчас реализовать скрипт DemoSay. Посмотрел по Connect у других пользователей, не говорит ни чего. Есть ли рабочая реализация?
Коллеги помогите. Очень надо.
Это работает замечательно
if (gg('DemoCancel')) {
return;
}

$ph='';

if (!is_array($params)) {
$ph=$params;
}


if (!$ph) {
$ph="Hello, world!";
}

$yandex_file=YandexTTS($ph, 'en');

if ($yandex_file) {
@touch($yandex_file);
system('/usr/bin/mplayer '.$yandex_file);

}
При попытке вызова ругается на ошибку

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

Fatal error: Call to undefined function yandex_tts() in /var/www/modules/scripts/scripts.class.php(139) : eval()'d code on line 16
OlegM
Сообщения: 96
Зарегистрирован: Пт май 15, 2015 3:28 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: Демонстрация возможностей системы

Сообщение OlegM » Ср ноя 15, 2017 4:01 pm

alekszander писал(а): При попытке вызова ругается на ошибку

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

Fatal error: Call to undefined function yandex_tts() in /var/www/modules/scripts/scripts.class.php(139) : eval()'d code on line 16
Смотря какая у Вас платформа. Данный пример для Linux.
Вообще я еще дал второй пример. Он для любой платформы.
И по ходу у Вас не обновленная версия портала. Судя по ошибки функции YandexTTS() у Вас нет. Хотя она добавлена в файле lib/tts.class.php
У Вас наверное там только функция GoogleTTS()
Если в указанном файле у Вас нет этой функции, то либо обновитесь, либо в конец добавьте код:

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

/**
 * YandexTTS
 * @param mixed $message Message
 * @param mixed $lang    Language (default 'ru-RU')
 * @return int|string
 */
function YandexTTS($message, $lang = 'ru-RU')
{
   $filename       = md5($message) . '_ya.mp3';
   $cachedVoiceDir = ROOT . 'cached/voice';
   $cachedFileName = $cachedVoiceDir . '/' . $filename;
   $base_url       = 'https://tts.voicetech.yandex.net/generate?';

   if (file_exists($cachedFileName))
   {
      @touch($cachedFileName);

      return $cachedFileName;
   }
   
   $qs = http_build_query(array('format' => 'mp3', 'lang' => $lang, 'speaker' => 'omazh', 'key' => SETTINGS_YANDEX_TTS_KEY, 'text' => $message));

   try
   {
      $contents = file_get_contents($base_url . $qs);
   }
   catch (Exception $e)
   {
      registerError('yandextts', get_class($e) . ', ' . $e->getMessage());
   }
   
   if (isset($contents))
   {
      CreateDir($cachedVoiceDir);

      SaveFile($cachedFileName, $contents);

      return $cachedFileName;
   }
   
   return 0;
} 
Последний раз редактировалось OlegM Ср ноя 15, 2017 4:16 pm, всего редактировалось 1 раз.
За это сообщение автора OlegM поблагодарил:
alekszander (Вт ноя 21, 2017 9:15 am)
Рейтинг: 1.16%
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Демонстрация возможностей системы

Сообщение skysilver » Ср ноя 15, 2017 4:12 pm

alekszander писал(а):При попытке вызова ругается на ошибку

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

Fatal error: Call to undefined function yandex_tts() in /var/www/modules/scripts/scripts.class.php(139) : eval()'d code on line 16
Функция yandex_tts() уже давно не входит в состав ядра МДМ, а распространяется в составе отдельного модуля. Поэтому если есть необходимость ее использовать в своих сценариях и методах, то надо сначала подключить файлы из этого модуля, в которых она объявлена.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
OlegM
Сообщения: 96
Зарегистрирован: Пт май 15, 2015 3:28 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: Демонстрация возможностей системы

Сообщение OlegM » Ср ноя 15, 2017 8:21 pm

skysilver писал(а):Функция yandex_tts() уже давно не входит в состав ядра МДМ, а распространяется в составе отдельного модуля. Поэтому если есть необходимость ее использовать в своих сценариях и методах, то надо сначала подключить файлы из этого модуля, в которых она объявлена.
Не знаю на счет как используется или нет, во всяком случае она работоспособна в отличии от google_tts. А то приложение от яндекс в данном случае не подойдет, т.к. с проговариванием еще будет и в терминале писать. А это не нужно. В общих настройках есть поле ключа яндек, и никто его не убирал. Что очень хорошо.

Посидел сегодня и подумал насчет переводов текстов. В тот-же файл tts.class.php с google_tts и yandex_tts добавил небольшую функцию в виде костыля

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

function YandexTranslate($message, $lang = 'en-ru')
{
 $yt_api_key = "Здесь сам ключ"; // Получить тут: https://tech.yandex.ru/keys/get/?service=trnsl
 $message = urlencode($message);
 
 $yt_link = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=".$yt_api_key."&text=".$message."&lang=".$lang;

 $result = file_get_contents($yt_link);
 $result = json_decode($result, true);
 $en_test = $result['text'][0];

 return $en_test;
}
 
А в сценарий DemoSay внес небольшое изменени

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

$ph=YandexTranslate($params); 
Неплохо переводит :D

Кто-бы взял этот костыль и доработал бы его до отдельного модуля. Было бы неплохо.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Демонстрация возможностей системы

Сообщение skysilver » Ср ноя 15, 2017 9:59 pm

OlegM писал(а):В тот-же файл tts.class.php с google_tts и yandex_tts добавил небольшую функцию в виде костыля
Нет больше файла /lib/tts.class.php в составе дистрибутива ядра. Этот момент я имел в виду выше.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
alekszander
Сообщения: 178
Зарегистрирован: Вс янв 05, 2014 5:37 am
Благодарил (а): 10 раз
Поблагодарили: 17 раз

Re: Демонстрация возможностей системы

Сообщение alekszander » Чт ноя 16, 2017 2:55 am

Удалось избавиться от ошибки YandexTTS. Функцию подключил в самом скрипте DemoSay. Но теперь выходит друга проблема. При попытке произнести выходит ошибка.
СпойлерПоказать

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

Cannot find HOME directory. MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team Terminal type `unknown' is not defined. Playing /var/www/cached/voice/b43dd0462bc99529e4c68c98a6dae7d6_ya.mp3. Failed to recognize file format. Exiting... (End of file)
При воспроизведении файла, файл весит 3-4 KB, и длительность 0 секунд. И если в скрипте больше одно DemoSay то тогда ругается на переобъявление функции.

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

Fatal error: Cannot redeclare YandexTTS() (previously declared in /var/www/modules/scripts/scripts.class.php(142) : eval()'d code:7) in /var/www/modules/scripts/scripts.class.php(142) : eval()'d code on line 35
И сразу вопрос. Если можно использовать сам модуль Yandex TTS как это сделать в данном случае (Через say не слишком хочется)
OlegM
Сообщения: 96
Зарегистрирован: Пт май 15, 2015 3:28 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: Демонстрация возможностей системы

Сообщение OlegM » Чт ноя 16, 2017 9:42 am

alekszander писал(а):Удалось избавиться от ошибки YandexTTS. Функцию подключил в самом скрипте DemoSay. Но теперь выходит друга проблема. При попытке произнести выходит ошибка.
СпойлерПоказать

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

Cannot find HOME directory. MPlayer2 2.0-728-g2c378c7-4+b1 (C) 2000-2012 MPlayer Team Terminal type `unknown' is not defined. Playing /var/www/cached/voice/b43dd0462bc99529e4c68c98a6dae7d6_ya.mp3. Failed to recognize file format. Exiting... (End of file)
При воспроизведении файла, файл весит 3-4 KB, и длительность 0 секунд. И если в скрипте больше одно DemoSay то тогда ругается на переобъявление функции.

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

Fatal error: Cannot redeclare YandexTTS() (previously declared in /var/www/modules/scripts/scripts.class.php(142) : eval()'d code:7) in /var/www/modules/scripts/scripts.class.php(142) : eval()'d code on line 35
И сразу вопрос. Если можно использовать сам модуль Yandex TTS как это сделать в данном случае (Через say не слишком хочется)
По первой ошибке, проверьте правильный ли ключ для API Yandex и есть ли у Вас он вообще. Кстати в сценарии он может по шаблону не определятся, т.е. не видеть его из настроек. Если по поводу последнего я не прав, то кто-то может поправить.
У Вас создаются mp3 файлы, но пустые. Проигрыватель не понимает формат файла.

По второй ошибке. Вы каждый раз запуская сценарий DemoSay переопределяете одну и ту-же функцию. Я выше писал если у Вас есть файл /lib/tts.class.php, то добавьте туда эту функцию. Если нет, то создайте ее и добавьте эту функцию туда. Либо в любой php файл в папке /lib Но второе не рекомендую, т.к. при обновлении придется заново добавлять.
Последний раз редактировалось OlegM Чт ноя 16, 2017 10:19 am, всего редактировалось 4 раза.
OlegM
Сообщения: 96
Зарегистрирован: Пт май 15, 2015 3:28 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: Демонстрация возможностей системы

Сообщение OlegM » Чт ноя 16, 2017 9:44 am

skysilver писал(а):
OlegM писал(а):В тот-же файл tts.class.php с google_tts и yandex_tts добавил небольшую функцию в виде костыля
Нет больше файла /lib/tts.class.php в составе дистрибутива ядра. Этот момент я имел в виду выше.
У меня она осталась. Поэтому об этом и пишу. :D Модуль Yandex TTS не дает возможности произносить речь без текста в терминале. А в демонстрационном варианте текст в терминале не нужен.
Ответить