[Приложение] Tell.exe
Добавлено: Сб авг 23, 2014 4:06 pm
Проект закрыт. Есть новая разработка. Программа 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 больше не понадобится.
Первый запуск программы должен быть без параметров командной строки. Прога запустится как сервер приема сообщений. Сообщения ей нужно передавать запуская второй экземпляр с нужными параметрами командной строки. Второй экземпляр передаст сообщение первому и сразу закроется. Это позволяет вообще не тормозить циклы МД дожидаясь завершения синтеза или распознавания речи, на что уходит продолжительное время. Но при этом создается живая очередь из разных задач.
Для связи теперь можно использовать обработчик команд SAY() и PlaySound() в настройках МДКоманда на начало распознавание речи может быть отправлена из кода любого метода МД. А ответ придет в чат по средствам command.php?qry=Ответ. Для организации простых команд типа «Скажи привет», «Сколько время», «Ёлочка гори» и т.п. этого вполне достаточно. А вот для всего остального, где будут сложные условия надо изучать Шаблоны поведения. В программе есть кнопка «Слушать». Сделана для теста, но с ее помощью, например, можно спросить «Сколько время».
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()
В коде шаблонов поведения, там, где после вопроса Алисы нужно продолжить диалог, в конце надо указать
Про баланс напишу потом. Возможно будет обновление
Читает этот текст
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());
скрин настройкиПоказать
код настройкиПоказать
Before SAY (code):
After SAY (code):
After PlaySound (code):
Before PlaySound (code):
При этом Нужно создать новое свойство ThisComputer.SoundProgram и присвоить ему значение пути к программе C:\_majordomo\apps\tell\tell.exe, которая будет обрабатывать все перехваченные команды на чтение текста и проигрывание звуковых файлов.
Код: Выделить всё
global $ignoreVoice; $ignoreVoice=1;
Код: Выделить всё
if ($level >= (int)getGlobal('minMsgLevel')) { safe_exec(gg('ThisComputer.SoundProgram').' '.$ph, 1, $level); }
Код: Выделить всё
safe_exec(getGlobal('ThisComputer.SoundProgram').' '.$filename);
Код: Выделить всё
global $ignoreVoice; $ignoreSound=1;