### Инструкция по работе с VOCK

#### Назначение

Приложение предназначено прежде всего для облегчения игры в VR, когда нет возможности 
перенести все необходимые клавиши на РУД/РУС или доп. приблуды,
отсутствие видимого/тактильного доступа к клавишам в центре клавиатуры (в очках как бы) 
или есть необходимость ведения "быстрого и аутентичного" радиообмена и т.д.

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

#### Пресет

Пресет - это структурированный в формате json файл, содержащий список фраз и назначенные им клавиши. 
Пресет объединен некой логикой, т.е. может использоваться для отдельного модуля или содержать какие-то общие команды. 
Кол-во фраз в пресете не ограничено.

В папке "Preset" есть 2 готовых файла в качестве примера.

Пресет делится на блоки фраз инициализации, а блоки на отдельные команды. 
Фраза инициализации — это ключевое слово, после распознавания которого будут 
прослушиваться слова для сопоставления с командой.

> Пример
```
ведомый (фраза инициализации)
    возврат на точку (фраза команды) -> (действие, ввод с клавиатуры)
```


##### Структура пресета

Пресет хранится в формате JSON


> Структура пресета
```json

{
    "name": "строка",
    "culture": "строка",
    "comment": "строка",
    "blocks": [
		{
			"init": "строка",
			"comment": "строка",
			"phrases": [
				{
					"phrase": "строка",
					"keys": "строка"
					"comment": "строка"
				}
			]
		}
	]
}

```


> Пример
```json
{
	# Название пресета, отображается в списке  
	"name": "Su25T RU",
	# Текущая локализация из пакета Microsoft Server Speech Recognition Language - TELE 
	# (ru-RU) (en-US)
	"culture": "ru-RU",
	# Комментарий для текущего пресета, опционально
	"comment": "Пример для модуля Su25T",
	# Блоки активационных фраз
	# Кол-во не ограничено
	"blocks": [
		{
			# Первый блок

			# Фраза активации текущего блока
			"init": "радио",
			# Комментарий для текущей блока команд, опционально
			"comment": "Блок работы с меню радиопереговоров по цифрам с клавиатуры",
			# Список команд для текущего блока
			# Кол-во не ограничено
			"phrases": [
				{
					# Фраза команды для текущей команды
					# Полная фраза "радио меню"
					"phrase": "меню",
					# Код клавиши виртуальной клавиатуры: клавиша, сочетание клавиш, или последовательнось клавиш и сочетаний
					# В данном примере [Нажать клувишу '\|']
					# Полный список в файле VirtualKeyCode.txt
					"keys": "OEM_5",
					# Комментарий для текущей команды, опционально
					"comment": "Открывает меню радиопереговоров"
				}        
			]
		},
		{
			# Второй блок

			"init": "автопилот",
			"comment": "Работа с органами самолета - автопилот",
			"phrases": [
				{
					# Полная фраза "автопилот выключить"
					"phrase": "выключить",
					# В данном примере нажимаются клавиши [Левый Alt] и ['`~']
					"keys": "LMENU+OEM_3"
				},
				{
					# Полная фраза "автопилот маршрут"
					"phrase": "маршрут",
					# В данном примере нажимаются клавиши [Левый Alt] и [6 верхняя]
					"keys": "LMENU+VK_6"
				}
			]
		}
	]
}
```

#### Список доступных кодов клавиш

Полный список в файле VirtualKeyCode.md


#### Интерфейс

 Порядок запуска пресета

* Открыть программу 
* Выбрать нужный пресет 
* Двойной клик по строке или нажать кнопку Start.

Добавить или удалить из списка новый пресет можно кнопками "+" или "-".
Удаление производится только из списка, физически файл не удаляется.


#### Log

В лог пишутся ошибки программы.

А также вероятность совпадения с ключевыми фразами и командами.
Чем ближе к 1 тем больше вероятность. Активация происходит если распознаны 
фраза целиком.


```
Speech Detected: audio pos 00:04:14.6300000
Speech Hypothesized: звену (0,001003457)
Speech Hypothesized: азимут (0,001050366)
Speech Hypothesized: второй маршрут (0,586903)
	Speech Recognized:
второй маршрут (0,6634256)
	Alternate: второй маршрут (0,6634256)
	Word: второй (0,001025501)

Speech Detected: audio pos 00:04:25.5100000
Speech Hypothesized: рп ближайший (0,3445387)
Speech Hypothesized: второй (0,01025144)
Speech Hypothesized: второй маршрут (0,6766325)
	Speech Recognized:
второй маршрут (0,7109138)
	Alternate: второй маршрут (0,7109138)
	Word: второй (0,462153)
	Word: маршрут (0,8249291)
command:OEM_5, F2, F3, F3
```

В первом варианте было сказано что-то вроде "втрй мшр". 
И гипотетически из всех фраз именно 
второй маршрут (0,586903) более всех подходил. 
Но слово Word: второй (0,001025501) имеет малую вероятность,
а маршрут не распознался.

Второй вариант было более-менее четко сказано. Команда выполнилась.
 


