SmartLiving.ru

Обсуждение проекта
 
Текущее время: Вс ноя 19, 2017 11:31 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: Вт ноя 14, 2017 11:31 pm 
Не в сети

Зарегистрирован: Пт май 15, 2015 3:28 pm
Сообщения: 27
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
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);

}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср ноя 15, 2017 9:36 am 
Не в сети

Зарегистрирован: Пт май 15, 2015 3:28 pm
Сообщения: 27
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Да и еще... Вместо
Код:
system('/usr/bin/mplayer '.$yandex_file); 
можно использовать
Код:
playSound($yandex_file1); 


Вдогонку Сергею. Почему голос работает только на сервере? Когда Алиса говорит и пишет сама, то работает на всех устройствах, а данном случае только на сервере.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср ноя 15, 2017 2:36 pm 
Не в сети

Зарегистрирован: Вс янв 05, 2014 5:37 am
Сообщения: 146
Благодарил (а): 6 раз.
Поблагодарили: 10 раз.
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 errorCall to undefined function yandex_tts() in /var/www/modules/scripts/scripts.class.php(139) : eval()'d code on line 16


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср ноя 15, 2017 4:01 pm 
Не в сети

Зарегистрирован: Пт май 15, 2015 3:28 pm
Сообщения: 27
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
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 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср ноя 15, 2017 4:12 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 663
Откуда: Киров, Россия
Благодарил (а): 149 раз.
Поблагодарили: 267 раз.
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.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср ноя 15, 2017 8:21 pm 
Не в сети

Зарегистрирован: Пт май 15, 2015 3:28 pm
Сообщения: 27
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
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

Кто-бы взял этот костыль и доработал бы его до отдельного модуля. Было бы неплохо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср ноя 15, 2017 9:59 pm 
Не в сети

Зарегистрирован: Чт авг 21, 2014 8:28 am
Сообщения: 663
Откуда: Киров, Россия
Благодарил (а): 149 раз.
Поблагодарили: 267 раз.
OlegM писал(а):
В тот-же файл tts.class.php с google_tts и yandex_tts добавил небольшую функцию в виде костыля
Нет больше файла /lib/tts.class.php в составе дистрибутива ядра. Этот момент я имел в виду выше.

_________________
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Чт ноя 16, 2017 2:55 am 
Не в сети

Зарегистрирован: Вс янв 05, 2014 5:37 am
Сообщения: 146
Благодарил (а): 6 раз.
Поблагодарили: 10 раз.
Удалось избавиться от ошибки 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 errorCannot 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 не слишком хочется)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Чт ноя 16, 2017 9:42 am 
Не в сети

Зарегистрирован: Пт май 15, 2015 3:28 pm
Сообщения: 27
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
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 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Чт ноя 16, 2017 9:44 am 
Не в сети

Зарегистрирован: Пт май 15, 2015 3:28 pm
Сообщения: 27
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
skysilver писал(а):
OlegM писал(а):
В тот-же файл tts.class.php с google_tts и yandex_tts добавил небольшую функцию в виде костыля
Нет больше файла /lib/tts.class.php в составе дистрибутива ядра. Этот момент я имел в виду выше.

У меня она осталась. Поэтому об этом и пишу. :D Модуль Yandex TTS не дает возможности произносить речь без текста в терминале. А в демонстрационном варианте текст в терминале не нужен.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB