Слова и Звуки

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

Модератор: immortal

Ответить
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Слова и Звуки

Сообщение Bagir » Ср дек 17, 2014 11:32 pm

Так получилось, что мне пришлось запустить МД на другом сервере и по другом дисковому пути. Да еще и потребовалось использовать другую звуковую карту для сообщений и звуков. После каждого обновления, я открывал файл-шпаргалку, и переписывал кучу кода. Но благодаря помощи Сергея, с путями на диске теперь вообще покончено. Ставьте МД куда хотите, заморочек не будет. И мой файл-шпаргалка сдулся до пары строк.
Теперь правлю только \lib\common.class.php для перехвата звука и сообщений. Конечно же это не трудно, но уж раз так все здорово получилось, то очень прошу вывести в настройки выбор программы для воспроизведения звуков и так же добавить возможность передавать текст другой программе на чтение.
Как я сделал сейчас:
Добавил новое свойство ThisComputer.SoundProgramPathName в котором лежит путь к сторонней программе, которая умеет воспроизводить звуки и читать текст. А в файле \lib\common.class.php для перехвата звуковых файлов я ищу

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

safe_exec(DOC_ROOT.'/rc/madplay.exe '.$filename, $exclusive, $priority); 
и заменяю на

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

safe_exec(getGlobal('ThisComputer.SoundProgramPathName').' '.$filename); 
Для перехвата текста примерно также. Ищу

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

safe_exec('cscript '.DOC_ROOT.'/rc/sapi.js '.$ph, 1, $level); 
и заменяю на

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

safe_exec(getGlobal('ThisComputer.SoundProgramPathName').' '.$ph); 
Хочу попросить в Общих настройках сделать третий выбор в пункте Use Google Text-to-Speech engine, чтобы можно было выбирать между Гуглом, локально установленным движком, или сторонней программой, путь к которой можно будет прописать самому. Также и со звуком. По умолчанию использовать madplay.exe, а если указали другой плеер, использовать его.
Просто я не сторонник изменять файлы МД. По возможности, систему нужно тестировать в ее первоначальном состоянии. Но php не задумал для работы со звуком и синтеза речи. Такие задачи проще передать другой отдельной программе. Но стандартные madplay.exe и Text-to-Speech мало чего позволяют. Взять тот же мультирум или выбор звуковой карты.
За это сообщение автора Bagir поблагодарил:
Amarok (Чт дек 18, 2014 12:19 pm)
Рейтинг: 1.16%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Слова и Звуки

Сообщение Bagir » Сб дек 20, 2014 12:02 am

Вообще конечно тут не все так гладко. А именно мультирум. При программировании действий в коде, когда нам надо отправить звук в нужную комнату, самый простой вариант это просто указать в команде say() номер этой комнаты.
А необходимость использования стороннего звукового приложения как раз и возникает в этом случае. Но сторонние приложения все разные. И весьма трудно предположить, в каком виде оно захочет получить эти параметры. Если пользуешь свое приложение, то конечно сделаешь так как хочется. Но с чужими плеерами такое не прокатит. Как сделать универсальный вариант передачи параметра комнаты для мультирума?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Слова и Звуки

Сообщение sergejey » Сб дек 20, 2014 12:57 am

Есть механизм хуков, там можно использовать вызов своей программы для речи, не меняя исходный код.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Слова и Звуки

Сообщение Bagir » Сб дек 20, 2014 1:07 am

Это?
Изображение
Немного бы больше информации как использовать. Я бы с удовольствием вообще отказался от изменений исходного кода. Практика показывает, что это не хорошо.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Слова и Звуки

Сообщение sergejey » Вс дек 21, 2014 1:10 pm

Bagir писал(а):Это?
Немного бы больше информации как использовать. Я бы с удовольствием вообще отказался от изменений исходного кода. Практика показывает, что это не хорошо.
Да, это.
Вот, например, что у меня прописано в before say:

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

setGlobal("LastWord",date('H:i')." ".$ph);global $ignorePushbullet;if (getGlobal('Serge.atHome')) $ignorePushbullet=1;runScript('musicSilent',array('ph'=>$ph,'level'=>$level)); 
Если по пунктам, то первая команда записывает в переменную последнюю фразу (использую на сцене)
Дальше устанавливается флаг $ignorePushbullet, чтобы не отсылать уведомления через pushbullet, если я дома (есть ещё флаги $ignoreVoice, $noPatternMode, $ignorePushover, $ignoreGrowl, $ignoreTwitter)
Дальше запускается сценарий, который приглушает музыку на время речи.

Там можно любой код использовать в принципе. Если в коде указать return; то стандартная обработка будет вообще отключена, но лучше через флаг $ignoreVoice её отключить, а свою программу запускать в after say, чтобы работали стандартные механизмы отправки уведомлений и обработчик шаблонов поведения.
За это сообщение автора sergejey поблагодарили (всего 2):
Bagir (Вс дек 21, 2014 3:23 pm) • TrDA (Сб фев 03, 2018 5:58 pm)
Рейтинг: 2.33%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Слова и Звуки

Сообщение Bagir » Вс дек 21, 2014 3:22 pm

ВОЛШЕБНО!
Меня просто смутило маленькое узкое окно для написания кода. Была такая мысль, что там можно просто писать код в одну строку, но вот чего то не попробовал. Да и не зная флагов это было бесполезно. С такими хуками конечно не нужно ничего выводить в настройки. Все можно сделать самому. Похоже скоро конец правке common.class.php после каждого обновления!
Добавь пожалуйста только такой же хук на function playSound() А то хук на синтез речи без звуковых оповещений бесполезен если нужно забрать себе весь звук.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Слова и Звуки

Сообщение Bagir » Вс дек 21, 2014 4:29 pm

Before SAY (code):

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

global $ignoreVoice; $ignoreVoice=1; 
After SAY (code):

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

safe_exec('D:\Server\apps\Tell\Tell.exe '.$ph, 1, $level); 
И не надо никаких дополнительных настроек и ковыряний функции say(). Все отлично работает! А ведь не раз смотрел на эти настройки :D

Серёж, плиззз! добавь еще
Before playSound (code):
After playSound (code):
по такому же алгоритму, чтобы вообще не ковырять common.class.php

Идея с Pushbullet тоже конечно понравилась. Записал себе в желания ))
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить