warik

<<< Back

Проговаривание сообщений Алисы на терминалах(MPD, VLC, etc.)

Небольшая заметка о том, как можно проигрывать голос Алисы на терминалах без MajorDroid API.

Из своего скрипта мы заставляем заговорить Алису и тем самым закешировать необходимый нам файл. Например:

$weather = "Погода такая погодная.";
say($weather,1);

В переменной $weather хранится информация о погоде в текстовом виде. Этот текст можно получить как угодно, например из какого либо погодного модуля.
Система проговаривает эту инфу на сервере и тем самым кеширует аудио файл в папку cms/cached/voice/. Теперь для того чтобы узнать имя файла, нам достаточно выполнить функцию:

$md5hash = md5($weather);

То есть в переменной $md5hash будет хранится md5 хеш нашего текста о погоде.
Теперь для того чтобы сформировать ссылку на mp3 файл достаточно такой строки:

$link_on_mp3_file = "http://domain.com/cms/cached/voice/".$md5hash."_yandex.mp3";

Прошу заметить что у меня Яндекс TTS, потому в конце "_yandex.mp3". Как там для других TTS, смотрите у себя в папке cms/cached/voice/.
Теперь имея ссылку на файл с нашим продиктованым текстом, мы можем эту ссылку отправить на проигрывание на нужном нам терминале. Например так:

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$url = "http://domain.com/popup/app_player.html?ajax=1&play_terminal=$terminal&command=refresh&play=".urlencode($link_on_mp3_file);
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
curl_close($ch);

В переменной $terminal хранится имя терминала на котором необходимо воспроизвести файл. Можно задать ранее, можно передавать в скрипт как параметр, можно просто вместо имени переменной вручную вписать имя терминала или задать переменную перед запросом:

$terminal = "phone";

Так же можно использовать внутреннюю функцию MajorDomo: getURLBackground и тем самым сократить код. Ниже представлю полный код сценария в двух видах. Какой использовать, решаете Вы сами.
Полный код скрипта с getURLBackground:

$weather = "Погода такая погодная.";
say($weather,1);
$md5hash = md5($weather);
$link_on_mp3_file = "http://domain.com/cms/cached/voice/".$md5hash."_yandex.mp3";
$terminal = "phone";
$url = "http://domain.com/popup/app_player.html?ajax=1&play_terminal=$terminal&command=refresh&play=".urlencode($link_on_mp3_file);
getURLBackground($url);

Полный код скрипта с curl:

$weather = "Погода такая погодная.";
say($weather,1);
$md5hash = md5($weather);
$link_on_mp3_file = "http://domain.com/cms/cached/voice/".$md5hash."_yandex.mp3";
$terminal = "phone";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$url = "http://domain.com/popup/app_player.html?ajax=1&play_terminal=$terminal&command=refresh&play=".urlencode($link_on_mp3_file);
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
curl_close($ch);

Ну и если уж совсем хочется сократить код, то можно сделать так:

$weather = "Погода такая погодная.";
say($weather,1);
$md5hash = md5($weather);
$url = "http://domain.com/popup/app_player.html?ajax=1&play_terminal=phone&command=refresh&play=".urlencode("http://domain.com/cms/cached/voice/".$md5hash."_yandex.mp3");
getURLBackground($url);

Ссылка на оригинальный пост с форума: Orange Pi Zero в качестве терминала?

Discuss (18) (10)

See also:
2018-05-08 Sonoff-Tasmota отправка команд для изменения настроек.

Запорожье, Украина

На форуме: warik

Web-site URL:
http://lineus.ru/