Страница 2 из 2
Re: Sonos подключение
Добавлено: Ср ноя 18, 2015 4:00 pm
AndreyZak
Вроде маленько разобрался, начинаю понемногу понимать что куда.
Есть еще один вопрос и пожалуй самый главный, для чего и был куплен Sonos. Как заставить Алису говорить через Sonos? В файле sonos.class.php есть замечательная функция, называется PlayTTS, с помощью неё можно воспроизводить сообщения, как внешние так и заранее заготовленные нарезки MP3.
Я создал метод PlayTTS:
Код: Выделить всё
include_once(ROOT.'lib/hardware/sonos.class.php');
$sonos_1 = new SonosPHPController($this->getProperty("SonosIp"));
$play = $sonos_1->PlayTTS();
$this->setProperty("PlayTTS", $PlayTTS);
по аналогии со вторым постом, вызывать можно наверное так:
это еще не испытано!
Но вот как сделать что бы Алиса к примеру сказала погоду через все это ума не приложу?

Re: Sonos подключение
Добавлено: Ср ноя 18, 2015 4:21 pm
Dark_Veter
Тут я вам врядли что то подскажу. Попробуйте так:
Код: Выделить всё
if (is_array($params)) {
$directory = "sonos";
$volume = $this->getProperty("volume");
$message = $params['message'];
if ($params['force_unmute']) {
$force_unmute = $params['force_unmute'];
} else {
$force_unmute = 0;
}
include_once(ROOT.'lib/hardware/sonos.class.php');
$sonos_1 = new SonosPHPController($this->getProperty("SonosIp"));
$sonos_1->PlayTTS($message, $directory, $volume, $force_unmute);
}
Использовать так:
Код: Выделить всё
callMethod('sonos1.PlayTTS', array('message' => 'Привет!', 'force_unmute' => 1));
Re: Sonos подключение
Добавлено: Ср ноя 18, 2015 9:26 pm
AndreyZak
Так не получается

Re: Sonos подключение
Добавлено: Чт ноя 19, 2015 12:29 am
AndreyZak
Возможно я понял в чем проблема, в коде
Код: Выделить всё
protected function TTSToMp3($words,$lang)
{
// Directory
$folder = "audio/".$lang;
// Replace the non-alphanumeric characters
// The spaces in the sentence are replaced with the Plus symbol
$words = urlencode($words);
// Name of the MP3 file generated using the MD5 hash
$file = md5($words);
// If folder doesn't exists, create it
if (!file_exists($folder))
mkdir($folder, 0755, true);
// Save the MP3 file in this folder with the .mp3 extension
$file = $folder."/TTS-".$file.".mp3";
// If the MP3 file exists, do not create a new request
if (!file_exists($file))
{
// Google Translate API cannot handle strings > 100 characters
$words = $this->CutString($words,100);
ini_set('user_agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0');
$mp3 = "";
for ($i = 0; $i < count($words); $i++)
$mp3[$i] = file_get_contents('http://translate.google.com/translate_tts?q='.$words[$i].'&tl='.$lang);
file_put_contents($file, $mp3);
}
return $file;
}
используется движок от Googla, который с недавних пор закрыт(капча). Весь вечер убил на переделку под Yandex, но результата так и не получил. Вставлял вместо
Код: Выделить всё
('http://translate.google.com/translate_tts?q='.$words[$i].'&tl='.$lang);
----->>>>
Код: Выделить всё
('https://tts.voicetech.yandex.net/generate?text='$words[$i]&format=mp3&lang=ru-RU&speaker=zahar&key=<fbb5660d-b86a-4333-b425-343711ec2539>);
менял & на ., убирал <>, да по всякому, но mp3 файл не возвращается, даже на сайте Яндекса нет статистики по использованию ключа, т.е. даже запрос не проходит.
Я вот подумал, не знаете как можно сделать тоже самое, но только локально? На компе установлен движок IVONA-Татьяна, как к ней обратиться из данного кода? Спасибо.
Re: Sonos подключение
Добавлено: Пт ноя 20, 2015 10:23 am
Dark_Veter
AndreyZak писал(а):Возможно я понял в чем проблема, в коде
Я вот подумал, не знаете как можно сделать тоже самое, но только локально? На компе установлен движок IVONA-Татьяна, как к ней обратиться из данного кода? Спасибо.
Нет, тут не подскажу. Надо разбираться. Возможно можно создать mp3 файл через Ivona, затем отправить его на колонку.
Re: Sonos подключение
Добавлено: Пт ноя 20, 2015 11:00 am
mmalva
Dark_Veter писал(а):AndreyZak писал(а):Возможно я понял в чем проблема, в коде
Я вот подумал, не знаете как можно сделать тоже самое, но только локально? На компе установлен движок IVONA-Татьяна, как к ней обратиться из данного кода? Спасибо.
Нет, тут не подскажу. Надо разбираться. Возможно можно создать mp3 файл через Ivona, затем отправить его на колонку.
Я для отправки в common.class.php заменил htdocs\rc\sapi на htdocs\rc\sapi_cached и использовал htdocs\cached\voice для воспроизведения на устройстве.
Только кодом сейчас поделиться не могу, нет доступа к этой машинке.
Только потом надо следить за состоянием кэша, если Алиса очень болтливая.
m-malva
Re: Sonos подключение
Добавлено: Пт ноя 20, 2015 10:27 pm
AndreyZak
А доступ будет?
Re: Sonos подключение
Добавлено: Чт дек 17, 2015 10:53 am
m-malva
да по всякому, но mp3 файл не возвращается, даже на сайте Яндекса нет статистики по использованию ключа, т.е. даже запрос не проходит
ПОПРОБУЙТЕ "urlencode"
Код: Выделить всё
$url="http://tts.voicetech.yandex.net/generate?text=".urlencode($ph)."&format=mp3&lang=".$lang."&speaker=jane&key=".$ykey."&emotion=mixed";
У меня устройство другое, но принцип схожий сделано так
Код: Выделить всё
$level=$params['level'];
$ph=$params['ph'];
$device=gg("Chumby.ip"); //Это IP моего устройства
if (gg("InternetAccess")==1){
$lang='en';
if (defined('SETTINGS_SITE_LANGUAGE')) {
$lang=SETTINGS_SITE_LANGUAGE;
}
if (defined('SETTINGS_VOICE_LANGUAGE')) {
$lang=SETTINGS_VOICE_LANGUAGE;
}
$ykey="КЛЮЧ-ОТ-ЯНДЕКС-ГОВОРИЛКИ-ВСТАВЛЯЕМ-СЮДА";
if (gg("Chumby.Online")==1 && gg("Chumby.VoiceLevel")<=$level && gg("ThisComputer.minMsgLevel")<=$level) { //УСЛОВИЕ КОГДА ГОВОРИТЬ В УСТРОЙСТВО
$file="./cached/YandexTTS.mp3";
$url="http://tts.voicetech.yandex.net/generate?text=".urlencode($ph)."&format=mp3&lang=".$lang."&speaker=jane&key=".$ykey."&emotion=mixed";
echo($url);
$dest_file = @fopen($file, "w");
$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_FILE, $dest_file);
curl_setopt($resource, CURLOPT_HEADER, 0);
curl_exec($resource);
curl_close($resource);
fclose($dest_file);
echo("<br>");
getURL("http://".$device."/cgi-bin/zmote_play.sh?http://ТУТ IP АЛИСЫ/".$file, 1);
setGlobal('Chumby.say', $ph);
}
}else{ //ЕСЛИ НЕТ ИНТЕРНЕТА ТО ХОТЬ ДИНЬ-ДОНГ
getURL("http://".$device."/cgi-bin/zmote_play.sh?http://ТУТ IP АЛИСЫ/sounds/dingdong.mp3", 1);
}