Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
EliteVoice
.gitattributes
.gitignore
EliteVoice.sln
README.md

README.md

ED scoring events

Предназначение:

Программа является обработчиком событий журнала пилота игры Elite: Dangerous. Она автоматически отслеживает изменения в последнем файле журнала и обрабатывает события в нем, в соответствии с файлом конфигурации (config\config.xml)

Что может делать программа, реагируя на события:
  1. Проигрывать звуковые файлы с синхронном и асинхронном режимах. Останавливать проигрывание в асинхронном режиме.
  2. Проговаривать текст из игры и фразы, определенные пользователем.
  3. Изменять голос произношения, его громкость и скорость.
  4. В соответствии с параметрами события, принимать то или другое решение.
  5. Случайным образом принимать то или другое решение.

Установка программы:

  1. Разворачиваем архив из https://yadi.sk/d/_eCcY7lRy883R в папку на компьютере.
  2. Качаем и устанавливаем синтезаторы голосов http://www.programs74.ru/rhvoice.html (устанавливаем саму программу, языки русский и английский и, затем, сами русские/английские голоса).
  3. Копируем содержимое папки appdata в %APPDATA% на компьютере (обычно это С:\Users\<USER>\AppData\Roaming\). Это позволит немного поиграться с синтезируемой речью. Более подробную информацию можно найти тут: https://github.com/Olga-Yakovleva/RHVoice/wiki/Configuration-file-%28Russian%29
  4. Запускаем программу EliteVoice.exe. Обработка началась. (Программу, без зазрения совести, можно запускать/останавливать в любой момент)

Синтаксис конфигурации (config\config.xml):

Элемент Атрибуты Описание
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>

Замечания:

  1. Чтобы понять, что RHVoice с вашими голосами подключился, можно посмотреть в дебаг выводе, какие голоса подключены в системе. У меня лично такие:

    Found voices:
    Anna
    Alan
    Aleksandr
    Aleksandr+Alan
    Microsoft Anna - English (United States)
    CLB
    Elena
    Elena+CLB
    Irina
    SLT

  2. В дебаг выводе можно увидеть, какие события обрабатываются, а какие нет. И соответственно написать/изменить из обработчики.

  3. Об ошибках сообщайте мне в discord (ник haps) или на github

You can’t perform that action at this time.