XML Sound Server

Материал из База знаний
Перейти к: навигация, поиск

XML Sound Server (XSS) - Прибор для кастомной озвучки внтурикабинных звуков FS2004 (FS9).


Автор прибора: Игорь Бороздин (aka Bor)

Это гауга xss.gau, которая основываясь на значениях пользовательских XML переменных, запускает на проигрывание определяемые им звуки. Звук может звучать разово (как например щелчок тумблера, кнопки) или зациклено (как например звук гироскопа, инвертора). То есть, это прибор, который на установку определенной переменной XML проигрывает определенный, привязанный к этой переменной, звуковой файл. Количество проигрываемых файлов 128 (в новой версии - 256). Можно что-то вычислить в XML приборе, а потом по условию установить ту или иную звуковую переменную - соответственно звук проиграется. Работает через DirectSound, никаких FSSound.dll и FSUIPC не нужно. Позже (в версии 1.2.0) было добавлено условие проигрывания звука в зависимости от вида в симуляторе. Например, если смотреть снаружи (spot view), то звук гироскопов не нужен, и т.д.

Применение

Размещается как обычная гауга.

В файле Panel.cfg в секции [Window00] прописывается строка, например такая:

gaugeXX=xss!process,0,0,1,1, Aircraft\SCS_An-12\xss\xss.cfg

где:

  • XX (gaugeXX) - порядковый номер гауги (вместо XX пишем следующий по ходу номер, после последней гауги в секции [Window00]);
  • xss - сама гауга;
  • process - прибор в ней, реализующий логику сервера;
  • Aircraft\SCS_An-12\xss\xss.cfg - путь к директории со звуками и конфигурационному файлу.

Конфигурационный файл может иметь любое имя, все равно его имя указывается как параметр (это обыкновенный текстовый файл в кодировке CP1251 или Windows-1251. Впрочем и расширение у него может быть любым, так как имя файла полностью задается в файле Panel.cfg).

В конфигурационном файле:

[Options]

[Sounds]

// Галетник
ROTARY_SWITCH_SOUND
{
        SoundFile   = "Click.wav";
        Volume    = -1000;
        Reset      = true;
};

// Тумблер
TOGGLE_SWITCH_SOUND
{
        soundFile   = "Click2.wav";
        Volume    = -50;
        Reset      = true;
}

// Преобразователи
INVERTORS_SOUND
{
        SoundFile="test_system2.wav";
        Volume = -1000;
        Reset      = false;
}

// Гироскопы
GYROS_SOUND
{
        SoundFile = "carflt_gyro.wav";
        Volume   = 0;
        Reset     = false; 
}       

// звук крышки панелей ТГ-16 и запуска двигателей
APU_COVER_SOUND
{
        SoundFile = "small_cr.wav";
        Volume = -2000;
        Reset=true;
}

TG16_ROTOR_SOUND
{
        SoundFile = "tg16_mot.wav";
        Volume   = -300;
        Reset=false;
}

BAT_ON_SOUND
{
        SoundFile = "BAT_ON.WAV";
        Volume = 0;
        Reset = true;
        channel=0;
}

U20V_SOUND
{
        SoundFile = "U20VOLT.WAV";
        Volume = 0;
        Reset = true;
        channel=0;
}

U21V_SOUND
{
        SoundFile = "U21VOLT.WAV";
        Volume = 0;
        Reset = true;
        channel=0;
}

Секция [Options] не используется в ранних версиях XSS (до 1.2.0), в секции [Sounds] находятся описатели звуков. Каждый описатель начинается с тега звука, который определяет XML переменную в контексте симулятора. Затем, в фигурных скобках, перечисляются атрибуты:

  • SoundFile - определяет строку с именем WAV файла содержащего звук;
  • Volume - громкость в диапазоне от 0 до -(МИНУС!) 10000;
  • Reset - автосброс XML переменной; (в принципе, опция Reset лишняя, потому что зацикливание звука ядро сервера может определить (и определяет) автоматически по наличию в файле меток Sustaining Loop, и на основании этого принимать решение - один раз проигрывать звук или циклить его между метками, так что в новой версии (1.2.0) эта опция убрана)
  • channel - номер канала (очереди) звука.

Переменная с автосбросом предназначена для однократного проигрывания звука, такого, как например, щелчок тумблера или звуковое сообщение члена экипажа, достаточно выставить переменную в true, при проигрывании файла она сбросится в false автоматически и для следующего проигрывания ее вновь необходимо будет взвести.

Переменная без автосброса, проигрывает файл циклически до тех пор пока программист каким, либо способом не установит ее в false самостоятельно, таким образом, удобно озвучивать звуки гироскопов, инверторов, ВСУ, или сообщений речевых информаторов.

channel - канал, некторые звуки необходимо проигрывать последовательно. Например, штурман логически не может в одно и то же время произносить фразы (даже одну и ту же, и уж тем более разные). Для решения этой проблемы используем каналы (точнее очереди). Все звуки, сидящие на одном канале, будут проигрываться по очереди. То есть, можно включить несколько переменных сразу по одному каналу, но проиграются они один за одним, в той последовательностии, в какой указаны в конфигурационном файле. В конфигурационном файле есть такие звуки - BAT_ON_SOUND, U20V_SOUND и так далее. Эти звуки произносит бортинженер: "Самолет под ток включен, напряжение" (один звук), "20 вольт" (другой звук). Ну разумеется подобрать паузы нужно получше, это уже режиссирование озвучки.

Характерна следующая особенность проигрывания циклических звуков. В симуляторе существуют дефолтные звуки гироскопов, инверторов - они представляют собой WAV файл со специальными меткми зацикливания (так называемые Sustaining Loop, их видно и можно обработать в Sound Forge), находящимися на некотором расстоянии от начала и конца звука. Причем, звуковой участок между метками собран таким образом, что зацикливание происходит "гладко", без щелчков, что дает возможность зациклить его бесконечно. В то же время, начало звука представляет собой выход на режим, а конец - затухание звука. Например - выключение гироскопов. Зацикливание звука гаугой происходит автоматически, отдельным потоком (вот она! реализованная кастомно многопоточность в симуляторе). Если звук выключили сразу после включения (т.е. проигранный участок начального сегмента не дошел до первой метки зацикливания), то при выключении звука - остаток будет проигрыватся не от финальной метки зацикливания, а от конца звукового файла (отступив пропорционально проигранному началу). Это позволяет придать естественность звучанию, если мы только включили и тут же выключил звук - тогда не происходит неприятных скачков громкости. Это работает и в обратном порядке. То есть, выключили - звук стал спадать и тут же вновь включили - звук пойдет не с начала, не с нуля, а практически с установившегося по тональности участка звукового файла.

На параллельность проигрывания звуков не накладывается никаких ограничений. В проекте так озвучивается ВСУ - запускается звук турбины, потом параллельно звук зажигания, и крутятся вместе. При остановке выключается звук зажигания и турбины. Они отрабатываются независимо, согласно своим временным характеристикам определенным в звуковых файлах.

И теперь о работе с XML - ниже представлен пример кода для работы с тумблерами:

<Mouse>
<Area Right="48">
<Cursor Type="DownArrow" /> 
<Click>(L:DC_SW_POS, enum) 0 > if{ (L:DC_SW_POS, enum) -- (>L:DC_SW_POS, enum) 1 (>L:ROTARY_SWITCH_SOUND,bool) }</Click> 
</Area>
<Area Left="49">
<Cursor Type="UpArrow" /> 
<Click>(L:DC_SW_POS, enum) 9 < if{ (L:DC_SW_POS, enum) ++ (>L:DC_SW_POS, enum) 1 (>L:ROTARY_SWITCH_SOUND,bool) }</Click> 
</Area>
</Mouse>

Здесь при любом изменении положения переключателя, переменная ROTARY_SWITCH_SOUND устанавливается в истину (1). Заметили? В описании секции [Sounds] - это галетник. Переменная так и должна быть записана с префиксом L: и признаком bool без пробелов.

Еще пример:

<Gauge Name="APU_ON_BUS_SW" Version="1.0">
<Element>
<Select>
<Value>(L:APU_ON_BUS_SW,bool)</Value> 
<Case Value="0">
<Image Name="sw_d.bmp" ImageSizes="36,103,0,0" /> 
</Case>
<Case Value="1">
<Image Name="sw_u.bmp" ImageSizes="36,103,0,0" /> 
</Case>
</Select>
</Element>
<Mouse>
<Cursor Type="Hand" /> 
<Click>(L:APU_ON_BUS_SW,bool) ! (>L:APU_ON_BUS_SW,bool) 1 (>L:TOGGLE_SWITCH_SOUND,bool)</Click> 
</Mouse>
</Gauge>

Возможно более гибкое использование XSS из любого прибора, написанного на Си. Нужно только устанавливать эти переменные либо через FS API, либо с помощью библиотеки Алексея Литвинова (aka lial) - "NamedVar".

Ограничения: звуки нежатый WAV (возможно будут проигрываться и жатые звуки), каналов 32, звуков 256. При переключении видов в симуляторе, звуки не выключаются (до версии 1.2.0). Начиная с версии 1.2.0, поддерживается переключение видов.

Лог файл лежит в корне симулятора, называется: XMLSNDSVR.LOG. Лог файл создается гаугой автоматически, там прописывается процесс инициализации.

Выглядит примерно так:

.::XML SOUND SERVER(XSS)::.
Server started: 24.06.2007 Su 14:00:56.390
Module name: XSS gauge for MSFS9
Module version: 1.00, release 1, by 2007/06/14
Build: 003
Copyright (c) SCS, Igor Borozdin 2006,2007
============================================================
Module full path: "C:\Program Files\Microsoft Games\Microsoft Flight Simulator 9\AIRCRAFT\SCS_An-12\panel\xss.GAU"
Config parameter: "Aircraft\SCS_An-12\xss\xss.cfg"
============================================================
Open SOUND_SECTION_TAG
Open sound ROTARY_SWITCH_SOUND
Create sound success.
Create sound: ROTARY_SWITCH_SOUND sound_file: Click.wav volume: -1000  reset: 1
Open sound TOGGLE_SWITCH_SOUND
Create sound success.
Create sound: TOGGLE_SWITCH_SOUND sound_file: Click2.wav volume: -50  reset: 1
Open sound INVERTORS_SOUND
Create sound success.
Create sound: INVERTORS_SOUND sound_file: test_system2.wav volume: -1000  reset: 0
Open sound GYROS_SOUND
Create sound success.
Create sound: GYROS_SOUND sound_file: carflt_gyro.wav volume: 0  reset: 0
Open sound APU_COVER_SOUND
Create sound success.
Create sound: APU_COVER_SOUND sound_file: small_cr.wav volume: -2000  reset: 1
Open sound TG16_ROTOR_SOUND
Create sound success.
Create sound: TG16_ROTOR_SOUND sound_file: tg16_mot.wav volume: -300  reset: 0
Open sound TG16_COMBUST_SOUND
Create sound success.
Create sound: TG16_COMBUST_SOUND sound_file: tg16_act.wav volume: -100  reset: 0
Open sound BAT_ON_SOUND
Create sound success.
Create sound: BAT_ON_SOUND sound_file: BAT_ON.WAV volume: 0  reset: 1
Open sound U20V_SOUND
Create sound success.
Create sound: U20V_SOUND sound_file: U20VOLT.WAV volume: 0  reset: 1
Open sound U21V_SOUND
Create sound success.
Create sound: U21V_SOUND sound_file: U21VOLT.WAV volume: 0  reset: 1
Open sound U22V_SOUND
Create sound success.
Create sound: U22V_SOUND sound_file: U22VOLT.WAV volume: 0  reset: 1
Open sound U23V_SOUND
Create sound success.
Create sound: U23V_SOUND sound_file: U23VOLT.WAV volume: 0  reset: 1
Open sound U24V_SOUND
Create sound success.
Create sound: U24V_SOUND sound_file: U24VOLT.WAV volume: 0  reset: 1
Open sound U25V_SOUND
Create sound success.
Create sound: U25V_SOUND sound_file: U25VOLT.WAV volume: 0  reset: 1
Open sound U26V_SOUND
Create sound success.
Create sound: U26V_SOUND sound_file: U26VOLT.WAV volume: 0  reset: 1
Open sound U27V_SOUND
Create sound success.
Create sound: U27V_SOUND sound_file: U27VOLT.WAV volume: 0  reset: 1
Open sound U28V_SOUND
Create sound success.
Create sound: U28V_SOUND sound_file: U28VOLT.WAV volume: 0  reset: 1
Open sound U29V_SOUND
Create sound success.
Create sound: U29V_SOUND sound_file: U29VOLT.WAV volume: 0  reset: 1
Server stoped: 24.06.2007 Su 14:01:03.671


Яркий пример использования XSS в бесплатном проекте Ту-144Д от Никиты Константинова (aka konsni).


XML Sound Server можно использовать в любых бесплатных проектах совершенно свободно, с указанием авторства. В коммерческих - только после согласования с автором (Bor).

См. также

Ссылки


Wiki avsim 2.jpg Это незавершённая статья. Вы можете помочь проекту, исправив и дополнив её.