Страница 1 из 5

[Приложение] Tell.exe

Добавлено: Сб авг 23, 2014 4:06 pm
Bagir
Проект закрыт. Есть новая разработка. Программа Sound Direct Manager Добро пожаловать!

1. Очередь.
Все задания должны вставать с очередь и выполняться по порядку. Нужно это чтобы звуки не накладывались на слова, а распознавание речи не начиналось пока Алиса не договорит. Сейчас нормально ловится окончание проигрывания звуков и конец записи речи для распознавания. Пока что не могу только отловить конец синтеза речи.
2. Синтез речи.
Пробовал с разными движками. Вроде все гладко. Татьяна и Алёна работают хорошо. Есть выбор диктора из списка. Но этот модуль надо будет полностью переписывать. В существующем варианте я не могу отловить, когда диктор закончит говорить, а это требуется для очереди.
3. Проигрывание wav и mp3.
Окончание проигрывания ловлю у всех. Тут все нормально.
4. Распознавание речи.
Работает через Гугл. Отдельное обсуждение последнего обновления начитается тут http://smartliving.ru/forum/viewtopic.p ... 108#p17108
5. Мультирум.
На основе микшера каналов. Увы, пока только Лево/Право. Модуль тоже буду переписывать и потом выложу с примерами.
6. Выбор звуковой карты.
Тут пока что все печально. Сделал только для wav файлов. Конечно, без всего остального это бесполезно, но начало положено.

Программа не требует установки. Просто скопируйте её например в папку C:\_majordomo\apps\
Файл voice_recognition.php пока нужен для распознавания речи. Его надо скопировать в корневую папку МД где лежат файлы index.php и config.php. В оригинале это папка htdocs. ВАЖНО! Надо изменить в файле voice_recognition.php путь к файлу с записанной речью. Строка
$file_to_upload = array('myfile'=>'@'.'C:\_majordomo\apps\Tell\current.flac');

При первой записи голоса файл current.flac будет создан в каталоге программы Tell. Куда скопируйте программу, тот путь и надо указать в файле voice_recognition.php. В будущем, я надеюсь, получится перетащить весь код в программу, и файл voice_recognition.php больше не понадобится.

Первый запуск программы должен быть без параметров командной строки. Прога запустится как сервер приема сообщений. Сообщения ей нужно передавать запуская второй экземпляр с нужными параметрами командной строки. Второй экземпляр передаст сообщение первому и сразу закроется. Это позволяет вообще не тормозить циклы МД дожидаясь завершения синтеза или распознавания речи, на что уходит продолжительное время. Но при этом создается живая очередь из разных задач.
Параметры командной строкиПоказать
tell.exe Читаем этот текст
Читает этот текст :)

tell.exe dingdong.mp3
Проигрывает файл dingdong.mp3, который должен лежать в папке с программой

tell.exe c:\windows\media\notify.wav
Проигрывает файл notify.wav по указанному пути

tell.exe -volumelevel:32767
Соответствует 50% громкости звука. Для максимума можно использовать -volumelevel:M

tell.exe -recognizeid:0
Начинает запись и распознавание с последующей передачей в МД с добавлением параметров user_id и confidence = проценту вероятности.
Если при запуске tell.exe -recognizeid:0 был указан 0, то параметр user_id не будет передан, и сообщение будет передано от имени текущего пользователя. Если была указана цифра, отличная от нуля, то будет передан user_id = этой цифре. Это нужно если программа обрабатывает сообщения из разных комнат. Тогда текст ответа будет передан от имени пользователя с этим id. Получить id пользователя в коде МД можно с помощью context_getuser()
В коде шаблонов поведения, там, где после вопроса Алисы нужно продолжить диалог, в конце надо указать

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

safe_exec(getGlobal('ThisComputer.SoundProgram').' -recognizeid:'.context_getuser());
Про баланс напишу потом. Возможно будет обновление
Для связи теперь можно использовать обработчик команд SAY() и PlaySound() в настройках МД
скрин настройкиПоказать
Изображение
код настройкиПоказать
Before SAY (code):

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

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

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

if ($level >= (int)getGlobal('minMsgLevel')) { safe_exec(gg('ThisComputer.SoundProgram').' '.$ph, 1, $level); }
After PlaySound (code):

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

safe_exec(getGlobal('ThisComputer.SoundProgram').' '.$filename);
Before PlaySound (code):

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

global $ignoreVoice; $ignoreSound=1;
При этом Нужно создать новое свойство ThisComputer.SoundProgram и присвоить ему значение пути к программе C:\_majordomo\apps\tell\tell.exe, которая будет обрабатывать все перехваченные команды на чтение текста и проигрывание звуковых файлов.
Команда на начало распознавание речи может быть отправлена из кода любого метода МД. А ответ придет в чат по средствам command.php?qry=Ответ. Для организации простых команд типа «Скажи привет», «Сколько время», «Ёлочка гори» и т.п. этого вполне достаточно. А вот для всего остального, где будут сложные условия надо изучать Шаблоны поведения. В программе есть кнопка «Слушать». Сделана для теста, но с ее помощью, например, можно спросить «Сколько время».

Re: Программа для чтения текста и проигрывания файлов

Добавлено: Сб авг 23, 2014 6:24 pm
Bagir
Выложил новую версию. Переписана полностью. Добавлен баланс лево/право Теперь работает в асинхронном режиме и сама строит очередь заданий. Это позволило моментально брать новые задания, даже если прога еще не закончила чего то читать. Архив с исходным кодом пока удрал, т.к. часто его правлю. Если кому будет интересно, выложу с последними изменениями.

Re: Программа для чтения текста и проигрывания файлов

Добавлено: Пн ноя 03, 2014 9:54 am
erandess
bagir, если есть обновления программы, пожалста выкладывайте.

Re: Программа для чтения текста и проигрывания файлов

Добавлено: Пн ноя 03, 2014 12:05 pm
Bagir
Есть, и много. А вчера прикрутил распознавание речи от гугла. Да и как бы работает )) Сегодня все соберу в кучу и напишу комментарии. Если все успею, выложу с небольшим примером работы в МД. Так что сегодня-завтра выложу обновление.
Еще поменял свою вторую старенькую 2х канальную звуковую карту на 8и канальную. Так то в будущем будет делать мультирум не только лево/право.

Re: Программа для чтения текста и проигрывания файлов

Добавлено: Вт ноя 04, 2014 9:46 pm
Bagir
Как все же прикольно отдавать команды голосом )) Это надо просто попробовать! Я так заигрался, то даже прогу не дописал. Пока что микрофон у меня только в одной комнате. Но однозначно буду двигать это направление.
С программой дела пока что не очень. Переписывал мультирум и выкопал новые баги. Я не могу отловить событие завершения чтения текста. Вижу только событие завершения проигрывания звуковых файлов. Поэтому текст из очереди никогда не наложиться на проигрываемый файл, а вот файл наложится на текст.
И еще, я не могу в нужный момент возвращать движки микшера на место, потому что не вижу окончание чтения текста. В общем надо переписывать speach полностью на API без использования сторонней библиотеки, чтобы получить над этим процессом полный контроль. А пока что с мультирумом будет не так все гладко. Заплатку сделал. дергаю движки микшера при начале нового сообщения или файла. Но если первое сообщения было в конкретную комнату, а за ним сразу идет второе, будет косяк. Микшер передвинется раньше чем дочитается первое сообщение.
С микшером тоже трудности. Я не могу подобраться к дорожкам Rear, Center и Side. Двигать Общим звуком, Wave и даже Front у меня получилось. Хотя не факт, как это все будет например на W7. Я пробовал только на XP.
Сегодня доделаю распознавание речи, скомпилю exe и завтра выложу. Если найдутся желающие помочь с кодом, выложу исходники. Написано на VB6. Если есть жалеющие написать все с нуля на другом языка по образцу, пишите, будет делать вместе.

Re: Программа для чтения текста и проигрывания файлов

Добавлено: Вт ноя 04, 2014 10:28 pm
Vit
Bagir опиши пример управления системой голосом на компе..что поставить и как настроить...

Re: Программа для чтения текста и проигрывания файлов

Добавлено: Вт ноя 04, 2014 10:54 pm
Bagir
Пока что у меня нет вариантов с оффлайн распознаванием ключевого слова. Так что работает только вариант, при котором система сама начинает диалог. Первое что пришло в голову - это событие, когда ранее в комнате никого не было и кто то пришел. В комнате, где было замечено движение и есть микрофон (а у меня пока только одна, где сервер), звучит приветствие и вопрос хочу ли я чего нибудь. Причем звучит именно в этой комнате, и для этого нужен мультирум, который я все равно прикручу к этой проге. Пока что он работает только на 2 канала. Далее МД отдает указания моей проге начать запись. Прога записывает, распознает через гугл, и возвращает в МД текст. Дальше выполняется действие по шаблону. Я пробовал кучу разных простых команд, например "Включи свет", "Кто приходил", "Отчет о событиях" и т.д. Тут ограничивает только воображение и возможности железа твоей системы.
Но главное вот в чем: Сам алгоритм обмена данными между МД и прогой распознавалкой. Тут надо еще хорошенько подумать, как все устроить. Нельзя, чтобы МД долго ждал ответа т.к. процесс не быстрый, да и ответа может вообще не быть. Так что затормозить код в ожидании ответа не получится. Пока что я остановился на варианте с id, который МД передает распознавалке. Этот id в случае успешного распознавания прога и вернет МД вместе с текстом.
Получается, что МД по какому то событию, озадачит распознавалку, передав ей id этого события, и на этом как бы все. А уже потом, распознавалка может быть передаст МД команду с указанным ранее id, которая будет обработана например в методе commandReceived, только туда надо добавить код, понимающий id.
Вообще пока что у самого жужжащий улей в голове. Все это надо перевязать с идеей мультирума, удаленных микрофонов, и распознавание ключевого слова в будущем. Да, и надо учесть тот факт, что после начала диалога в одной комнате и еще до его завершения, диалог может начаться в другой комнате другим человеком, и система должна уже будет работать на два фронта.
Завтра выложу простейший пример. Будем пробовать. Нужно многое обсудить.

Re: Программа для чтения текста и проигрывания файлов

Добавлено: Ср ноя 05, 2014 1:01 pm
sergejey
Насчёт ID события -- стоит посмотреть в сторону модуля "Шаблоны поведения", там есть такое понятие как Контекст, т.е. МД может передать программе какой-то контекст и программа после распознавания вернёт фразу с ID контекста, а МД уже будет смотреть, как её обработать исходя из того же контекста.

Re: Программа для чтения текста и проигрывания файлов

Добавлено: Ср ноя 05, 2014 9:51 pm
Bagir
Звучит очень впечатляюще! Буду изучать Шаблоны. Я как то еще ими не пользовался. А дело интересное и многообещающее.

Re: Программа читает текст, проигрывает звук и распознает ре

Добавлено: Ср янв 07, 2015 4:26 am
Bagir
Обновил прогу и описание в начале темы. Завтра продолжу.