Добавлю для "потомков"... Обсуждали на канале в
Телеграме.
Как воспроизвести голос Алисы на терминале.
...Из своего скрипта мы заставляем заговорить Алису и тем самым закешировать необходимый нам файл. Например:
Код: Выделить всё
$weather = "Погода такая погодная. Всё будет супер и солнечно.";
say($weather,1);
В переменной $weather хранится информация о погоде в текстовом виде. Этот текст можно получить как угодно, например из какого либо погодного модуля.
Система проговаривает эту инфу на сервере и тем самым кеширует аудио файл в папку cms/cached/voice/. Теперь для того чтобы узнать имя файла, нам достаточно выполнить функцию:
То есть в переменной $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";
Так же для того чтобы сократить код вызова URL, то есть код отправки команды на проигрывание, можно вызвать ссылку кодом:
То есть конечный вид сценария будет иметь вид:
Код: Выделить всё
$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);
Ссылка на заметку в блоге:
Проговаривание сообщений Алисы на терминалах(MPD, VLC, etc.)
Всё работает. Проверил только что.
При этом работает на:
1. MPD на OPi Zero.
2. Majordorid.
3. MPD на Android.