Программа является обработчиком событий журнала пилота игры Elite: Dangerous. Она автоматически отслеживает изменения в последнем файле журнала и обрабатывает события в нем, в соответствии с файлом конфигурации (config\config.xml)
- Проигрывать звуковые файлы с синхронном и асинхронном режимах. Останавливать проигрывание в асинхронном режиме.
- Проговаривать текст из игры и фразы, определенные пользователем.
- Изменять голос произношения, его громкость и скорость.
- В соответствии с параметрами события, принимать то или другое решение.
- Случайным образом принимать то или другое решение.
- Разворачиваем архив из https://yadi.sk/d/_eCcY7lRy883R в папку на компьютере.
- Качаем и устанавливаем синтезаторы голосов http://www.programs74.ru/rhvoice.html (устанавливаем саму программу, языки русский и английский и, затем, сами русские/английские голоса).
- Копируем содержимое папки appdata в %APPDATA% на компьютере (обычно это С:\Users\<USER>\AppData\Roaming\). Это позволит немного поиграться с синтезируемой речью. Более подробную информацию можно найти тут: https://github.com/Olga-Yakovleva/RHVoice/wiki/Configuration-file-%28Russian%29
- Запускаем программу EliteVoice.exe. Обработка началась. (Программу, без зазрения совести, можно запускать/останавливать в любой момент)
Элемент | Атрибуты | Описание |
---|---|---|
Configuration | Корневой элемент конфигурации | |
Init | Секция инициализации программы | |
Replace | match - регулярное выражение для замены текста replace - заменяющая строка source - регулярное выражение определения параметра события target - имя параметра события, которому будет присвоено результат замены ignorecase[true|false] - регистронезависимая замена |
Глобальная замена/добавления параметра события и/или замена произносимого текста |
Event | name - имя события | Секция события в игре. Все дочерние команды выполняются при возникновении данного события. |
Play | name - имя проигрывателя file - имя звукового файла volume[0..100] - уровень громкости async[true|false] - асинхронное воспроизведение |
Проиграть звуковой файл |
Stop | name - имя проигрывателя fade - время затухания в миллисекундах |
Остановить проигрыватель звукового файла. Если параметр name отсутствует, то останавливаются все проигрыватели. |
TextToSpeech | voice - имя голоса озвучки volume[0..100] - уровень громкости rate[-10..10] - скорость произношения |
Установить параметры произношения текста для дочерних элементов или глобально. |
Text | select - название параметра события | Произнести текст из параметра события или взять его из содержимого элемента. |
Pause | value - время остановки в миллисекундах | Приостановить выполнение команд на value миллисекунд. |
Randomize | Выбрать одну из дочерних команд случайным образом. | |
Block | priority[1..] - приоритет выбора блока, чем выше, тем больше вероятность | Блок команд, для элемента Randomize |
Switch | select - название параметра события | Выбор параметра для условия выбора в дочерних элементах Case/Default |
Case | match|imatch - соответствует регулярному выражению equal|iequal - полное соответствие |
Проверка условия значения параметра, заданного элементом Switch. Префикс i у атрибута означает, что сравнение будет регистронезависимым. |
Default | Условие по умолчанию в блоке Switch. Обязательно должен быть последним элементом. |
Выполнить блок команд, при возникновении события SupercruiseEntry (вход суперкруиз):
<Event name="SupercruiseEntry">
...
</Event>
Установить глобально голос "Anna" с самым быстрым произношением и половиной громкости. Сказать фразу. Переключить на голос "Irina" и среднюю скорость. Сказать фразу. И снова голосом "Anna" сказать фразу. Паузы между произношениями будут составлять 500 миллисекунд.
<TextToSpeech voice="Anna" volume="50" rate="10"/>
<Text>Привет люди! Говорит Анна.</Text>
<Pause value="500"/>
<TextToSpeech voice="Irina" rate="0">
<Text>Ирина вмешивается в процесс</Text>
</TextToSpeech>
<Pause value="500"/>
<Text>А теперь снова будет говорить Анна.</Text>
Произнести случайным образом одну из 3х фраз. Вероятность произношения первой фразы - 20%, второй - 50%, третьей - 30%
<Randomize>
<Block priority="2">
<Text>Первая фраза</Text>
</Block>
<Block priority="5">
<Text>Вторая фраза</Text>
</Block>
<Block priority="3">
<Text>Третья фраза</Text>
</Block>
</Randomize>
Проиграть звуковой файл на громкости 20%. После его завершения произнести фразу.
<Play file="sound\music.mp3" volume="20"/>
<Text>Музыка кончилась</Text>
Начать проигрывание звукового файла на громкости 50%. Через 10 секунд произнести фразу и в течении 5 секунд остановить проигрывание.
<Play name="player1" file="sound\music.mp3" volume="50" async="true"/>
<Pause value="10000"/>
<Text>Сейчас музыка начнет заканчиваться</Text>
<Stop name="player1" fade="5000"/>
Проверить от кого пришло сообщение в игре и соответственно выбрать, значение какого параметра использовать для произношения сообщения.
<Switch select="Channel">
<Case imatch="(player|wing)">
<Text select="Message"/>
</Case>
<Default>
<Text select="Message_Localised"/>
</Default>
</Switch>
Секция инициализации. Глобально заменять "мама" на "папа". Заменять "Euryale" на "Эвриала", если источником является параметр "StarSystem".
<Init>
<Replace match="мама" replace="папа"/>
<Replace source="StarSystem" match="Euryale" replace="Эвриала"/>
...
</Init>
-
Чтобы понять, что RHVoice с вашими голосами подключился, можно посмотреть в дебаг выводе, какие голоса подключены в системе. У меня лично такие:
Found voices:
Anna
Alan
Aleksandr
Aleksandr+Alan
Microsoft Anna - English (United States)
CLB
Elena
Elena+CLB
Irina
SLT -
В дебаг выводе можно увидеть, какие события обрабатываются, а какие нет. И соответственно написать/изменить из обработчики.