Программа читает текст и проигрывает звуковые файлы. Строит очередь сообщений и может направлять звук на любой указанный канал выбранной звуковой карты. Добавлена возможность распознавания речи через сервис 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 файл оставляйте свой.
Версия модуля для МД до запятой меняется при необходимости внесения изменений в базу данных. После копирования файлов модуля его нужно переустановить в системе МД и восстановить свои настройки. База маршрутов при этом не стирается.
Параметры:
Пример получения через браузер:
Параметры можно комбинировать, чтобы получить нужную команду. Чтобы лучше понимать как это делается, надо знать, что при разборе строки, вначале рассматриваются все параметры, а потом, что осталось, рассматривается как звуковой файл, иначе просто текст для чтения.
Команды управления громкостью можно добавлять в любую задачу.
Варианты обмена данными:
- Сервер на TCP порту. Можно отправить GET запрос с указанием задачи в url, и получить ответ о выполнении.
- Сервер на UDP порту. Можно отправить команду, но протокол не подразумевает подтверждения о получении.
- Через командную строку вторыми экземплярами программы, которые передают задачу первому.
- Сервер приема сообщений по средствам Win функции SendMessage.
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 вместе с другими вариантами доставки сообщений в МД.
Чтобы получить задачи функции playsound(), пока что придется воспользоваться старым способом, и в настройках поставить хук. Когда у штатной функции playsound() появятся события, на которые можно будет подписаться, я добавлю это в модуль.
Панель управления -> Настройки -> Общие настройки -> Обработчики
After PlaySound (code):
Код: Выделить всё
include_once(DIR_MODULES.'sdm/sdm.class.php'); $dm=new sdm(); $dm->setTask($filename);
Код: Выделить всё
global $ignoreSound; $ignoreSound=1;
Код: Выделить всё
say('-recognize Я вас слушаю');
Передача ответа в МД:
SDM был задуман просто как вспомогательная программа для построения очереди сообщений, получаемых от Алисы. Никакие самостоятельные решения программа принимать не будет. Вся логика условий и действий должны быть только у Алисы, а SDM просто инструмент для их выполнения. Поэтому я думаю, что нет никакой необходимости изобретать что то новое, а нужно пользоваться тем что есть. На данный момент необходимость послать Алисе ответ из SDM. Например после завершения распознавания речи или при завершении проигрывания mp3 файла.
У Алисы есть чат и Шаблоны поведения. И мы будем их использовать. По сути не должно быть разницы, сказали мы фразу, или написали её в чате МД. При распознавании речи SDM просто передаст текст в чат с Алисой. Но тут есть один важный момент. Алиса должна знать, кто передал этот текст. Какой именно User (комната например). Это будет нужно, когда мы начнём строить мультирум и говорить с Алисой из разных комнат, причем одновременно.
На данный момент уже реализованы несколько вариантов такой обратной связи. Почитать про значения параметров можно в ini файле.
Самый простой и универсальный вариант, это создать сценарий с именем sdmReceiver в МД и получать туда сообщения от SDM.
В продолжении этого поста я буду собирать в спойлерах различные варианты настроек и подробные объяснения функций программы.