[Приложение] Sound Direct Manager

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

BET
Сообщения: 17
Зарегистрирован: Сб сен 26, 2015 6:03 pm
Благодарил (а): 17 раз
Поблагодарили: 0

Re: Sound Direct Manager

Сообщение BET » Чт сен 01, 2016 7:00 pm

Здравствуйте, помогите пожалуйста новичку.
Настроил SDM как написано в шапке. подключил микрофон к компу. К компьютеру подключены колонки в два выхода (канала). От одного канала хочу протянуть колонку в зал. микрофон тоже протянул в зал.
Проблема такая не могу вывести звук через SDM на третий канал (что то туплю с кодом sayHook).
Кто нибудь подскажите пример.

Заранее благодарен.
redmax144
Сообщения: 44
Зарегистрирован: Чт янв 28, 2016 8:18 pm
Благодарил (а): 13 раз
Поблагодарили: 5 раз

Re: Sound Direct Manager

Сообщение redmax144 » Вт сен 27, 2016 6:51 pm

Bagir писал(а): С музыкой тоже решим. Там всё сляпано на скорую руку и конечно рассадник багов.
Уважаемый Bagir, получилось ли у вас поработать над программой? Может быть есть успехи с музыкой или радио, я рад помочь, чем смогу, какие-нибудь тесты и прочее:)

BET писал(а):Кто нибудь подскажите пример.
Одно время у меня было вот так, вид скрипта SayHook:
СпойлерПоказать

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

/* Хук на функцию say() */
$level=$params['level'];
$ph=$params['ph'];
$id=$params['id'];

$atr=''; // параметры

switch ($level) {
case -1: // ничего не делать. Сообщение будет написано только в чате
 return;
 break;
 
case 0: // общие не тревожные сообщения ночью переадресуются на указанный канал с пониженной громкостью 
 if (gg('NightMode.status')){ $atr='-outputchannel:3 -volumemessage:40 ';}
 break;
  
case 1: // сообщения в комнату
 if (gg('NightMode.status')){ $atr='-outputchannel:3 -volumemessage:40 ';}
  else {$atr='-outputchannel:3 ';}
 break;

case 2: // сообщения в кухню
 if (gg('NightMode.status')){ $atr='-outputchannel:3 -volumemessage:40 ';}
  else {$atr='-outputchannel:4 ';}
 break;

case 3: // сообщения в ванну
 if (gg('NightMode.status')){ $atr='-outputchannel:3 -volumemessage:40 ';}
  else {$atr='-outputchannel:7 ';}
 break;
  
case 4: // сообщения в зал
 if (gg('NightMode.status')){ $atr='-outputchannel:3 -volumemessage:40 ';}
  else {$atr='-outputchannel:8 ';}
 break;
  
// case strlen($level)==1:
 // одна цифра это номер канала
// $atr='-outputchannel:'.$level.' ';
// break;

default:
 // ($level>=20) будет рассмотрен в модуле пуш сообщений. цифры 0-9 зарезервированы для групп
  
 // громкость на максимум для тревожных сообщений. цифры 0-9 могут быть использованы для включения крикуна на время в секундах
 if ($level>=30) { $atr='-volumemessage:100 '; }

 // отправка СМС сообщений можно сделать тут, пока нет отдельного модуля, следящего за уровнем $level
 // вторую цифру $level можно использовать для указания группы телефонных номеров
 if ($level>=40) { $atr.='-volumemaster:100 '; /* общую громкость тоже на максимум */ }
} 


// ******* Отправка задания принимающей программе *******
// *** Вариант передачи данных через TCP порт
// Ждать ответа от sdm не больше 1 секунды
$ctx = stream_context_create(array('http'=>array('timeout'=>1) ) ); 
// Отправка принимающей программе
$ans = trim(file_get_contents('http://'.gg('SoundServer').'/'.$atr.urlencode($ph), 0, $ctx));
// Зарегистрировать ошибку, если ответ не получен
if ($ans!="ok") { registerError('sdm', 'No confirmation from the program'); } 
Сейчас думаю поставить в каждой комнате по терминалу со статическим ip, таким образом, если с терминалов будет запрос, в MDM вернётся уникальный для каждого терминала идентификатор (или проще - пользователь), тогда Алиса будет знать, куда отправить ответ на сообщение. Можно использовать пример скрипта vazv71. Только изменить его для варианта по TCP порту, которым я пользуюсь:
СпойлерПоказать

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

/* Хук на функцию say() */
$level=$params['level'];
$ph=$params['ph'];

$atr=''; // параметры

switch ($level) {
case -1: // ничего не делать. Сообщение будет написано только в чате
return;
break;

case 0: // общие не тревожные сообщения ночью переадресуются на указанный канал с пониженной громкостью
if (gg('NightMode.status')){ $atr='-outputchannel:0 -volumemessage:30 ';}
break;

default:

if ($level>=1)
{
if (context_getuser()==1) $nowuser='admin';
if (context_getuser()==5) $nowuser='Luba';
if (context_getuser()==6) $nowuser='Sonya';

$atr=' -outputchannel:'.gg($nowuser.'.SoundCanal');
$atr.=" "; //этот пробел нужен для того, чтобы номер канала не сливался с сообщением. Кустарно, но работает.
}

}


// ******* Отправка задания принимающей программе *******
// *** Вариант передачи данных через командную строку
// Помните, что первый экземпляр sdm, который станет сервером приема сообщений, вы должны запустить сами!

safe_exec(gg('SoundProgram').' '.$atr.' '.$ph); 
ANDrey68
Сообщения: 1
Зарегистрирован: Сб окт 15, 2016 9:37 am
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Sound Direct Manager

Сообщение ANDrey68 » Вт окт 18, 2016 9:13 pm

Здравствуйте, установил SDM на Win 7 x64.
Все работает, но есть маленькое пожелание, если можно было прописать кнопку "Record" на любую из кнопок клавиатуры, а еще лучше прописать в SDM.ini с возможностью настройки.
И еще подскажите, в МD установлен движок Татьяна, а в SDM выбирается только Microsoft Anna - English (United States). Спасибо.
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Sound Direct Manager

Сообщение Bagir » Пн фев 06, 2017 9:30 pm

Всем привет. Прошу меня простить за столь долгое отсутствие. Я снова с вами! Проект SDM не забыт, и в ближайшее время вернуть к разработке. Но пару дней придется потратить на прочтение форума, новых сообщений и ЛС. Обязательно отвечу на все вопросы с момента как меня тут не было.
Andreyv писал(а):а можно ли для голосового управления прикрутить несколько микрофонов расположенных в разных комнатах
Можно, но как уже писали, работать будет не интересно. Сейчас мультирум получится если только система будет знать с какого микрофона пришла команда. На данный момент SDM слушает только один микрофон, который подключён к звуковой карте. У меня сейчас в домашней сети постоянно трудятся два системных блока. На одном сервер и терминал МД, а на другом (в гараже) просто терминал. Плюсом ко всему еще три планшета, но сейчас не об этом. Так вот, на обоих ПК установлен SDM. В итоге я получил 12 каналов вывода звука и два микрофона. Дальше систему не развивал, но планы конечно огромные :)
C_3AXAPOB писал(а):будет ли SDM работать с bluetooth колонками?
Сейчас SDM работает со звуковой картой, которая определяется в Windows. На данный момент карту можно выбрать любую, но работа с двумя и более картами не поддерживается. В будущем я хотел это добавить. Я уже пробовал делать это без оформления, и все получилось. Просто пока что не было такой необходимости.
ANDrey68 писал(а):есть маленькое пожелание, если можно было прописать кнопку "Record" на любую из кнопок клавиатуры, а еще лучше прописать в SDM.ini
Через пару дней вернусь к работе над SDM и сделаю. Сейчас подобное можно сделать только отправив GET запрос на порт, который слушает программа, или запуск копии SDM с параметром командной строки. Пока не будет найдет способ оффлайн распознавания ключевого слова, все диалоги может начинать только Алиса. Так что, наверное, если хочется использовать костыль и уже начать, то правильнее будет организовать внешнее событие (например нажатие кнопки на пульте), которое будет обработано логикой МД, а уже потом МД направит SDM команду начать запись
ANDrey68 писал(а):И еще подскажите, в МD установлен движок Татьяна, а в SDM выбирается только Microsoft Anna - English (United States). Спасибо.
Странно, не могу прокомментировать. У меня тоже установлен движок Татьяна и Алёна. SDM видит их нормально. Попробуйте обратиться к движку их других программ. Например читалок книг.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Sound Direct Manager

Сообщение Amarok » Вт фев 07, 2017 3:18 pm

Переехал я с Вин10 на Вин7 и случилось странное: прога запускается, но при попытке произнести что-либо вываливается с сообщением "Run-Time Error '429': ActiveX component can't create object". Уже весь гугл облазил - не победил ошибку. Что делать?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Sound Direct Manager

Сообщение Bagir » Вт фев 07, 2017 10:55 pm

Решим, отписался в ЛС. Попробуем найти причину отключением части функций или удалением части кода для теста.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Sound Direct Manager

Сообщение Bagir » Сб фев 11, 2017 12:55 am

Я думаю, пора многое переделать. В системе появились новые функции sayTo и sayReply. Наверное следует убрать связующий сценарий и добавить отдельный модуль.
В итоге я не хочу делать какой то аналог штатным функциям, и не заменять имеющиеся инструменты, а просто добавить дополнительные возможности.
То что я сейчас сделал с параметром $level, запихав туда и признак отправки смс, и канал звуковой карты, это конечно неправильно. С появлением sayTo надо всё переделать.

Рассмотрим ситуацию: В доме есть комната, в которой есть колонка, подключенная к одному из каналов звуковой карты, но в этой комнате нет, и не будет своего терминала. У комнаты есть имя, например room1. Нужно подписаться на событие SAYTO, и если в настройках модуля есть указания для room1, отправить эту задачу туда. Таким образом не нарушится работа штатной функции, но расширятся её возможности. А если в $destination будет имя существующего терминала, а в модуле не будет указаний, то функция SAYTO должна отработать штатно, отправив задачу на терминал. Таким образом у функции SAYTO появляется дополнительная возможность отправлять сообщения на разные каналы звуковой карты.

Так же можно подписаться на событие и старой функции SAY. У неё нет параметра $destination, и сообщения будут звучать во всех колонках. В настройки модуля добавил опции приглушения звука ночью, и его увеличение для важных (критичных) сообщений. Ещё есть опция перевода всех ночных некритичных сообщений на выбранный канал звуковой карты. Вообщем всё что было и ранее, только в новой красивой шкурке.

Параметр $level при этом остается штатным, и должен работать как обычно. Но можно расширить функционал:
-1 Только написать в чате
0 Обычные сообщения. Ночью отключаются или перенаправляются на выбранный канал.
1 Звучат всегда как обычные сообщения.
2 Звучат всегда + Push или SMS уведомления на телефон.
3 Тревожные сообщения с повышенной громкостью + Push или SMS.
4 тоже + кратковременное включение крикуна

Далее в модуле для имени комнаты из $destination должны быть указания как и куда отправить сообщение. Например как то так:
Имя Kitchen сервер localhost звуковая карта 1 канал 2
Имя Livingroom сервер localhost звуковая карта 1 канал 3
Имя Mansarda сервер localhost звуковая карта 2 канал 1
Имя Garage сервер 192.168.1.123 звуковая карта 1 канал 1


Добавил возможность указывать несколько каналов для одного значения $destination. Причем сообщения могу отправляться сразу на несколько компьютеров с SDM на борту. Это может быть полезным, например если дома колонки в комнатах подключены к звуковой карте одного сервера, а колонки в гараже и мастерской подключены к другому. Или же другой сервер стоит вообще где то далеко и держит с локальной сетью связь через VPN. У меня именно такая ситуация дом-работа. Вот что на данный момент получилось:
Изображение

Пишите свои мысли и идеи.
За это сообщение автора Bagir поблагодарил:
Amarok (Сб фев 11, 2017 7:59 am)
Рейтинг: 1.16%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Sound Direct Manager

Сообщение Bagir » Вс фев 12, 2017 5:42 pm

Ну чтож, нужен один доброволец для тестирования, с уже установленной и работающей SDM. В личке расскажу как поставить и заменить старый скрипт на новый модуль. А потом уже напишу инструкцию, и выложу в первом топике.
SDM может работать не обязательно на том же компе с МД, на любом компьютере под Windows в локальной сети. Теоретически даже и не в локальной.
Пишите тут или в ЛС.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Sound Direct Manager

Сообщение Amarok » Вс фев 12, 2017 5:54 pm

а сдм оживить?)
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Sound Direct Manager

Сообщение Bagir » Вс фев 12, 2017 6:08 pm

Я не забыл :) Просто пару вечеров потратил на изучение как писать модули для МД. Это мой первенец. К коду SDM скоро вернуть. Наверное завтра. Я просто порядком его уже забыл. Давно там ничего не делал. Надо будет немного вспомнить. К тому же там есть недоделка по установке громкости на калане.
А сейчас, для теста молуля, нужен доброволец с уже работающей системой. Или если есть вариант, запустить SDM на другом компе в локальной сети.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить