Форум Trainsim  

Вернуться   Форум Trainsim > Train Simulator (ex-RailWorks) и TSW > TS - Маршруты и сценарии

Ответ
 
Опции темы Опции просмотра
Старый 18.12.2013, 18:56   #1
awaken
Машинист поезда
 
Регистрация: 10.04.2007
Адрес: малая арнаутская
Сообщений: 5,229
Вы сказали Спасибо: 189
Поблагодарили 3,602 раз(а) в 878 сообщениях
awaken стоит на развилке (репутация по умолчанию)
По умолчанию Звуковые эффекты в сценариях

Ковыряю такую вещь, нигде толком не описанную
разве что вот здесь единственное более-менее внятное объяснение

http://www.railunion.net/forum53/topic10420.html


в сценарии можно воспроизводить аудиозапись, привязав к определенному событию (например проезд маркера)

в Stevens Pass таким образом сделаны говорящие детекторы неисправностей поезда, осуществляющие контроль нагрева букс, и контроль верхнего и нижнего габарита ПС (аналог наших ПОНАБ и УКСПС)

при проезде устройства, оно передает на локомотив синтезированную голосовую запись о наличии/отсутствии дефектов у прошедшего подвижного состава, а также количество осей в составе. это позволяет делать сценарии более жизненными и интерактивными (теоретически, возможна и выдача голосовой информации о неисправностях )

странность в том что в TS2014 это напрямую не реализовано, а разработчики сделали это весьма корявым способом - через расширение погодных эффектов (WeatherExtension). таким же образом , как воспроизводятся звуки грома, дождя и тд в сценариях с меняющейся погодой.

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

1) вставить в скрипт сценария активацию событий смены погоды

пример скрипта:

PHP код:
function OnEvent event )

-- 
Instruction triggers
---------------------------

-- 
Timed triggers
---------------------------
    
    if 
event == "MP1735" then
    
        SysCall 
"WeatherController:SetCurrentWeatherEventChain""DetMP1735" )
        return 
TRUE
        
    end

    
if event == "MP1740" then
    
        SysCall 
"WeatherController:SetCurrentWeatherEventChain""DetMP1740" )
        return 
TRUE
        
    end

return FALSE

end 
вкратце что здесь делается. MP1735, MP1740 - это имена событий привязанные к маркерам пути в сценарии (названы по номеру пикета/километражу, название может быть любым ). эти имена нужно прописать в свойство TriggerEventSuccess у путевого маркера, при проезде которого будет срабатывать событие.

код вышеуказанного скрипта по имени события вызывает эффект погоды из файла расширения WeatherExtension

далее, чтобы добавить расширение погоды к сценарию, нужно вручную отредактировать файл ScenarioProperties.xml

изначально там было вот что:
никакого расширения не задано

PHP код:
    <WeatherExtensionBlueprint>
        <
iBlueprintLibrary-cAbsoluteBlueprintID>
            <
BlueprintSetID>
                <
iBlueprintLibrary-cBlueprintSetID>
                    <
Provider d:type="cDeltaString"></Provider>
                    <
Product d:type="cDeltaString"></Product>
                </
iBlueprintLibrary-cBlueprintSetID>
            </
BlueprintSetID>
            <
BlueprintID d:type="cDeltaString"></BlueprintID>
        </
iBlueprintLibrary-cAbsoluteBlueprintID>
    </
WeatherExtensionBlueprint
мы там прописываем ссылку на наш собственный файл расширения погоды

как-то так

собственно Tour.xml это и есть файл расширения погодных эффектов
находится он в папке Assets в подкаталоге принадлежащей конкретному маршруту. audio это относительный путь внутри ассетов маршрута.
в данном случае это путь

папка_игры\Assets\GNTX\Stevens Pass\audio

путь папки маршрута в явном виде не задается а определяется через имя провайдера и продукта.

PHP код:
    <WeatherExtensionBlueprint>
        <
iBlueprintLibrary-cAbsoluteBlueprintID>
            <
BlueprintSetID>
                <
iBlueprintLibrary-cBlueprintSetID>
                    <
Provider d:type="cDeltaString">GNTX</Provider>
                    <
Product d:type="cDeltaString">StevensPass</Product>
                </
iBlueprintLibrary-cBlueprintSetID>
            </
BlueprintSetID>
            <
BlueprintID d:type="cDeltaString">audio\Tour.xml</BlueprintID>
        </
iBlueprintLibrary-cAbsoluteBlueprintID>
    </
WeatherExtensionBlueprint
сам файл расширения погоды имеет довольно загадочную и недокументированную структуру. я его просто скопипастил из существующего, и перезаписал нужные мне строчки

для активации аудиовоспроизводящих маркеров там есть такие записи

PHP код:
                <cTriggeredWeatherEventChain d:id="7896">
                    <
Name d:type="cDeltaString">DetMP1776</Name>
                    <
BlendOutTime d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</BlendOutTime>
                    <
LoopMode d:type="cDeltaString">eStop</LoopMode>
                    <
TimedWeatherEvent>
                        <
cWeatherTypeEvent d:id="7901">
                            <
WeatherType d:type="ref">7145</WeatherType>
                            <
Duration d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</Duration>
                        </
cWeatherTypeEvent>
                    </
TimedWeatherEvent>
                    <
LocationEvent>
                        <
cLocationWeatherEvent d:id="7905">
                            <
Name d:type="cDeltaString">MP1776</Name>
                            <
Delay d:type="sFloat32" d:alt_encoding="000000A09999B93F" d:precision="string">0.1</Delay>
                            <
AudioControllerName d:type="cDeltaString">Det1776</AudioControllerName>
                            <
InitialLongitude d:type="sFloat64" d:alt_encoding="0000000000000000" d:precision="string">0</InitialLongitude>
                            <
InitialLatitude d:type="sFloat64" d:alt_encoding="0000000000000000" d:precision="string">0</InitialLatitude>
                            <
TargetLongitude d:type="sFloat64" d:alt_encoding="0000000000000000" d:precision="string">0</TargetLongitude>
                            <
TargetLatitude d:type="sFloat64" d:alt_encoding="0000000000000000" d:precision="string">0</TargetLatitude>
                            <
FollowTerrain d:type="cDeltaString">eTrue</FollowTerrain>
                            <
HeightOffset d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</HeightOffset>
                            <
AdditiveLighting d:type="cDeltaString">eFalse</AdditiveLighting>
                            <
AdditiveLightingColour>
                                <
cHcColour>
                                    <
Red d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Red>
                                    <
Green d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Green>
                                    <
Blue d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Blue>
                                    <
Alpha d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Alpha>
                                </
cHcColour>
                            </
AdditiveLightingColour>
                            <
Duration d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Duration>
                            <
TextureID d:type="cDeltaString"></TextureID>
                            <
BottomLeftUV>
                                <
cRVector2>
                                    <
X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                                    <
Y d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Y>
                                </
cRVector2>
                            </
BottomLeftUV>
                            <
TopRightUV>
                                <
cRVector2>
                                    <
X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                                    <
Y d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Y>
                                </
cRVector2>
                            </
TopRightUV>
                            <
Scale d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</Scale>
                            <
FadeInTime d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</FadeInTime>
                            <
FadeOutTime d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</FadeOutTime>
                        </
cLocationWeatherEvent>
                        <
cLocationWeatherEvent d:id="7932">
                            <
Name d:type="cDeltaString">Axle24</Name>
                            <
Delay d:type="sFloat32" d:alt_encoding="000000604755D53F" d:precision="string">0.33333</Delay>
                            <
AudioControllerName d:type="cDeltaString">24X</AudioControllerName>
                            <
InitialLongitude d:type="sFloat64" d:alt_encoding="0000000000000000" d:precision="string">0</InitialLongitude>
                            <
InitialLatitude d:type="sFloat64" d:alt_encoding="0000000000000000" d:precision="string">0</InitialLatitude>
                            <
TargetLongitude d:type="sFloat64" d:alt_encoding="0000000000000000" d:precision="string">0</TargetLongitude>
                            <
TargetLatitude d:type="sFloat64" d:alt_encoding="0000000000000000" d:precision="string">0</TargetLatitude>
                            <
FollowTerrain d:type="cDeltaString">eTrue</FollowTerrain>
                            <
HeightOffset d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</HeightOffset>
                            <
AdditiveLighting d:type="cDeltaString">eFalse</AdditiveLighting>
                            <
AdditiveLightingColour>
                                <
cHcColour>
                                    <
Red d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Red>
                                    <
Green d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Green>
                                    <
Blue d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Blue>
                                    <
Alpha d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Alpha>
                                </
cHcColour>
                            </
AdditiveLightingColour>
                            <
Duration d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Duration>
                            <
TextureID d:type="cDeltaString"></TextureID>
                            <
BottomLeftUV>
                                <
cRVector2>
                                    <
X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                                    <
Y d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Y>
                                </
cRVector2>
                            </
BottomLeftUV>
                            <
TopRightUV>
                                <
cRVector2>
                                    <
X d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</X>
                                    <
Y d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</Y>
                                </
cRVector2>
                            </
TopRightUV>
                            <
Scale d:type="sFloat32" d:alt_encoding="000000000000F03F" d:precision="string">1</Scale>
                            <
FadeInTime d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</FadeInTime>
                            <
FadeOutTime d:type="sFloat32" d:alt_encoding="0000000000000000" d:precision="string">0</FadeOutTime>
                        </
cLocationWeatherEvent>
                    </
LocationEvent>
                </
cTriggeredWeatherEventChain
нас собственно интересует это :

PHP код:
<Name d:type="cDeltaString">DetMP1776</Name
вот это ссылка на эффект погоды, вызываемый из скрипта через
PHP код:
"WeatherController:SetCurrentWeatherEventChain""DetMP1735" 
то есть при проезде маркера с именем MP1735 будет проигрываться звуковой эффект под именем DetMP1735.
далее, про синтезированную речь со счетом осей поезда.
для этого внутри данного XML блока есть строчка Axle(число осей)
и ниже еще раз это же число в виде 24X.

PHP код:
                            <Name d:type="cDeltaString">Axle24</Name>
                            <
Delay d:type="sFloat32" d:alt_encoding="000000604755D53F" d:precision="string">0.33333</Delay>
                            <
AudioControllerName d:type="cDeltaString">24X</AudioControllerName
подозреваю что возможности этого аудиоконтроллера намного больше, и он может синтезировать голосом не только число осей, но и другую информацию. к сожалению это нигде не задокументировано.

Последний раз редактировалось awaken; 18.12.2013 в 19:24.
awaken вне форума   Ответить с цитированием
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


Реклама показывается изредка по случайному принципу
По умолчанию РЕКЛАМА

 
Старый 19.12.2013, 00:00   #2
awaken
Машинист поезда
 
Регистрация: 10.04.2007
Адрес: малая арнаутская
Сообщений: 5,229
Вы сказали Спасибо: 189
Поблагодарили 3,602 раз(а) в 878 сообщениях
awaken стоит на развилке (репутация по умолчанию)
По умолчанию

зы я ошибся никакая речь там не синтезируется

там заранее записаны цифры для определенных длин состава - 24х, 36х, 190х
соответственно если хочется подогнать под свой случай, нужно использовать ближайшее число
awaken вне форума   Ответить с цитированием
Старый 19.12.2013, 16:02   #3
E.depo
Матёрый пользователь
 
Аватар для E.depo
 
Регистрация: 18.12.2009
Адрес: Московская обл.Наро-фоминск
Сообщений: 1,984
Вы сказали Спасибо: 2,186
Поблагодарили 1,016 раз(а) в 513 сообщениях
E.depo стоит на развилке (репутация по умолчанию)
Отправить сообщение для E.depo с помощью Skype™
По умолчанию

Вообще мысль, по поводу синтеза речи, очень интересна. Даже есть программы-говорилки, там водишь текст и программа озвучивает его, вроде в Винде это реализовано стандартно. Я как-то ставил такую говорилку и на сайте Мелкософта скачивал звуковые библиотеки, ну там под разные голоса (мужские - женские), и под разные языки. Правда читают они без интонации , да и ударения не туда делают - но всё-равно приемлемо для слуха.
Да, такую "фишку" не плохо бы иметь для редактора сценариев. Ввёл к примеру текст в редакторе, а потом во время сценария, тебе вместо текстового сообщения на экран, вдруг голосом, какое-то распоряжение диспетчера.
__________________
Train Simulator 2020 - TSW2 - Star Citizen
E.depo вне форума   Ответить с цитированием
Старый 19.12.2013, 19:00   #4
awaken
Машинист поезда
 
Регистрация: 10.04.2007
Адрес: малая арнаутская
Сообщений: 5,229
Вы сказали Спасибо: 189
Поблагодарили 3,602 раз(а) в 878 сообщениях
awaken стоит на развилке (репутация по умолчанию)
По умолчанию

теоретически это возможно если написать какой-то модуль расширения игры (в виде DLL) , в который скрипт будет подсовывать параметр в виде текстовой строки

я не знаю, допускает ли движок расширения бинарными программными модулями? в lua скрипт синтез речи не запихнешь, но библиотеки для C/C++ с подобными алгоритмами есть
awaken вне форума   Ответить с цитированием
Старый 20.12.2013, 10:48   #5
le Sandro
Матёрый пользователь
 
Регистрация: 11.04.2007
Адрес: PNZ
Сообщений: 651
Вы сказали Спасибо: 254
Поблагодарили 185 раз(а) в 104 сообщениях
le Sandro стоит на развилке (репутация по умолчанию)
По умолчанию

Мне кажется, что все-таки лучше будет в стороннем софте нормальных wav-ов насинтезировать и вставить в роут или сцену в виде маркеров.
__________________
мы с PNZ
le Sandro вне форума   Ответить с цитированием
Старый 21.12.2013, 20:47   #6
E.depo
Матёрый пользователь
 
Аватар для E.depo
 
Регистрация: 18.12.2009
Адрес: Московская обл.Наро-фоминск
Сообщений: 1,984
Вы сказали Спасибо: 2,186
Поблагодарили 1,016 раз(а) в 513 сообщениях
E.depo стоит на развилке (репутация по умолчанию)
Отправить сообщение для E.depo с помощью Skype™
По умолчанию

Не-е, конечно на синтезировать можно, но тут теряется гибкость, так как, если потребуется неожиданно изменить сообщение, то опять потребуется синтезировать. Я имел ввиду, чтоб только ввёл нужный, произвольный текст в свойство правила, ну там где вводится текст выводимого сообщения, нажал скажем иконку "звук" (которой нет) и вовремя прохождения сценария, тебе вместо вывода текста - будет голосовое сообщение, приятным женским голосом (слегка побритым и немного выпившим баритоном)
Можно и маркеры специальные добавить или использовать те, что есть.
__________________
Train Simulator 2020 - TSW2 - Star Citizen
E.depo вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RW и EAX эффекты apelsin7 TS - Звуки 3 28.11.2012 20:37
Звуковые стыки TRam_ TrainZ - Звуки 21 16.04.2010 14:36
нужны звуковые файлы ivalavi MSTS - Звуки 3 02.03.2010 14:26
стрелки в сценариях apelsin7 TS - Об игре 1 22.05.2009 19:42
О сценариях с маневрами. dj.dan.mc MSTS - Сценарии 4 27.01.2008 15:06


Текущее время: 13:46. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim
TopList Нажми для появления дома Trainsim на карте Intermap
Что это?