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

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

Модератор: immortal

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

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

Сообщение Bagir » Вс апр 05, 2015 1:44 pm

Изображение
Программа читает текст и проигрывает звуковые файлы. Строит очередь сообщений и может направлять звук на любой указанный канал выбранной звуковой карты. Добавлена возможность распознавания речи через сервис Google. Добавлен режим проигрывания mp3 треков. Может крутить разные песни на разных каналах карты одновременно. Есть пример для реализации тревожных треков на случай аварии.
Для чтения текста, нужно чтобы в системе были установлены звуковые движки. Например Алена или Татьяна.
Большая просьба отписываться на каких версиях Windows запускали. Уже проверено на
  • WinXP 32
  • Win7 32
  • Win7 64
  • Win10.1 32 (планшет)

Что умеет:
  • Читает текст по средствам установленных в системе звуковых движков.
  • Выбор диктора, который будет читать текст.
  • Проигрывает короткие звуковые файлы ставя их в очередь сообщений.
  • Выбор звуковой карты.
  • Выбор любого канала звуковой карты. Самый простой и надежный мультирум!
  • Очередь сообщений. Звук больше не накладывается на текст, и наоборот.
  • Одновременное проигрывание разных сообщений в разных каналах (комнатах).
  • Регулировка общей громкости.
  • Указания собственной громкости любой задачи.
  • Передача GET команд по TCP и UDP порту.
  • Передача заданий через командную строку.
  • Запись звука и распознавание его через сервис Google.
  • Определение тишины при записи.
  • Воспроизведение mp3 файлов на указанном канале.
  • Одновременное воспроизведение mp3 файлов на любых каналах.
  • Управление громкостью mp3 задач.
  • Приглушение фоновой музыки в момент звучания уведомлений.
  • Отчеты серверу о событиях, к примеру завершение mp3 файла.

В плане:
  • Интернет радио на любом канале звуковой карты.
  • Поддержка работы с несколькими звуковыми картами на одном сервере. (Планируется)

Возможные дополнения при помощи энтузиастов:
  • Создание многоканального плеера на сцене для управления фоновой музыкой.

Баги и костыли:
  • При клике по иконке в систрее теряется один следующий клик по форме. (на WinXP)
  • Стрим звука при чтении текста во временный файл. Проблем не дост…Показать
    Задание чтения текста в sdm состоит из двух шагов. 1. Чтение по средствам объекта SpeechLib.SpVoice и проигрывание через библиотеку bass.dll Оказалось не так просто сдружить эти компоненты. SpeechLib умеет не только выводить звук сразу на звуковую карту, но так же стримить в файл или память. bass.dll умеет читать из файла или из памяти и дает большие возможности в работе со звуком. Но вот вариант с памятью у меня пока не прокатил. Поэтому обмен идет через временные файлы. При работе проблем не доставляет, но было бы интереснее сделать обмет через адрес в памяти. Так что к этой теме я еще вернуть.
  • Используется сторонняя утилита для перекодирования WAV формата в…Показать
    Для распознавания текста используется сервис Google. Ему нужно предоставить FLAC файл определённого формата. Библиотека bass.dll не может записывать файлы сразу в формате FLAC. Но есть дополнение bassflac.dll с описанием процедур. Но пока что у меня не получается правильно описать саму структуру формата FLAC. Приходится сохранять во временный WAV файл, перекодировать его сторонней программой, а потом снова считывать его. В данный момент ищется решение этой задачи.

Установка:
  • Распакуйте архив с программой куда хотите. У себя я размещаю такие дополнительные программы в папке \Server\apps\
  • установите недостающие контролы, если какого нибудь их них у вас…Показать
    Установщика у программы нет. Поэтому требуется самому добавить нужные компоненты, которых может не быть на вашем компьютере. Это зависит от многих факторов. Начиная от обновлений Windows и заканчивая разными программами, которые могли притащить с собой нужные компоненты.
    Если SDM после запуска жалуется на отсутствие чего либо, просто скачайте нужный компонент из вложения, и скопируйте его в папку
    Windows/System32 для 32 разрядных систем
    или
    Windows/SysWOW64 для 64 разрядных.

    После этого его нужно зарегистрировать компонент в системе. Находясь в папке Windows/System32 или Windows/SysWOW64 выполните команду: regsvr32 MSWINSCK.OCX где MSWINSCK.OCX имя нужного компонента.
    Следует обратить внимание, что в Win7 для регистрации компонентов потребуются права администратора. Если у вас есть менеджер файлов наподобие TotalCmd, то запустите его с правами администратора, и выполните команду в нем. Сделать это надо только один раз.
    И еще момент. После включения прослушивания порта на программу зарычит брандмауэр. Прога стала сетевой, так что потребуется добавить ее в исключения. Если вы не планируйте получать сообщения через Интернет, то можно предоставить права только на локальную сеть. Но для работы распознавания речи через сервис Google, будет нужен доступ в Интернет.
  • Запустите SDM.exe
  • Посмотрите список своих доступных Голосовых движков, и выберите нужный.
  • Посмотрите список Устройства вывода звука, выберите нужное или оставьте вариант по умолчанию.
  • Посмотрите список Устройства ввода звука, выберите нужное, если планируйте использовать распознавание речи.
  • Если изменяли настройки, их можно сохранить через меню.
  • Введите какой нибудь текст в поле Новая задача и нажмите enter. Там уже есть несколько примеров, которые можно сразу попробовать.
  • Для детальной настройки посмотрите и отредактируйте ini файл.

Обновления:
Версия программы SDM до запятой меняется при больших дополнениях, а так же если нужны изменения в ini файле. При этом лучше взять ini файл из архива, и внести туда свои изменения. При остальных мелких обновлениях ini файл оставляйте свой.
Версия модуля для МД до запятой меняется при необходимости внесения изменений в базу данных. После копирования файлов модуля его нужно переустановить в системе МД и восстановить свои настройки. База маршрутов при этом не стирается.


Параметры:
-volumeMaster:100Показать
На форме есть ползунок общей громкости. Он связан с системным микшером. На примере WinfowsXP это будет ползунок "Звук" в микшере. Значение этого параметра больше не участвует в связке Алиса + SDM. Оставлено для возможности изменения громкости микшера с помощью команды. Мы можем сами крутить глобальный микшер, регулируя уровни звука для каждой комнаты, а это может быть очень полезным. При первоначальной настройке рекомендую убавить ручку громкости усилителя, затем поднять на максимум все регуляторы Windows микшера. Начать читать текст, и прибавляя громкость усилителя добиться комфортного звучания. Имейте ввиду, громкость тревожных сообщений будет несколько выше обычных.
-volumeLevel:80Показать
Уровень общей громкости для всех задач. Может быть изменен параметром -volumeLevel: для сообщений и музыки на указанном канале в связке с -outputchannel: Изменение общей громкости для сообщений на указанном канале будет запомнено программой. Рекомендуется выставить значение средней комфортной громкости, чтобы в процессе работы было возможно как убавить так и прибавить.
-volumeMessage:70Показать
Уровень громкости обычных текстовых сообщений и звуковых уведомлений в процентах от общего уровня volumeLevel. Может быть изменен параметром -volumeMessage: Указанное значение будет применено только к переданной с ним задаче. Рекомендуется не указывать значение выше 70 чтобы громкость тревожных сообщений была значительно выше обычных. Параметр, позволяющий приглушать ночные сообщения и давать максимальную громкость тревожным.
-volumeMusic:65Показать
Уровень громкости музыки в процентах от общего уровня громкости volumeLevel. Следует учесть указанную ранее громкость для обычных сообщений, и не указывать значение больше, чтобы музыка не звучала громче. Может быть изменен параметром -volumeMusic: Указанное значение будет применено только к переданной с ним задаче. А именно к переданному mp3 треку или Интернет радио.
-outputChannel:1Показать
отправить сообщение на первый канал звуковой карты. Например для восьми канальной звуковой карты значение может быть от 1 до 8. Так же добавлены значения парных каналов. Это 12, 34, 56, 78
-streamHandle:*Показать
Чтобы управлять музыкальными задачами, которые в данный момент воспроизводятся на разных каналах, нужно указать streamHandle этой задачи. Узнать его можно в момент создания этой задачи. streamHandle будет в ответе на GET запрос. Его надо запомнить, чтобы в последствии можно было управлять этой задачей. В качестве примера будет создан элемент для сцен в виде многоканального плеера.
Пример получения через браузер:
Изображение
-music:playПоказать
Сообщает, что переданное имя файла это фоновая музыка, а не звуковое сообщение в очередь.
-music:pauseПоказать
Поставить на паузу
-music:stopПоказать
Остановить воспроизведение трека и исключить его из списка
-recognizeПоказать
Начать сессию записи и распознавания голоса. После распознавания текст будет отправлен Алисе
Примеры команд:
Параметры можно комбинировать, чтобы получить нужную команду. Чтобы лучше понимать как это делается, надо знать, что при разборе строки, вначале рассматриваются все параметры, а потом, что осталось, рассматривается как звуковой файл, иначе просто текст для чтения.
Команды управления громкостью можно добавлять в любую задачу.
Проверка синтеза речиПоказать
просто прочитать этот текст
-outputchannel:1 Проверка каналаПоказать
Чтение текста в первом канале звуковой карты
-volumemessage:50 Громкость этого сообщения уменьшена на половинуПоказать
Уменьшает громкость только этого сообщения. Может быть использовано для отправки важных или ночных сообщений.
dingdong.mp3Показать
звуковое уведомление (не музыка). Если имя файла без пути, то он должен быть в каталоге с программой.
-outputchannel:2 -music:play song.mp3Показать
Создать задачу проигрывания музыки на втором канале. При успехе в ответ получим streamHandle
-streamhandle:-9999999999 -music:playПоказать
Возобновить задачу проигрывания музыки. При этом указан streamHandle полученный в момент создания этой задачи.
-streamhandle:-9999999999 -music:stopПоказать
Отменить задачу проигрывания музыки. При этом указан streamHandle полученный в момент создания этой задачи.
-recognize Я вас слушаюПоказать
Сказать "Я вас слушаю" и начать записывать звук для распознавания.

Варианты обмена данными:
  • Сервер на TCP порту. Можно отправить GET запрос с указанием задачи в url, и получить ответ о выполнении.
  • Сервер на UDP порту. Можно отправить команду, но протокол не подразумевает подтверждения о получении.
  • Через командную строку вторыми экземплярами программы, которые передают задачу первому.
  • Сервер приема сообщений по средствам Win функции SendMessage.
ПодробнееПоказать
1. TCP порт. Пожалуй самый удобный и универсальный способ. К тому же позволит принимать задачи от удаленного сервера по сети. Для прослушивание TCP порта используется компонент MSWINSCK.OCX Но он есть не на всех машинах. Например на Win7 его скорее всего нет, если ранее не был добавлен и зарегистрирован какой нибудь другой программой. В будущем хочу написать на чистом win API, чтобы не разводить зоопарк. Но пока оставлю этот контрол.

2. UDP порт. Новое дополнение. В основном было задумано для временных терминалов, когда нет гарантии, что SDM на этой машине в данный момент работает. Отправка по UDP протоколу не подразумевает ответа от удаленного сервера. Соответственно не будет зарегистрирована ошибка при его недоступности. Но для временных терминалов нам это и нужно. Как бонус, UDP позволяет делать широковещательные рассылки. То есть одной командой мы может отправить сообщение сразу всем копиям SDM в локальной сети.

2. Командная строка. При загрузке сервера мы сразу запускаем sdm.exe, и программа становится сервером приема сообщений. То есть, она должна быть постоянно открыта. Второй запуск sdm.exe уже с параметрами командной строки, передаст их первому экземпляру, и сразу же закроется. Поэтому данный способ хорошо подходит для использования с МД функцией safe_exec. Но тут есть опасность. Если первый запуск sdm.exe мы не сделали сами, а это сделал МД, то этот первый экземпляр sdm.exe не закроется, а МД будет ждать его завершения. Так что обязательно нужно запускать первый экземпляр sdm.exe самому. Например повесить его в автозагрузку.
Для страховки предусмотрен механизм самоуничножения программы, если первый запуск был с параметрами командной строки.

3. Win функция SendMessage. Может пригодится для отправки задач из вашего приложения. sdm создает невидимое окно с именем Audica_Dummy_SDM и ловит все SendMessage на него, которые можно кинуть виндячей функцией Function SendMessage Lib "user32.dll".

Обратная связь с МД происходит вызовом сценария, метода или php файла, с передачей ответа в параметрах адреса url. Используется при распознавании текста, и отчетах о наступлении некоторых событий. Подробнее об этом в отдельной главе.

Связь с МД. Получение задач:
Сейчас взаимодействие Алисы с SDM сделано через отдельный модуль. Он еще в процессе теста, поэтому его нет в Маркете дополнений. Скачать и установить нужно самому как любой другой обычный модуль. Просто скопировать папки modules и templates в соответствующие папки системы. Затем либо перезапустить МД, либо зайти в Панель управления -> Система -> Модули Найти там sdm, зайти в него и нажать install module. Для дальнейшей настройки нужно читать комментарии в модуле. Они там есть у каждого пункта и не должны вызвать затруднений. Модуль подписывается на события штатных функций say() и sayTo(), не нарушая их работу. Другими словами, мы можем не обязательно использовать МД как основной транспорт сообщений. А так же в виде дополнения для перехвата сообщений, отправленные в конкретные комнаты, используя SDM вместе с другими вариантами доставки сообщений в МД.
немного историиПоказать
Ранее были способы в виде изменения кода функции say() и playsound(). Затем способ перехвата хуком на эти функции. Был связующий сценарий, который отправлял перехваченные данные в SDM по средствам командной строки, а потом уже и через TCP порт. Если Вы ранее пользовались этими способами, то пришло время удалить всё это. Старые свойства ThisComputer.SoundProgram и ThisComputer.SoundServer тоже более не нужны.
Хук на функцию say() больше не нужен. Заменен подпиской на событие SAY и SAYTO. Все настройки делаются в модуле. Код php для этого больше не требуется. Проверьте, кто ещё подписан у Вас на событие SAY, чтобы сообщения не обрабатывались одновременно разными модулями.

Чтобы получить задачи функции playsound(), пока что придется воспользоваться старым способом, и в настройках поставить хук. Когда у штатной функции playsound() появятся события, на которые можно будет подписаться, я добавлю это в модуль.
Панель управления -> Настройки -> Общие настройки -> Обработчики
After PlaySound (code):

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

include_once(DIR_MODULES.'sdm/sdm.class.php'); $dm=new sdm(); $dm->setTask($filename);
Before PlaySound (code):

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

global $ignoreSound; $ignoreSound=1;
Параметры для SDM можно передавать вместе с обычным текстом в функции say(); Например так:

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

say('-recognize Я вас слушаю'); 
Так же в модуле есть специальные функции для постановки различных задач. Например для работы с фоновой музыкой. Их использует многоканальный плеер, который представлен в виде элемента для сцены. Скоро мы разберём их подробно, чтобы можно было работать с фоновой музыкой из своего кода методов или сценариев.


Передача ответа в МД:
SDM был задуман просто как вспомогательная программа для построения очереди сообщений, получаемых от Алисы. Никакие самостоятельные решения программа принимать не будет. Вся логика условий и действий должны быть только у Алисы, а SDM просто инструмент для их выполнения. Поэтому я думаю, что нет никакой необходимости изобретать что то новое, а нужно пользоваться тем что есть. На данный момент необходимость послать Алисе ответ из SDM. Например после завершения распознавания речи или при завершении проигрывания mp3 файла.

У Алисы есть чат и Шаблоны поведения. И мы будем их использовать. По сути не должно быть разницы, сказали мы фразу, или написали её в чате МД. При распознавании речи SDM просто передаст текст в чат с Алисой. Но тут есть один важный момент. Алиса должна знать, кто передал этот текст. Какой именно User (комната например). Это будет нужно, когда мы начнём строить мультирум и говорить с Алисой из разных комнат, причем одновременно.

На данный момент уже реализованы несколько вариантов такой обратной связи. Почитать про значения параметров можно в ini файле.
Самый простой и универсальный вариант, это создать сценарий с именем sdmReceiver в МД и получать туда сообщения от SDM.

В продолжении этого поста я буду собирать в спойлерах различные варианты настроек и подробные объяснения функций программы.
Вложения
MD 3.1.zip
Модуль v3.1
(27.55 КБ) 152 скачивания
SDM 2.92.ZIP
Программа v2.92
(579.38 КБ) 159 скачиваний
SDM 2.24.ZIP
Программа v2.24 (старая версия)
(563.4 КБ) 475 скачиваний
MD 2.2.ZIP
Модуль v2.2 (старая версия)
(22.67 КБ) 415 скачиваний
MSCOMCTL.zip
контрол
(1.28 МБ) 482 скачивания
winhttp.zip
контрол
(346.62 КБ) 490 скачиваний
MSWINSCK.zip
контрол
(130.02 КБ) 486 скачиваний
MSINET.zip
контрол
(143.47 КБ) 514 скачиваний
COMDLG32.zip
контрол
(447.16 КБ) 480 скачиваний
Последний раз редактировалось Bagir Пн июн 01, 2020 8:03 pm, всего редактировалось 3 раза.
За это сообщение автора Bagir поблагодарили (всего 13):
triada13 (Вс апр 05, 2015 7:10 pm) • skysilver (Вс апр 05, 2015 10:08 pm) • sashmen (Ср июл 29, 2015 9:52 pm) • m-malva (Ср окт 07, 2015 11:41 am) • Amarok (Пт окт 16, 2015 6:50 am) • redmax144 (Чт янв 28, 2016 9:15 pm) • olehs (Пт апр 15, 2016 12:14 am) • lanket (Пт фев 24, 2017 3:26 pm) • landgraf (Ср мар 01, 2017 10:50 pm) • Logrus (Пн окт 16, 2017 4:51 pm) и ещё 3
Рейтинг: 15.12%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Sound Direct Manager

Сообщение Bagir » Вс апр 05, 2015 4:41 pm

Если сумели завести и прога заговорила из поля ввода новых задач, поздравляю. Вы получили свой Мультирум!
Вариант обмена данными теперь определён в виде модуля. В нем же можно настроить уровни громкости для ночных и тревожных сообщений. Переадресацию сообщений ночью на выбранный канал. Обо всём этом написано в самом модуле. Тут же будут примеры как работать с остальными функциями, и как справиться с возможными неполадками.

Правильная настройка ini файла и первые шаги:
Если вы только что поставили sdm, не пытайтесь включить сразу всё. Делайте это постепенно. Для начала просто надо освоить настройку модуля, чтение текста и воспроизведение звуковых уведомлений. Об этом всё сказано подробно в первом посте.
Затем можно попробовать распознавание речиПоказать
Для этого используется сервис Google. Чтобы получить к нему доступ, нужен ключ разработчика. В программе он есть, но рано или поздно его забанят. Так что для стабильной работы лучше получить свой. Как это сделать, мы уже не раз говорили ранее. Раскомментируйте строку googleKey="ВАШ_КЛЮЧ" и запишите в неё ваш ключ.
Затем надо указать, куда передавать распознанный текст. Варианта тут два. Либо сразу в файл command.php, либо в свой сценарий для предварительной обработки. Сделайте свой выбор и раскомментируйте нужную строку. Лично я передаю сразу в command.php
chatServer="http://localhost/command.php"
Учтите, что если sdm не на этом же сервере, то нужно указать ip адрес.
Теперь поговорим про фоновую музыкуПоказать
Сразу скажу, что sdm не умеет и не будет уметь играть плейлисты. Только отдельные mp3 треки. Но, при завершении проигрывания трека, создается событие, которое будет передано Алисе. При этом Алиса выдаст для sdm следующую задачу.
Давайте попробуем включить эту возможность. Задача у нас будет следующая. Получить от sdm событие о завершении воспроизведения mp3 трека. Словить событие можно как методом, так и просто сценарием. Мне больше нравится второй вариант. Раскомментируйте строку reportServer="http://localhost/objects/?script=sdmReceiver" и создайте новый сценарий с именем sdmReceiver

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

print_r( $_GET ) ) ;
debmes('sdmReceiver '.implode(' ', $_GET ) );
Теперь при завершении воспроизведения трека будет вызван этот сценарий. В параметрах будет стримхендл музыкальной задачи, которая закончилась. Тут же в коде можно сразу выдать следующий трек для воспроизведения на нужный канал. Как работать со стримхендл более подробно мы поговорим в отдельном посте. Забегая вперед скажу, что вероятно это будет многоканальный плеер в виде элемента для сцены. Но управлять музыкальными задачами вы сможете и из своего кода методов и сценариев.
Разберемся как же запустить музыку и управлять ей. Всем этим добром заведует функция setTask, которая находится в модуле sdm. Для доступа к функциям модуля, его надо включить. Пишем код

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

include_once(DIR_MODULES.'sdm/sdm.class.php');
$dm=new sdm();
Теперь можно отправить звуковую задачу

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

$sh = $dm->setTask('-music:play D:\Server\apps\SDM\song.mp3');
echo $sh;
-music:play указывает что это задача фоновой музыки а не звуковое уведомление.
В переменной $sh при успехе будет streamHandle:-2147483646. Хендл надо запомнить. С помощью него потом можно управлять задачей примерно так:

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

$dm->setTask('-music:stop -streamhandle:-2147483640');
$dm->setTask('-music:pause -streamhandle:-2147482598');
$dm->setTask('-music:play -streamhandle:-2147482598');
То есть при постановке трека на воспроизведение мы получаем хендл. Мы должны запомнить этот хендл, а так же название комнаты куда мы его отправили. И еще имя песни (имя файла). В итоге, когда мы поставим на воспроизведение сразу несколько треков в разных комнатах, у нас получится массив из хендл, имя комнаты (то что в sayTo указываем), название трека. Этот массив можно красиво представить в виде таблицы (списка) на сцене, добавить кнопки плей, стоп и т.д., и мы получим классный многоканальный плеер.
Одновременное чтение текста разными модулямиПоказать
Самое первое, это двойное звучание. Когда подписку на SAY обрабатывают сразу несколько разным модулей, и каждый читает одинаковый текст. Когда мы пишем в коде функцию say(), то при её выполнении создается событие, на которое могут быть подписаны разные модули, читающие текст по средствам разнообразных движков, или онлайн сервисов. Чтобы убедиться, что события передаются только модулю sdm, идём в Панель управления -> Настройки -> Общие настройки -> Обработчики и смотрим сто у нас в HOOK_EVENT_SAY: и HOOK_EVENT_SAYTO: Там должна быть запись {"sdm":{"priority":0,"filter":""}}. Если есть ещё кто то, то этот модуль тоже будет получать события и обрабатывать их. Убедитесь, что среди них нет второго модуля, который читает текст.
Громкость сообщений и зузыкиПоказать
На форме есть ползунок общей громкости. Он связан с системным микшером. На примере WinfowsXP это будет ползунок "Звук" в микшере. Значение этого параметра больше не участвует в связке Алиса + SDM. Я оставил этот ползунок и параметр для возможности изменения громкости микшера с помощью -volumemaster: Возможно кто то уже использует этот способ чтобы управлять общей громкостью системы. И действительно, если не ставить задачу разделения громкости ночных и тревожных сообщений, не добавлять фоновую музыку, то управление громкостью по средствам микреша весьма удобный и очень простой вариант.

Ползунок общей громкости главного микшера программа не трогает. Его можно задать для каждой звуковой карты индивидуально. Это поможет сбалансировать усилители, к которым подключены разные звуковые карты.
Балансировку каналов разных звуковых оповещателей так же можно провести с помощью встроенного микшера Windows. Программа не изменяет эти настройки.

Понятие громкости канала как такового в программе нет, и быть не может, т.к. на каждом канале одновременно могут звучать оповещения и играть фоновая музыка. Для работы с уровнем звука существуют три параметра, с помощью которых можно задать громкость разных задач.

[Global]
Уровень общей громкости для всех задач. Может быть изменен параметром -volumeLevel: для сообщений и музыки на указанном канале. Изменение общей громкости для сообщений на указанном канале будет запомнено программой. Рекомендуется выставить значение средней комфортной громкости, чтобы в процессе работы было возможно как убавить так и прибавить. По умолчанию
volumeLevel=80

Затем уровень громкости обычных текстовых сообщений и звуковых уведомлений задаётся свой в процентах от общего уровня volumeLevel. Он может быть изменен параметром -volumeMessage: Указанное значение будет применено только к переданной с ним задаче. Рекомендуется не указывать значение выше 70 чтобы громкость тревожных сообщений была значительно выше обычных.
volumeMessage=70

Уровень громкости музыки в процентах от общего уровня громкости volumeLevel. Следует учесть указанную ранее громкость для обычных сообщений, и не указывать значение больше, чтобы музыка не звучала громче. Может быть изменен параметром -volumeMusic: Указанное значение будет применено только к переданной с ним задаче.
volumeMusic=65

Внимание! Важно: Если значения volumeMessage и volumeMusic не указаны, то они берутся из ini файла. Для ночных сообщений уровень может быть указан в модуле. Для тревожных сообщений уровень volumeMessage будет 100%

Когда sdm начинает что то проигрывать, то громкость для этой задачи будет рассчитана как volumeLevel*volumeMessage/100 и volumeLevel*volumeMusic/100 соответственно. Причем по задумке volumeLevel управляйте вы сами, а volumeMessage и volumeMusic задаются в ini файле и рассчитываются в модуле.
Это позволяет прибавить с помощью volumeLevel звук сообщений и фоновой музыки полностью сохранив все пропорции.
Коэффициент приглушения фоновой музыки во время звучания сообщений пока установлен как /5. Но может быть выведем в ini, если кто то захочет его изменить.
Способ инициализации звуковой картыПоказать
Немного о грустном, с чем я до сих пор не могу справиться. В программе используется замечательная библиотека bass.dll Но к сожалению её работа сильно отличается на WindowsXP и Win7+ При инициализации звуковой карты нужно выбрать способ.
1 - BASS_DEVICE_SPEAKERS; 2 - BASS_DEVICE_3D

BASS_DEVICE_SPEAKERS замечательно подходит для Windows XP. Общие сообщения (без указания номера канала) звучат как положено одновременно во всех каналах. Минимум трудностей с железом. Берет wav и mp3 файлы, и крутит их на любом канале.
BASS_DEVICE_3D вариант для Windows 7 и выше. Иначе общие сообщения будут звучать только в двух фронтальных колонках. Но при этом библиотека отказывается читать некоторые wav файлы на выбранном канале.

Тут возможно многое ещё будет зависеть от вашего железа. Но общая рекомендация такова. Если у вас WinXP, выбирайте BASS_DEVICE_SPEAKERS, а если Win7+, то BASS_DEVICE_3D с включенной опцией enable3D=1 Эта настройки для режима BASS_DEVICE_3D позволяет в Windows 7 общим сообщениям звучать во всех колонках, как это было в Windows XP. Но есть небольшие грабли. Громкость общих сообщений немного ниже, чем громкость сообщений для канала. В будущем я попробую компенсировать это коэффициентом.
Уровень важности сообщенийПоказать
Уровни тут каждый выбирает сам как хочет. Я лишь могу предложить свой выбор и немного рассказать об настройках модуля.
-1 Написать только в чате. Не говорить вообще.
0 Обычные. Ночью громкость может быть уменьшена, а сообщения переадресованы на ночной канал.
1 Тоже обычные сообщения. Но они не будут переадресованы ночью. Звучат во всех каналах.
2 Тоже самое что и 1, но тут мы можем, настроить отправку и на мобильный телефон.
3. Важные. Громкость их будет установлена 100%
4 Критические. Можно добавить код включения крикуна на несколько секунд.
Настройки модуля позволяют вам самим указать уровень для всех типов. А значит можно как сократить, так и расширить этот список.
За это сообщение автора Bagir поблагодарили (всего 4):
triada13 (Вс апр 05, 2015 7:09 pm) • kawkay (Сб май 16, 2015 9:23 pm) • Amarok (Пт апр 15, 2016 7:48 am) • landgraf (Чт апр 27, 2017 6:31 pm)
Рейтинг: 4.65%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Sound Direct Manager

Сообщение Bagir » Пн апр 06, 2015 10:34 am

Сегодня вечером будет обнова с tcp :!:
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: Sound Direct Manager

Сообщение Vit » Пн апр 06, 2015 11:36 am

Прога работает, сегодня попробую подцепить к мд по примеру. Спасибо bagir за подробный пример, ждём обнов.
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Sound Direct Manager

Сообщение Bagir » Вт апр 07, 2015 2:00 am

ver 1.3 господа удавы :D
и я позволил себе убрать слово beta

Ссылка на библиотеку bass.dll, если кто нужно. На этой странице можно сразу скачать архив с примерами.
Хорошая статья, по основам этой библиотеки.
За это сообщение автора Bagir поблагодарил:
triada13 (Вт апр 07, 2015 5:57 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 » Вт апр 07, 2015 1:21 pm

Что прикручиваем следующее? Распознавание речи или проигрывание фоновой музыки?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
triada13
Сообщения: 242
Зарегистрирован: Вт мар 11, 2014 8:36 pm
Откуда: Челябинск
Благодарил (а): 107 раз
Поблагодарили: 7 раз

Re: Sound Direct Manager

Сообщение triada13 » Вт апр 07, 2015 1:23 pm

Bagir писал(а):Что прикручиваем следующее? Распознавание речи или проигрывание фоновой музыки?
Распознование, не проигрывание. короче все, и то и то.))) :oops:
Majordomo на Orange Pi Zero.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Sound Direct Manager

Сообщение skysilver » Вт апр 07, 2015 2:01 pm

То же самое да под линукс бы... Цены бы не было! ;)
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Sound Direct Manager

Сообщение Bagir » Вт апр 07, 2015 2:15 pm

Да уж, мне даже самому нравится что получилось. А такое бывает совсем не часто :D Будем надеяться, то взяв все лучшее за идею из того что есть под винды, программисты смогут написать версию для Линукс. Мне браться бесполезно. Я даже не знаю, как Линукс выглядит :oops: Но библиотека bass.dll для него есть. Значит все реально.
За это сообщение автора Bagir поблагодарил:
vazv71 (Сб июн 18, 2016 1:23 pm)
Рейтинг: 1.16%
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Sound Direct Manager

Сообщение skysilver » Вт апр 07, 2015 2:30 pm

Ваше приложение на каком языке написано?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Ответить