Демонстрация МДМ через Яндекс станцию мини

Объявления о поиске исполнителя для оказание услуг и/или создания продукта

Модератор: immortal

Ответить
Аватара пользователя
Djeday999
Сообщения: 21
Зарегистрирован: Сб май 29, 2021 3:04 pm
Откуда: Екатеринбург
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Демонстрация МДМ через Яндекс станцию мини

Сообщение Djeday999 » Пт июн 04, 2021 7:30 am

Приветствую!
Необходимо научить Алису (через Яндекс станцию мини) проговаривать свои умения в умном доме. Раньше были DemoSay, но они почему-то я так понял отвалились. Задавались вопросы по этому поводу, но ответов никто не дал. Пробовал сам (программист из меня никудышный) что-то состряпать (через Say), но Алиса не проговаривает предложения до конца и сразу болтает следующую строку. Пробовал вставлять sleep - ей пофиг.
Мне хотя бы пару строк, чтоб сказала какая погода на улице и о том, что умеет включать лампочку в коридоре.
homester
Сообщения: 180
Зарегистрирован: Вт дек 24, 2019 2:09 pm
Благодарил (а): 87 раз
Поблагодарили: 30 раз

Re: Демонстрация МДМ через Яндекс станцию мини

Сообщение homester » Пт июн 04, 2021 10:50 am

Djeday999 писал(а):
Пт июн 04, 2021 7:30 am
Раньше были DemoSay, но они почему-то я так понял отвалились.
Примерно с полгода-год назад я занимался этим вопросом. Алиса "уходила в зацикливание" и повторяла первый 'DemoSay. Причину нашел в "sapi.js". Что я исправлял, уже и не помню, т.к. сервер у меня на Малинке, а ноут с Win был в резерве, в общем похерил я этот резерв :( но в архивах можно порыться.

п.с.
С колонкой, я думаю, другие проблемы будут.
Raspberry Pi3 B+, v4.44, внешняя з/к
Аватара пользователя
Djeday999
Сообщения: 21
Зарегистрирован: Сб май 29, 2021 3:04 pm
Откуда: Екатеринбург
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: Демонстрация МДМ через Яндекс станцию мини

Сообщение Djeday999 » Пт июн 04, 2021 11:22 am

homester писал(а):
Пт июн 04, 2021 10:50 am
Djeday999 писал(а):
Пт июн 04, 2021 7:30 am
Раньше были DemoSay, но они почему-то я так понял отвалились.
Примерно с полгода-год назад я занимался этим вопросом. Алиса "уходила в зацикливание" и повторяла первый 'DemoSay. Причину нашел в "sapi.js". Что я исправлял, уже и не помню, т.к. сервер у меня на Малинке, а ноут с Win был в резерве, в общем похерил я этот резерв :( но в архивах можно порыться.

п.с.
С колонкой, я думаю, другие проблемы будут.
Поищите пожалуйста. Уж очень хочется перед гостями козырнуть.
homester
Сообщения: 180
Зарегистрирован: Вт дек 24, 2019 2:09 pm
Благодарил (а): 87 раз
Поблагодарили: 30 раз

Re: Демонстрация МДМ через Яндекс станцию мини

Сообщение homester » Пт июн 04, 2021 11:45 am

Уточняю: у меня Алиса на сервере, на Win надо установить "голос"
файл sapi.js сохранить.
Код заменить на этот:

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

if (WScript.Arguments.length == 0) {
    WScript.Quit();
}
var fnMD5 = '';
if (WScript.Arguments.Named.Exists("md5"))
    fnMD5 = WScript.Arguments.Named("md5");
var text = new Array();
for (var i=0; i<WScript.Arguments.Unnamed.Count; i++)
    text.push(WScript.Arguments.Unnamed(i));
var fso = new ActiveXObject("Scripting.FileSystemObject");
var scriptPath = fso.GetFile(WScript.ScriptFullName).ParentFolder;
strWavFileName = scriptPath+'/../cms/cached/voice/sapi_'+fnMD5+'.wav';
strMp3FileName = scriptPath+'/../cms/cached/voice/sapi_'+fnMD5+'.mp3';
var wShell = WScript.CreateObject("Wscript.Shell");
//if (!fso.FileExists(strMp3FileName)) {//no cached file
    var sv = WScript.CreateObject("SAPI.SpVoice");
    var oFilestream = WScript.CreateObject("SAPI.SpFileStream");
    sv.WaitUntilDone(-1);    // Don't be loud
    //save to wav
    oFilestream.Open(strWavFileName, 3, false);
    sv.AudioOutputStream = oFilestream;
    sv.speak(text.join(' '),0);
    oFilestream.close();
    //convert wav to mp3
    var strCommand = scriptPath+"/lame.exe -V0 "+strWavFileName+" "+strMp3FileName;
    wShell.run(strCommand, 0, true); //WaitUntilDone
    //delete wav
    if(fso.FileExists(strWavFileName)){
        fso.DeleteFile(strWavFileName,true);
    }
//}
//play mp3
var strCommand = scriptPath+"/madplay.exe \"" + strMp3FileName+"\"";
wShell.run(strCommand, 0, true);
Повторюсь, с колонкой будут другие проблемы.

Гуру прошу не пинать, я не программист, просто решал свои проблемы ...
За это сообщение автора homester поблагодарил:
Djeday999 (Пт июн 04, 2021 1:10 pm)
Рейтинг: 1.18%
Raspberry Pi3 B+, v4.44, внешняя з/к
Аватара пользователя
xor
Сообщения: 1767
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 217 раз
Поблагодарили: 531 раз

Re: Демонстрация МДМ через Яндекс станцию мини

Сообщение xor » Пт июн 04, 2021 8:01 pm

Я.колонка произносит фразы не длиннее 100 символов. от этого и пляшите. это ограничение, вроде, уже встроено в я.девайсы, а я раньше функцию написал, которая режет фразу на предложения. но и там надо было с паузами между предложениями играть

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

//Скажем через Ирбис с учётом ограничения в 100 символов
function say_irbis($phrase)
{
	if($phrase == '') return 0;
	    $phrase = str_replace(array('(', ')'), ' ', $phrase);
        $phrase = preg_replace('/<.+?>/u', '', $phrase);
        $phrase = preg_replace('/\s+/u', ' ', $phrase);
	if(mb_strlen($phrase,'UTF-8')>=100){ //если фраза > 100 букв, поделим на предложения
	  $phs = explode('.',$phrase);
	  foreach($phs as $ph){ //переберем предложения
	    if(mb_strlen($ph,'UTF-8')<100){
           //debmes($ph);
	       callAPI('/api/module/yadevices','GET',array('station'=>1,'say'=>$ph));
	    }else{
	       $ph = mb_strimwidth($ph, 0,96, "..."); //не получилось( обрежем
	       callAPI('/api/module/yadevices','GET',array('station'=>1,'say'=>$ph));
	    }
	   sleep(4);// на всякий случай
	  }
	}else{ //скажем, как есть
	  callAPI('/api/module/yadevices','GET',array('station'=>1,'say'=>$phrase));
	} 
return 1;
}
За это сообщение автора xor поблагодарили (всего 2):
SmoKE_xDDD (Пт июн 04, 2021 9:35 pm) • Djeday999 (Сб июн 05, 2021 12:59 pm)
Рейтинг: 2.35%
Аватара пользователя
Djeday999
Сообщения: 21
Зарегистрирован: Сб май 29, 2021 3:04 pm
Откуда: Екатеринбург
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: Демонстрация МДМ через Яндекс станцию мини

Сообщение Djeday999 » Ср июн 09, 2021 6:08 pm

Алиска в Я.Колонке мне кажется через чур умная. Через эту команду

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

callAPI('/api/module/yadevices','GET',array('station'=>1,'say'=>'Я знаю, какая температура и влажность сейчас на улице.'));
она говорит не это, а реальную погоду за бортом. При создании демонстрации много чего она еще не могла сказать точно. Например свое имя :shock: .
Аватара пользователя
xor
Сообщения: 1767
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 217 раз
Поблагодарили: 531 раз

Re: Демонстрация МДМ через Яндекс станцию мини

Сообщение xor » Ср июн 09, 2021 10:23 pm

Djeday999 писал(а):
Ср июн 09, 2021 6:08 pm
Алиска в Я.Колонке мне кажется через чур умная. Через эту команду

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

callAPI('/api/module/yadevices','GET',array('station'=>1,'say'=>'Я знаю, какая температура и влажность сейчас на улице.'));
она говорит не это, а реальную погоду за бортом. При создании демонстрации много чего она еще не могла сказать точно. Например свое имя :shock: .
не знаю, у меня четко различает и say, и command. Именно во втором случае она реальную погоду читает
Ответить