Страница 3 из 6
Re: Демонстрация возможностей системы
Добавлено: Вт ноя 14, 2017 11:31 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);
}
Re: Демонстрация возможностей системы
Добавлено: Ср ноя 15, 2017 9:36 am
OlegM
Да и еще... Вместо
можно использовать
Вдогонку Сергею. Почему голос работает только на сервере? Когда Алиса говорит и пишет сама, то работает на всех устройствах, а данном случае только на сервере.
Re: Демонстрация возможностей системы
Добавлено: Ср ноя 15, 2017 2:36 pm
alekszander
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
Re: Демонстрация возможностей системы
Добавлено: Ср ноя 15, 2017 4:01 pm
OlegM
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;
}
Re: Демонстрация возможностей системы
Добавлено: Ср ноя 15, 2017 4:12 pm
skysilver
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() уже давно не входит в состав ядра МДМ, а распространяется в составе отдельного модуля. Поэтому если есть необходимость ее использовать в своих сценариях и методах, то надо сначала подключить файлы из этого модуля, в которых она объявлена.
Re: Демонстрация возможностей системы
Добавлено: Ср ноя 15, 2017 8:21 pm
OlegM
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 внес небольшое изменени
Неплохо переводит
Кто-бы взял этот костыль и доработал бы его до отдельного модуля. Было бы неплохо.
Re: Демонстрация возможностей системы
Добавлено: Ср ноя 15, 2017 9:59 pm
skysilver
OlegM писал(а):В тот-же файл tts.class.php с google_tts и yandex_tts добавил небольшую функцию в виде костыля
Нет больше файла /lib/tts.class.php в составе дистрибутива ядра. Этот момент я имел в виду выше.
Re: Демонстрация возможностей системы
Добавлено: Чт ноя 16, 2017 2:55 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 не слишком хочется)
Re: Демонстрация возможностей системы
Добавлено: Чт ноя 16, 2017 9:42 am
OlegM
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 Но второе не рекомендую, т.к. при обновлении придется заново добавлять.
Re: Демонстрация возможностей системы
Добавлено: Чт ноя 16, 2017 9:44 am
OlegM
skysilver писал(а):OlegM писал(а):В тот-же файл tts.class.php с google_tts и yandex_tts добавил небольшую функцию в виде костыля
Нет больше файла /lib/tts.class.php в составе дистрибутива ядра. Этот момент я имел в виду выше.
У меня она осталась. Поэтому об этом и пишу.
Модуль Yandex TTS не дает возможности произносить речь без текста в терминале. А в демонстрационном варианте текст в терминале не нужен.