Озвучивание событий через XML [FS9] — Панели и приборы

Доброго времни суток!

 

Каким образом в XML можно задать «и, или»? Хочу сделать чтобы звук проигрывался если давление bleed air возрастает в любом из двух двигателей, но звук проигрывается только если возрастает давление в ENG2. Где я допустил ошибку? :)

 

<Value>(A:TURB ENG1 BLEED AIR, psi) 35 == (A:TURB ENG2 BLEED AIR, psi) 35 < if{ 0 (>L:PACKS_SOUND,bool) } els{ 1 (>L:PACKS_SOUND,bool) }</Value>

 

Спасибо!


Edited by Bombaklat

<Value>(A:TURB ENG1 BLEED AIR, psi) 35 < (A:TURB ENG2 BLEED AIR, psi) 35 < && if{ 0 (>L:PACKS_SOUND,bool) } els{ 1 (>L:PACKS_SOUND,bool) }</Value>

Спасибо!

Да, так и читаю строку дополнительных параметров:

 

void FSAPI cbf_sound_engine(
	PGAUGEHDR pgauge, SINT32 service_id, UINT32 extra_data)
{
   switch( service_id )
   {
	case PANEL_SERVICE_PRE_INSTALL:
	break;
       case PANEL_SERVICE_CONNECT_TO_WINDOW:
       break;
       case PANEL_SERVICE_POST_INSTALL:
		InitSoundEngine(pgauge->parameters);
       break;
       case PANEL_SERVICE_PRE_KILL:	
		UninitSoundEngine();
       break;
       case PANEL_SERVICE_PRE_UPDATE:
		if( g_pXMLSoundServer )
			g_pXMLSoundServer->Process();
	break;
       case PANEL_SERVICE_POST_UPDATE:
	break;
       case PANEL_SERVICE_PRE_DRAW:
       break;
       case PANEL_SERVICE_POST_DRAW:
       break;
   }
}

 

а еще согласно SDK ее можно тут взять:

 

typedef struct	GAUGEHDR
{
UINT32			gauge_header_version;
char				*gauge_name;
PPELEMENT_HEADER		elements_list;
PQUERY_ROUTINE		query_routine;
PINSTALL_ROUTINE		install_routine;
PINITIALIZE_ROUTINE	initialize_routine;
PUPDATE_ROUTINE		update_routine;
PGENERATE_ROUTINE		generate_routine;
PDRAW_ROUTINE		draw_routine;
PKILL_ROUTINE		kill_routine;
char				reserved_1[4];
UINT32			size_x_mm;
char				reserved_2[40];
PMOUSERECT			mouse_rect;
PGAUGE_CALLBACK		gauge_callback;
UINT32			user_data;
PVOID				parameters;
char*				usage;
char				reserved_3[16];
}
GAUGEHDR, *PGAUGEHDR, **PPGAUGEHDR;


Edited by Bor

Спасибо автору за прибор, подскажите есть ли у кого после прописки в конфиге панели вылеты из FS Panel Studio при открытии секции в которой прописали прибор?

post-56751-0-72908300-1291731041_thumb.jpg


Edited by DT-75

DT-75, попробую проверить. Правда я никогда не работал с Panel Studo. Какая у вас версия и в какой момент происходит выброс исключения?

DT-75, попробую проверить. Правда я никогда не работал с Panel Studo. Какая у вас версия и в какой момент происходит выброс исключения?

Выброс происходит при попытке открыть ту секцию, где прописан прибор, например в Ту-144 это [Vcockpit01], но ничего страшного, другие открываются нормально, версия Panel Studo 1.2; XSS-1.0

Вообще сначала показалось не сложно, озвучить тумблер просто, но уже на радиовысотомере … пока не получается в XML в правильном месте поставить правильную строчку.


Edited by DT-75

Вообще сначала показалось не сложно, озвучить тумблер просто, но уже на радиовысотомере … пока не получается в XML в правильном месте поставить правильную строчку.

 

А, что вы конкретно хотите? Чтобы зачитывалась высота? Дайте ваш кусок кода для затравки.


Edited by Bor

 

А, что вы конкретно хотите? Чтобы зачитывалась высота? Дайте ваш кусок кода для затравки.

Радиовысотомер РВ-5 от SCS Ту-134, прикручен к Ан-24, при включении уходит бланкер (rv_blanker.bmp), должен подаваться сигнал 400гц в течении 3-5 сек. и загорается жёлтая лампа (rv_lamp.bmp), при снижении на установленной в нём высоте (зелёный треугольник rv_des.bmp) также должен звучать сигнал и горит лампа.

<Gauge Name=»A-037″ Version=»1.0″>
<Image Name=»rv_back.bmp» Luminous=»Yes» ImageSizes=»220,220,0,0″/>
<Element>
<Position X=»110″ Y=»110″/>
<Image Name=»rv_needle.bmp» Luminous=»Yes» ImageSizes=»27,99,0,0″>
<Axis X=»14″ Y=»85″ PointsTo=»East»/>
</Image>
<Rotate>
<Value Minimum=»0″ Maximum=»800″>(L:RV power,bool) if{ (G:Var1) if{ 15 } els{ (A:Radio height, meters) 3 — } } els{ 0 }</Value>
<Nonlinearity>
<Item Value=»0″ Degrees=»0″/>
<Item Value=»20″ Degrees=»31″/>
<Item Value=»40″ Degrees=»62″/>
<Item Value=»60″ Degrees=»93″/>
<Item Value=»80″ Degrees=»126″/>
<Item Value=»100″ Degrees=»159″/>
<Item Value=»300″ Degrees=»208″/>
<Item Value=»500″ Degrees=»255″/>
<Item Value=»700″ Degrees=»303″/>
</Nonlinearity>
<Delay DegreesPerSecond=»90″/>
<Failures>
<SYSTEM_ELECTRICAL_AVIONICS Action=»Freeze»/>
</Failures>
</Rotate>
</Element>
<Element>
<Position X=»159″ Y=»33″/>
<Image Name=»rv_blanker.bmp» Luminous=»Yes» ImageSizes=»42,62,0,0″>
<Axis X=»0″ Y=»0″/>
</Image>
<Rotate>
<Value>(A:Radio height, meters) 4000 > (L:RV power, bool) ! ||</Value>
<Nonlinearity>
<Item Value=»0″ Degrees=»-29″/>
<Item Value=»1″ Degrees=»0″/>
</Nonlinearity>
<Delay DegreesPerSecond=»120″/>
</Rotate>
</Element>
<Element>
<Position X=»0″ Y=»0″/>
<Image Name=»rv_upper.bmp» ImageSizes=»220,220,0,0″/>
</Element>
<Element>
<Position X=»110″ Y=»110″/>
<Image Name=»rv_des.bmp» Bright=»Yes» ImageSizes=»16,91,0,0″>
<Axis X=»8″ Y=»91″/>
</Image>
<Rotate>
<Value Minimum=»0″ Maximum=»700″>(A:Decision height, meters)</Value>
<Nonlinearity>
<Item Value=»0″ Degrees=»0″/>
<Item Value=»20″ Degrees=»31″/>
<Item Value=»40″ Degrees=»62″/>
<Item Value=»60″ Degrees=»93″/>
<Item Value=»80″ Degrees=»126″/>
<Item Value=»100″ Degrees=»159″/>
<Item Value=»300″ Degrees=»208″/>
<Item Value=»500″ Degrees=»255″/>
<Item Value=»700″ Degrees=»303″/>
</Nonlinearity>
<Delay DegreesPerSecond=»90″/>
</Rotate>
</Element>
<Element>
<Position X=»182″ Y=»181″/>
<Select>
<Value>(L:RV power, bool) if{ (A:Decision height, meters) (A:Radio height, meters) > (G:Var1) || } els{ 0 } </Value>
<Case Value=»1″>
<Image Name=»rv_lamp.bmp» Bright=»Yes» ImageSizes=»24,24,0,0″/>
</Case>
</Select>
</Element>
<Element>
<Position X=»194″ Y=»193″/>
<Image Name=»rv_triangle.bmp» ImageSizes=»24,24,0,0″>
<Axis X=»12″ Y=»12″/>
</Image>
<Rotate>
<Value Minimum=»0″ Maximum=»700″>(A:Decision height, meters) 10 /</Value>
</Rotate>
</Element>
<Mouse>
<Area Left=»15″ Top=»187″ Width=»16″ Height=»16″>
<Cursor Type=»Hand»/>
<Click Kind=»LeftSingle+LeftRelease+Leave»>
(M:Event) ‘LeftSingle’ scmp 0 == if{ 1 (>G:Var1) }
(M:Event) ‘LeftRelease’ scmp 0 == if{ 0 (>G:Var1) }
(M:Event) ‘Leave’ scmp 0 == if{ 0 (>G:Var1) }
</Click>
</Area>
<Area Left=»195″ Top=»181″ Width=»15″ Height=»30″>
<Tooltip>VPR %( (A:Decision height, meters) )%!d!</Tooltip>
<Cursor Type=»UpArrow»/>
<Click Repeat=»Yes»>(A:Decision height, meters) 700 < if{ 0 (>K:INCREASE_DECISION_HEIGHT) }</Click>
</Area>
<Area Left=»180″ Top=»181″ Width=»15″ Height=»30″>
<Tooltip>VPR %( (A:Decision height, meters) )%!d!</Tooltip>
<Cursor Type=»DownArrow»/>
<Click Repeat=»Yes»>(A:Decision height, meters) 0 > if{ 0 (>K:DECREASE_DECISION_HEIGHT) }</Click>
</Area>
</Mouse>
</Gauge>

post-56751-0-15943900-1292013394_thumb.jpg


Edited by DT-75

Ну сделайте гудок, или возьмите где нибудь гудок 400 Гц и нужной длительности. Не зацикливайте его.

Там где у вас озвучка тумблера при включении высотомера поставьте его включение:

 

<Click>(L:RV power, bool) ! (>L:RV power, bool) 1 (>L:TOGGLE_SOUND,bool) (L:RV power, bool) if{ 1 (>L:RV_SOUND,bool) } </Click> 

 

Ну тут можно оптимизировать, чтобы дважды на стек не класть RV_POWER можно или сразу это условие обрабатывать,

или дублировать его значение на стеке, я просто в симовском ХМЛ не силен.

 

Далее, в файле который вы привели, необходимо выполнять обработку некоторых условий, я сильно не вникал в тот код,

предлагаю алгоритм:

 

завести флаг взведенного высотомера L:RV_ARMED, bool сперва он false.

 

И такой код:

 

-если высотомер включен и флаг не взведен и высота больше Decision height + еще метров 10-15, взвести флаг (10-15 метров или футов обеспечивают петлю гистерезиса);

 

-если высотомер включен и флаг взведен и высота меньше Decision height, выставить сигнал RV_SOUND, сбросить флаг, выставить сигнал лампы

 

Ну это так приблизительно. Код по идее должен быть такой:

 

<Value>
(L:RV power, bool) (A:Radio height, meters) (A:Decision height, meters) 10 + > (L:RV_ARMED, bool) ! && && if{1 (>L:RV_ARMED,bool)}
</Value>

 

это первый шаг, ну тут я мог перепутать местами (надо СДК смотреть) (A:Radio height, meters) (A:Decision height, meters), что там со стеком и как проверяется.

 

<Value>
(L:RV power, bool) (A:Radio height, meters) (A:Decision height, meters) < 
(L:RV_ARMED, bool) ! && && if{1 (>L:RV_SOUND,bool) 0  (>L:RV_ARMED,bool)}
</Value>

 

Где то так, код не проверял.


Edited by Bor

Ещё вопрос: есть лапма сигнализации SSOS, срабатывает при крутом снижении (более 7 м/с ниже ВПР, установленной радиовысотомером), есть звук с названием «SSOS» и строка, которую нужно изменить, чтобы одновременно с загоранием лампы звучал сигнал.

 

<Value>(L:RV power, bool) (A:Circuit general panel on, bool) if{ (L:AnnCheck,bool) (A:Decision height, feet) (A:Radio height, feet) > (A:Radio height, feet) 100 < || (A:Vertical speed,feet per minute) -1400 < && ||}</Value>

 

Подскажите пожалуйста, как должна выглядеть эта строка, чтобы всё заработало?


Edited by DT-75

Ещё вопрос: есть лапма сигнализации SSOS, срабатывает при крутом снижении (более 7 м/с ниже ВПР, установленной радиовысотомером), есть звук с названием «SSOS» и строка, которую нужно изменить, чтобы одновременно с загоранием лампы звучал сигнал.

 

<Value>(L:RV power, bool) (A:Circuit general panel on, bool) if{ (L:AnnCheck,bool) (A:Decision height, feet) (A:Radio height, feet) > (A:Radio height, feet) 100 < || (A:Vertical speed,feet per minute) -1400 < && ||}</Value>

 

Подскажите пожалуйста, как должна выглядеть эта строка, чтобы всё заработало?

 

Ну наверное так… Опять делаем или берем незацикленный звук. А потом просто получившийся результат загоняете в звуковую переменную и все:

(>L:ALARM_SOUND, bool)

Скажите, а не планируется ли адаптация XSS для работы в Flight Simulator X?

У меня тоже проблема с вылетом из ФС панель студио…и симулятор отказывается грузить модель с прописанным в панели прибором :sarcastic: а мне очень бы хотелось пошаманить с озвучкой некоторых агрегатов… в чем может быть проблема? подскажите если не сложно!

С Уважением Константин

Вот есть у меня код на HML какую строчку можно добавить, что бы раздавался щелчек тумблера?

 

<Element>

<Visible>(L:SYSTEM_POWER,bool)</Visible>

<Select>

<Value>(L:ENG_2_BLEED_VALVE,bool)</Value>

<Case Value=»0″>

<Image Name=»onn2.bmp» Bright=»Yes»/>

</Case>

</Select>

</Element>

 

<Mouse>

<Tooltip>ENG 2 BLEED VALVE</Tooltip>

<Cursor Type=»Hand»/>

<Click>8 (>L:tu124_schelc.waw) (L:ENG_2_BLEED_VALVE,bool) ! (>L:ENG_2_BLEED_VALVE,bool)</Click>

</Mouse>

 

</Gauge>

 

 

 

Звук находится в папке programm files/msfs2004/sound/tu124/schelc.waw

помогите сделать звук всу на ил-76 Варнавского!

помогите сделать звук всу на ил-76 Варнавского!

Вам сюда

http://www.avsimrus….39#entry1713839

Есть такой код:

 

// инициализация
m_xml_var_unit = get_units_enum("BOOL");
m_xml_var_id = register_named_variable("sound_1");

...

// воспроизведение звука по нажатию кнопки №1
set_named_variable_typed_value(m_xml_var_id, 1, m_xml_var_unit);

...

// остановка звука по нажатию кнопки №2
set_named_variable_typed_value(m_xml_var_id, 0, m_xml_var_unit);

 

Звук незацикленный.

 

Результат:

1) Используя библиотеку XSS версии 1.0.0, всё работает нормально. При опции Reset «true» воспроизведение остановить нельзя, оно прекратится только после полного проигрывания; при «false» — звук остановить можно.

2) Используя библиотеку XSS версии 1.2.0, звук упорно не хочет останавливаться пока не проиграет до конца. Установка опции Reset в true/false не даёт изменений.

 

В связи с результатом по п.2, вопрос — что делаю не так? Может есть hidden опция в cfg, которая разблокировывает ручную остановку звука?

Так, почитал я свои комментарии к этой версии. Скажите пожалуйста, Lavrik, в этом звуковом файле «sound_1» есть семплы? Если нет семплов, то, звук автоматически считается однократно проигрываемым.

 

Вот что у меня в коде, я наверное забыл указать это в сопроводиловке:

// определяется режим автосброса XML переменной (Reset=true/false;),
// если семплов нет, то переменная должна сбрасываться,
// так-как она не проигрывается циклически
// теперь в конфигурационном файле нет необходимости
// определять опцию Reset=... , но для совместимости
// она оставлена как незначащая.

 

Я исходил из того, что зацикленный звук имеет семплы и им нужно управлять, если звук семплов не имеет, то он не управляется и проигрывается только один раз и все, опция Reset в версии 1.2.0 не имеет смысла.

 

Решение: зациклите звук семплами и он станет управляемым


Edited by Bor

Что то не могу сделать ,уже голова кругом,  Прошу помощи .
Взял за основу от ту-144 . Короче всё щёлкает и переключается, звук есть, но проблема  появилась, что дёйствие думплера пропало . Тоесть у меня думплер автомата тяги.  Если его включать (звук есть) , но не стала включаться кнопка скорости . 
Кнопка скорости и думплер тяги работают вместе.
вот начальная XML — ка  думплера

<Gauge Name=»Autothrottle Switch» Version=»1.0″>
   <Element>
      <Select>
         <Value>(A:Autopilot throttle arm,bool)</Value>
         <Case Value=»0″>
            <Image Name=»Perekl_off.bmp» ImageSizes=»20,30,32,48″/>
         </Case>
         <Case Value=»1″>
            <Image Name=»Perekl_on.bmp» ImageSizes=»20,30,32,48″/>
         </Case>
      </Select>
   </Element>
   <Mouse>
      <Help ID=»HELPID_AUTOPILOT_AUTOTHROTTLE»/>
      <Tooltip ID=»TOOLTIPTEXT_AUTOPILOT_AUTOTHROTTLE»/>
      <Area>
         <Cursor Type=»Hand»/>
         <Click Event=»AUTO_THROTTLE_ARM»/>
      </Area>
   </Mouse>
</Gauge>

*********************************************здесь всё работает
терерь я делаю так 

<Gauge Name=»Autothrottle Switch» Version=»1.0″>
   <Element>
      <Select>
         <Value>(L:Autopilot throttle arm,bool)</Value>
         <Case Value=»0″>
            <Image Name=»Perekl_off.bmp» ImageSizes=»20,30,32,48″/>
         </Case>
         <Case Value=»1″>
            <Image Name=»Perekl_on.bmp» ImageSizes=»20,30,32,48″/>
         </Case>
      </Select>
   </Element>
<Mouse>
      <Help ID=»HELPID_AUTOPILOT_AUTOTHROTTLE»/>
      <Tooltip ID=»TOOLTIPTEXT_AUTOPILOT_AUTOTHROTTLE»/>
      <Area>
  <Cursor Type=»Hand»/>
<Click>(L:Autopilot throttle arm,bool) ! (>L:Autopilot throttle arm,bool) 1 (>L:Il-96_tumbler,number)</Click>
      </Area>
   </Mouse>
</Gauge>
**********************************всё ,кнопка скорости тут уже не работает .

сама XLM от кнопки скорости такая

<Gauge Name=»Autopilot Speed Switch» Version=»1.0″>
   <Element>
      <Select>
         <Value>(A:Autopilot airspeed hold, bool)</Value>
         <Failures>
            <SYSTEM_ELECTRICAL_PANELS Action=»0″/>
         </Failures>
         <Case Value=»0″>
            <Image Name=»AP_Spd_Off.bmp» ImageSizes=»25,25,40,40″/>
         </Case>
         <Case Value=»1″>
            <Image Name=»AP_Spd_On.bmp» Bright=»Yes» ImageSizes=»25,25,40,40″/>
         </Case>
      </Select>
   </Element>
   <Mouse>
      <Help ID=»HELPID_AUTOPILOT_SPEED_HOLD»/>
      <Tooltip ID=»TOOLTIPTEXT_AUTOPILOT_SPEED_HOLD»/>
      <Area>
         <Cursor Type=»Hand»/>
         <Click>0 (>L:Mach-IAS select, bool) 0 (>K:AP_PANEL_SPEED_HOLD)</Click>
      </Area>
   </Mouse>
</Gauge>

Может кто то поможет, за ранее спасибо .


Edited by BG1234

<Click>(L:Autopilot throttle arm,bool) ! (>L:Autopilot throttle arm,bool) 1 (>L:Il-96_tumbler,number)</Click>

Конечно, у вас же тут самого ивента на переключение нет, а в первом и последнем есть.

Могли бы вы по конкретнее показать, что как прописать ?

нашёл решение, работает на 100% , и звук есть и действие осталось !)) :dance4:

 

<Gauge Name=»Autothrottle Switch» Version=»1.0″>
   <Element>
    <Select>
        <Value>(A:Autopilot throttle arm,bool)</Value>
         <Case Value=»0″>
            <Image Name=»Perekl_off.bmp» ImageSizes=»20,30,32,48″/>
         </Case>
         <Case Value=»1″>
            <Image Name=»Perekl_on.bmp» ImageSizes=»20,30,32,48″/>
         </Case>
      </Select>
   </Element>
   <Mouse>
      <Help ID=»HELPID_AUTOPILOT_AUTOTHROTTLE»/>
      <Tooltip ID=»TOOLTIPTEXT_AUTOPILOT_AUTOTHROTTLE»/>
        <Area>
         <Cursor Type=»Hand»/>
        <Click> (L:Autopilot throttle arm,bool) if{ (>K:AUTO_THROTTLE_ARM) } els{ (>K:AUTO_THROTTLE_ARM) 1 (>L:Il-96_tumbler,number) }</Click>
   </Area>
   </Mouse>
</Gauge>

Всё гораздо проще:

<Click>0 (>K:AUTO_THROTTLE_ARM) 1 (>L:Il-96_tumbler,number)</Click>

:clapping:  классно, тоже работает !
Вопрос такого типа — вот для кнопки мыши такой код — <Cursor Type=»Hand»/>  
Для ролика мыши такой — <Cursor Type=»DownArrow»/>  или так — <Cursor Type=»UpArrow»/> 
А вот какой код у кнопки клавиатуры ,  или у кнопки джостика ?