Jump to content
Korean Random

[Wwise] Пособие по созданию звуковых модов


Recommended Posts

Подскажите, за что отвечает параметр playRules (от 0 до 3) в файле sound_notifications.xml ?

 

'Описание параметров'

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

Параметр <playRules>:
0 - событие немедленно отправляется на озвучку, минуя очередь; ошибки загрузки звука из банка игнорируются.
1 - секция очереди, к которой относится событие, очищается и событие кидается в очередь первым (т.е. если в этой секции стояли в очереди другие события, они аннулируются).
2 - событие "вставляется" в начало своей секции очереди.
3 - событие добавляется в конец своей секции очереди.

Параметр <timeout>:
Задает "задержку" от момента события до его озвучивания. Если от момента возникновения события до того момента, как оно подошло в очереди, прошло больше времени, чем таймаут, звука не будет (игорируется). По умолчанию (если явно не задано) значение =3.
 
Параметр <minTimeBetweenEvent>:
Задает минимальное время между двумя одинаковыми событиями. Если времени прошло меньше - второе событие игнорируется и не озвучивается. По умолчанию значение =0, т.е. одинаковые события кидаются в очередь без промежутков. Если playRules 2 или 3, имеет смысл задавать это значение явно, чтобы звуки не накладывались друг на друга.
 
Параметр <shouldBindToPlayer>:
До конца не уверен, но насколько разобрался… По умолчанию  False. Если он равен True, то звук проигрывается только в том случае, если игрок, который сгенерил это событие, еще "живой" (или жив тот, кому эта команда
адресована, если это "адресная" команда типа "следуй за мной" и т.д.).

  • Upvote 2
Link to comment
Short link
Share on other sites

night_dragon_on, СПАСИБО.

Теперь ясно, что можно не только внутри банка звук сдвинуть но и внутри самого sound_notifications.xml - это хорошо

Edited by nikitka78
Link to comment
Short link
Share on other sites

Привет!

В  каждый soundbank (те что в примерах проекта) добавлен эвент "emptyEvent",  ни как не могу догнать, с какой целью или какую роль он выполняет банках ?

Link to comment
Short link
Share on other sites

Нужен для правильной заглушки событий при подключении банка, переопределения событий с помощью XVM-ма, на случай если у пользователя будет удален дефолтный банк "xvm.bnk"

Link to comment
Short link
Share on other sites

Кто в курсе чем в оригинальной озвучке отличаются события:

 

enemy_killed_by_player ОТ enemy_killed

 

Смысл вроде как один, но события 2 прописано 

Link to comment
Short link
Share on other sites

Йес! Научился я останавливать проигрывание контейнера!

 

'Как прекращать воспроизведение музыки из одного контейнера при запуске музыки из другого контейнера'

Допустим, нам надо прекратить проигрывание музыки загрузки боя после после начала боя (то есть после возникновения события music_combat).

Для этого делаем дабл-клик по эвенту music_combat. Видим, что там уже есть событие (1) Play.

Добавляем еще одно действие (action). Клиикаем на кнопку [>>] в строке (2), выбираем в меню Stop и далее StopAll:
post-15774-0-60782200-1465567112_thumb.png

Если хотим сделать так, чтобы звук не обрывался резко, а плавно затухал, выбираем продолжительность и характер процесса затухания:
post-15774-0-04081700-1465567139_thumb.png


Осталось установить правильную последовательность звуков - сначала StopAll, и только потом - Play. Просто перетаскиваем действие Play мышкой под событие StopAll:
post-15774-0-52260900-1465567225_thumb.png

 

Может быть я что-то делаю идеологически неправильно, но оно реально работает.

 

Теоретически, описанным способом останавливать

- музыку ангара при загрузке предбоевой музыки

- музыку результатов боя при загрузке музыки ангара

Возможно, надо еще останавливать музыку экрана ввода логина/пароля призагрузке ангара.

Если редактируемый таким образом эвент уже включен в саундбанк, то я на всякий случай сначала удаляю изменяемый эвент из списка включений в саундбанк, делаю изменения и потом заново затаскиваю эвент в саундбанк. Хотя, возможно, изменение перечня событий и без этого будет учтено при генерации сайндбанка.

 

'Тонкость в использовании StopPlay'

Насколько я понимаю, StopAll распространяется только на УЖЕ ИГРАЮЩИЕ треки из этого же самого саундбанка. То есть описанный StopAll в music_combat не вырубает ни стрельбу, ни переговоры экипажа, ни звуки лампочки/пожара и т.п., загружаемые другими модами.
Но если трек еще не начал проигрываться, а висит на задержке (Delay в действии Play), то его проигрывание отменено не будет. И когда Delay истечет, трек заиграет и наложится куда не надо.
 

Иллюстрация немножко сложная, но попробуем. Допустим, мы смотрим на результаты боя (контенер music_victory (событие 1), в нем действия StopAll(11) и  с задержкой на 3 секунды - Play(12)), выходим в ангар (контенер music_hangar (событие 2), в нем действия StopAll(21) и  с задержкой на 3 секунды - Play(22)), а потом жмем кнопку "В бой" начинаем загрузку очередной карты (контенер music_kavkaz (событие 3), в нем действия StopAll(31) и  с задержкой на 3 секунды - Play(32)).

 

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

1(окно результатов)-11(стоп все)-3сек-12(пошла музыка победы)--долго смотрим на результаты боя--2(кнопка закрыть результаты)-21(стоп все)-3сек-22(пошла музыка ангара)--долго смотрим на танки в ангаре--3(жмем "В бой")-31(стоп все)-3сек-32(пошла музыка загрузки карты).

 

Но если вы жмете кнопки быстро, то может получиться так:

1(окно результатов)-11(стоп все)-3сек-12(пошла музыка победы)--долго смотрим на результаты боя--2(кнопка закрыть результаты)-21(стоп все)-3сек-1сек-КЛАЦЦЦЦ!!! 3(жмем "В бой")-31(стоп все)-2 сек-( 22(пошла музыка ангара)-1сек-32(пошла музыка загрузки карты).

 

То есть кнопку "В бой" жмакнули ДО ТОГО, как запустился отложенный на 3 секунды трек музыки ангара (22). И 31(стоп все) ничего не остановил - в этот момент еще ничего не играло. И когда остаток от трех секунд дотикал, запустилась музыка ангара. И на нее наложится 32(музыка загрузки карты).

 

Слушать это наложение будете 30 секунд. Когда начнется бой, действие StopAll в контейнере music_combat оба этих трека остановит. Если, конечно, Вы добавили StopAll в контейнер music_combat. А то еще и третий трек наложится.

 

'Перекрестное затухание-нарастание звуков разных контейнеров'

Допустим, хочется чтобы не только плавно затухала музыка загрузки боя, но и чтобы плавно же нарастала музыка боя.

Для звуков одного контенера, воспроизводящихся по списку, есть возможность установить переход X-fade. Для разных контейнеров придется это X-Fader организовать самому. например, так:
1) В событии music_combat должны быть созданы события StopAll и Play. Причем именно в таком порядке.
2) Для события StopAll назначаем продолжительность и характер процесса затухания (мне понравилось 3 секунды и кривая "сначала медленно, потом быстро").
3) Для события Play назначаем время задержки начала проигрывания, продолжительность и характер процесса нарастания (мне понравилось 2 секунда задержки, 3 секунды нарастания и кривая "сначала быстро, потом медленно").
post-15774-0-39902600-1465568084_thumb.png

 

Если редактируемый таким образом эвент уже включен в саундбанк, то я на всякий случай сначала удаляю изменяемый эвент из списка включений в саундбанк, делаю изменения и потом заново затаскиваю эвент в саундбанк. Хотя, возможно, изменение перечня событий и без этого будет учтено при генерации сайндбанка.

 

 

 

  • Upvote 5
Link to comment
Short link
Share on other sites

Йес! Научился я останавливать проигрывание контейнера!

 

'Как прекращать воспроизведение музыки из одного контейнера при запуске музыки из другого контейнера'

Допустим, нам надо прекратить проигрывание музыки загрузки боя после после начала боя (то есть после возникновения события music_combat).

 

Для этого делаем дабл-клик по эвенту music_combat. Видим, что там уже есть событие (1) Play.

 

Добавляем еще одно действие (action). Клиикаем на кнопку [>>] в строке (2), выбираем в меню Stop и далее StopAll:

attachicon.gifStop-1.png

 

Если хотим сделать так, чтобы звук не обрывался резко, а плавно затухал, выбираем продолжительность и характер процесса затухания:

attachicon.gifStop-2.png

 

 

Осталось установить правильную последовательность звуков - сначала StopAll, и только потом - Play. Просто перетаскиваем действие Play мышкой под событие StopAll:

attachicon.gifStop-3.png

 

Может быть я что-то делаю идеологически неправильно, но оно реально работает.

 

Теоретически, описанным способом останавливать

- музыку ангара при загрузке предбоевой музыки

- музыку результатов боя при загрузке музыки ангара

Возможно, надо еще останавливать музыку экрана ввода логина/пароля призагрузке ангара.

Если редактируемый таким образом эвент уже включен в саундбанк, то я на всякий случай сначала удаляю изменяемый эвент из списка включений в саундбанк, делаю изменения и потом заново затаскиваю эвент в саундбанк. Хотя, возможно, изменение перечня событий и без этого будет учтено при генерации сайндбанка.

 

'Тонкость в использовании StopPlay'

Насколько я понимаю, StopAll распространяется только на УЖЕ ИГРАЮЩИЕ треки из этого же самого саундбанка. То есть описанный StopAll в music_combat не вырубает ни стрельбу, ни переговоры экипажа, ни звуки лампочки/пожара и т.п., загружаемые другими модами.

Но если трек еще не начал проигрываться, а висит на задержке (Delay в действии Play), то его проигрывание отменено не будет. И когда Delay истечет, трек заиграет и наложится куда не надо.

 

Иллюстрация немножко сложная, но попробуем. Допустим, мы смотрим на результаты боя (контенер music_victory (событие 1), в нем действия StopAll(11) и  с задержкой на 3 секунды - Play(12)), выходим в ангар (контенер music_hangar (событие 2), в нем действия StopAll(21) и  с задержкой на 3 секунды - Play(22)), а потом жмем кнопку "В бой" начинаем загрузку очередной карты (контенер music_kavkaz (событие 3), в нем действия StopAll(31) и  с задержкой на 3 секунды - Play(32)).

 

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

1(окно результатов)-11(стоп все)-3сек-12(пошла музыка победы)--долго смотрим на результаты боя--2(кнопка закрыть результаты)-21(стоп все)-3сек-22(пошла музыка ангара)--долго смотрим на танки в ангаре--3(жмем "В бой")-31(стоп все)-3сек-32(пошла музыка загрузки карты).

 

Но если вы жмете кнопки быстро, то может получиться так:

1(окно результатов)-11(стоп все)-3сек-12(пошла музыка победы)--долго смотрим на результаты боя--2(кнопка закрыть результаты)-21(стоп все)-3сек-1сек-КЛАЦЦЦЦ!!! 3(жмем "В бой")-31(стоп все)-2 сек-( 22(пошла музыка ангара)-1сек-32(пошла музыка загрузки карты).

 

То есть кнопку "В бой" жмакнули ДО ТОГО, как запустился отложенный на 3 секунды трек музыки ангара (22). И 31(стоп все) ничего не остановил - в этот момент еще ничего не играло. И когда остаток от трех секунд дотикал, запустилась музыка ангара. И на нее наложится 32(музыка загрузки карты).

 

Слушать это наложение будете 30 секунд. Когда начнется бой, действие StopAll в контейнере music_combat оба этих трека остановит. Если, конечно, Вы добавили StopAll в контейнер music_combat. А то еще и третий трек наложится.

 

'Перекрестное затухание-нарастание звуков разных контейнеров'

Допустим, хочется чтобы не только плавно затухала музыка загрузки боя, но и чтобы плавно же нарастала музыка боя.

 

Для звуков одного контенера, воспроизводящихся по списку, есть возможность установить переход X-fade. Для разных контейнеров придется это X-Fader организовать самому. например, так:

1) В событии music_combat должны быть созданы события StopAll и Play. Причем именно в таком порядке.

2) Для события StopAll назначаем продолжительность и характер процесса затухания (мне понравилось 3 секунды и кривая "сначала медленно, потом быстро").

3) Для события Play назначаем время задержки начала проигрывания, продолжительность и характер процесса нарастания (мне понравилось 2 секунда задержки, 3 секунды нарастания и кривая "сначала быстро, потом медленно").

attachicon.gifCrossfader.png

 

Если редактируемый таким образом эвент уже включен в саундбанк, то я на всякий случай сначала удаляю изменяемый эвент из списка включений в саундбанк, делаю изменения и потом заново затаскиваю эвент в саундбанк. Хотя, возможно, изменение перечня событий и без этого будет учтено при генерации сайндбанка.

ответь мне пож-та в лс

Link to comment
Short link
Share on other sites

EagleB3 - и как раз в тему, только голову ломал как сделать, а с твоим постом все стало на свои места, пример применения кроме музыки:

 

1 событие - поджог вашего танка

 

play - сирена

play - продолжительный звук пламени

 

2 событие - тушение пожара

 

stopall

play - звук работающего огнетушителя

play - голосовое уведомление "пожар потушен"

 

Остается только подобрать временные параметры ( не знаю как с автоматическим огнетушителем будет)

Edited by nikitka78
Link to comment
Short link
Share on other sites

Если чуть развить тему про StopAll, то в том же подменю стоят

"Stop" - остановить указанный объект

"Stop All Except" - остановить объекты ВСЕ, кроме перечисленных - и можно задать список тех, кого останавливать не надо.

Еще есть Break - отличается от Stop (на первый взгляд) только тем, что останов выполняется сразу, без отсрочек и возможности сделать затухание по времени.

Со всеми тремя экспериментировал, но совсем немного - ибо собираю только мод на музыку, а для музыки StopAll пока, на мой взгляд, подходит лучше всего.

 

...А на одном уровне с Break и Stop еще есть Pause. В его раздел даже не заглядывал. Но тоже, наверное, есть куда покопать.

 

Но если говорить про пожар и его тушение, то в списке действий есть еще Mute (не разбирался, но, если это то, о чем я думаю, то может очень подойти).

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

А тушение пожара, возможно, лучше Stop для сирены (сразу, без затухания. Или Break для сирены), Stop для пламени с затуханием (можно отложить с задержкой на 1 секунду) и Play для огнетушителя (сразу, но можно с нарастанием 1..2сек). Посмотреть будет ли вообще разница (и какая?), если пустить Play огнетушителя перед Stop для пламени. И после этого отменить Mute (если это возможно)

Edited by EagleB3
Link to comment
Short link
Share on other sites

Блин застрял на двух событиях:

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

Есть какие идеи?

 

Оптимальный вариант: это при взрыве мне БК, звук уничтожения вообще не проигрывался, но пока не догоняю как это сделать

Edited by nikitka78
Link to comment
Short link
Share on other sites

Взрыв БК мне и

уничтожение моего танка

- это два разных события, я правильно понимаю?

Если танк уничтожен из-за взрыва БК, то событие уничтожение моего танка при этом происходит?

Для проверки можно сделать банк с пустым "Взрывом БК" и послушать.

Если события "уничтожение моего танка" при этом нет, то все просто - надо только запихать два звука во Взрыв БК и второй проигрывать с задержкой.

Если происходят оба события, то... Надо продолжать курить мануал и при этом затягиваться поглубже.

 

Там не что-попадалось на случай "если герой идет по сцене с зимней дорогой, то..., а если по сцене с летней доргой, то... ".

Link to comment
Short link
Share on other sites

Взрыв БК мне и

уничтожение моего танка

- это два разных события, я правильно понимаю?

 

Нужно взять 2 реплея где техника уничтожена обычным выстрелом со снятием хп и выстрелом с подрывом бк.

Прогнать оба с отладкой через XVM [ "logSoundEvents": true ] и узнать.

Edited by night_dragon_on
  • Upvote 1
Link to comment
Short link
Share on other sites

по-моему происходит так:

- сначала событие взрыв БК и озвучка этого события

- потом событие уничтожение танка и стало быть озвучка его.

 

Проблема в том что там очень маленький временной разбег между событиями.

Теоретически - возможно озвучку событие "уничтожение танка" сдвинуть на время озвучки события взрыв БК, НО при этом озвучка события "уничтожение танка" всегда будет происходить с задержкой, а это вроде не совсем гудово.

 

 

Вообще озвучка события "уничтожения танка" - правильнее всего должна начинаться со "stop all", при этом все звуки других событий останавливаются и получаем чисты звук уничтожения без помех ( лампы, шота, и тд)

 

P.S. вообще как и писал EagleB3 , функции Stop, Pause, Mute - очень прикольные и полезные если мы хотим получить чистый звук события без наложения других звуков (пример, шот от арты, все мы знаем что шот от арты в 90% получают когда в свете и работает озвучка лампы, если лампа простая то еще полбеды, а если лампа сложная с многоголосой озвучкой то эти функции приходят на помощь)

Edited by nikitka78
Link to comment
Short link
Share on other sites

Теоретически - возможно озвучку событие "уничтожение танка" сдвинуть на время озвучки события взрыв БК, НО при этом озвучка события "уничтожение танка" всегда будет происходить с задержкой, а это вроде не совсем гудово.

Ммм... А куда в этом случае спешить? Никакие кнопки спешно жать не надо, это не лампа и не пожар. Можно и задерживать этот звук одну-две секунды - уже ничего не изменится.

Так что, думаю, самое правильное - просто поставить постоянную задержку в эвент play на "уничтожение танка"

Link to comment
Short link
Share on other sites

Родилась тут одна необходимость, прошу совета:

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

Edited by nikitka78
Link to comment
Short link
Share on other sites

Йес! Научился я останавливать проигрывание контейнера!

 

 

Насколько я знаю, StopAll остановит все проигрываемые звуки, в зависимости от параметра область действия (scope) у данного игрового объекта или глобально.

Остановятся только запущенные звуки, т.е. на события возникшие после StopAll его действие не распространяется.

 

Что интересно, в оригинальном банке с музыкой нет событий StopAll: MusicEvents.txt

  • Upvote 1
Link to comment
Short link
Share on other sites

Что интересно, в оригинальном банке с музыкой нет событий StopAll

Думаю, это потому, что оно не событие (Event). Оно действие (Action), и может выполняться при возникновении какого-то события. Пруф.

 

Когда я пытался исследовать тему, я создавал и события Stop. Точно так же, как для запуска музыки мы, скажем, на контенер music_malinovka создаем событие Play, можно создать и событие Stop. А потом это событие (Stop_music_malinovka) можно привесить в другое событие, скажем в music_combat (и там вполне человеческий интерфейс, выбор из списка...), и оно будет подвешиваться через событие (action) типа Post Event. И оно даже работало.

Но я быстро эти исследования свернул, ибо решение КМК, крайне (!) неудобно для музыки - делать такой Stop на каждый контейнер загрузки карты. И потом еще прописывать десяток эвентов Stop в эвенте music_combat.

 

 

 

в зависимости от параметра область действия (scope) у данного игрового объекта или глобально
А кто является игровым объектом в WOT? Или, пожалуй, даже лучше спрошу так: кто им может быть в принципе? Скажем, Arena? Hangar? Или это саундбанк? Или я вообще не о том?

 

И, пользуясь случаем - два идеологических вопроса:

1) Получить список всех событий, которые обслуживает, скажем, ExternalMusicSources.pck - это можно сделать как? Через PjOrion?

2) Если я собираю чисто музыкальный мод (только замена музыки, и притом  замена всей музыки), и собираюсь его выложить для общего пользования - чем хорошо и чем плохо использовать пару банков ExternalMusicSources.pck + ExternalMusicSources.bnk? С одной стороны, с такими названиями (да еще со звуками, играющими в стриме) можно вообще никакие конфигурационные файлы не редактировать и так пользователям будет проще. А какие в этом случае имеются грабли? Может быть, в этом случае лучше дать банкам какое-то другое имя (например, OldGoodRock)?

Edited by EagleB3
Link to comment
Short link
Share on other sites

Думаю, это потому, что оно не событие (Event). Оно действие (Action), и может выполняться при возникновении какого-то события. 

 

 

Если бы вы посмотрели приложенный файл, то поняли бы, что имелось в виду именно evant action. 

Например, 

Event 3944980085 "music_combat"  событие ид_события название_события

>Play GameObject 372182364           >действие область действия ид объекта

|Container ID 162F0D5C                        объект (контейнер в данном случае)

| SoundFX ID 241D0A1F                         ссылка на звук

|  File Id 127052965|0792ACA5             звук

 

Так вот, я не нашел действий StopAll в оригинальном банке музыки.

 

 

А кто является игровым объектом в WOT? Или, пожалуй, даже лучше спрошу так: кто им может быть в принципе? Скажем, Arena? Hangar? Или это саундбанк? Или я вообще не о том?

 

Я не могу отвечать за то, что накрутили разработчики WOT, но это однозначно не саундбанк, игровой объект с точки зрения wwise это некий объект, испускающий звуки. 

См. 

https://www.audiokinetic.com/download/documents/TheWwiseApproach.pdf

https://www.audiokinetic.com/library/2015.1_5418/?source=WwiseFundamentalApproach&id=what_are_game_objects__what_are_game_objects

 

Если интересно, то вот примерно так это происходит

//Init engine
wwise = new Wwise();
wwise.Init();
wwise.InitReverb();
//create game object
wwObject = wwise.RegisterGameObject((uint)100, "Car");
wwise.Update();

//init banks
wwise.SetBasePath(basePath);
wwise.LoadBank("Init.bnk");
wwise.LoadBank(bank);
wwise.Update();

//emit sound from game object
wwObjectGlobal.PostEvent(eventName);

 

 

Чем хорошо и чем плохо использовать пару банков ExternalMusicSources.pck + ExternalMusicSources.bnk?

 

Банк тут только один - ExternalMusicSources.bnk. 

Я выложил его структуру в предыдущем сообщении, и там видно что он устроен немного сложнее обычных банков - в нем есть неопознанные события, mute, unmute, pause, resume. Т.е. без исходного проекта собрать 100% аналогичный не получится.

ExternalMusicSources.pck это запакованные streamed медиа файлы.

Но музыку можно поменять не трогая сам банк, а поместив свои файлы в ExternalMusicSources.pck.

  • Upvote 1
Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...