Sonos подключение

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

AndreyZak
Сообщения: 24
Зарегистрирован: Пт окт 16, 2015 8:47 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Sonos подключение

Сообщение AndreyZak » Ср ноя 18, 2015 4:00 pm

Вроде маленько разобрался, начинаю понемногу понимать что куда.
Есть еще один вопрос и пожалуй самый главный, для чего и был куплен 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);  
по аналогии со вторым постом, вызывать можно наверное так:

Код: Выделить всё

callMethod("sonos1.PlayTTS("messege)");
это еще не испытано!
Но вот как сделать что бы Алиса к примеру сказала погоду через все это ума не приложу? :roll:
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Sonos подключение

Сообщение Dark_Veter » Ср ноя 18, 2015 4:21 pm

Тут я вам врядли что то подскажу. Попробуйте так:

Код: Выделить всё

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)); 
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
AndreyZak
Сообщения: 24
Зарегистрирован: Пт окт 16, 2015 8:47 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Sonos подключение

Сообщение AndreyZak » Ср ноя 18, 2015 9:26 pm

Так не получается :cry:
AndreyZak
Сообщения: 24
Зарегистрирован: Пт окт 16, 2015 8:47 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Sonos подключение

Сообщение AndreyZak » Чт ноя 19, 2015 12:29 am

Возможно я понял в чем проблема, в коде
СпойлерПоказать

Код: Выделить всё

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-Татьяна, как к ней обратиться из данного кода? Спасибо.
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Sonos подключение

Сообщение Dark_Veter » Пт ноя 20, 2015 10:23 am

AndreyZak писал(а):Возможно я понял в чем проблема, в коде
Я вот подумал, не знаете как можно сделать тоже самое, но только локально? На компе установлен движок IVONA-Татьяна, как к ней обратиться из данного кода? Спасибо.
Нет, тут не подскажу. Надо разбираться. Возможно можно создать mp3 файл через Ivona, затем отправить его на колонку.
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
mmalva
Сообщения: 18
Зарегистрирован: Вт фев 24, 2015 1:04 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Sonos подключение

Сообщение mmalva » Пт ноя 20, 2015 11:00 am

Dark_Veter писал(а):
AndreyZak писал(а):Возможно я понял в чем проблема, в коде
Я вот подумал, не знаете как можно сделать тоже самое, но только локально? На компе установлен движок IVONA-Татьяна, как к ней обратиться из данного кода? Спасибо.
Нет, тут не подскажу. Надо разбираться. Возможно можно создать mp3 файл через Ivona, затем отправить его на колонку.
Я для отправки в common.class.php заменил htdocs\rc\sapi на htdocs\rc\sapi_cached и использовал htdocs\cached\voice для воспроизведения на устройстве.
Только кодом сейчас поделиться не могу, нет доступа к этой машинке.

Только потом надо следить за состоянием кэша, если Алиса очень болтливая.

m-malva
AndreyZak
Сообщения: 24
Зарегистрирован: Пт окт 16, 2015 8:47 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Sonos подключение

Сообщение AndreyZak » Пт ноя 20, 2015 10:27 pm

А доступ будет?
Аватара пользователя
m-malva
Сообщения: 291
Зарегистрирован: Чт фев 26, 2015 1:38 am
Откуда: Санкт-Петербург
Благодарил (а): 16 раз
Поблагодарили: 66 раз
Контактная информация:

Re: Sonos подключение

Сообщение m-malva » Чт дек 17, 2015 10:53 am

да по всякому, но 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);
}
Ответить