Создание звуковых модов (Wwise)
Автор оригинальной статьи: night_dragon_on
Содержание
- 1 Часть 1: Создание звукового банка (контейнера), *.bnk
- 2 Часть 2: Конвертация банка (контейнера) с расширением *.bnk в контейнер *.pck
- 3 Часть 3: Создание эвента (события) со случайным воспроизведением звука
- 4 Часть 4: Добавление своего звукового файла на события (из примеров включенных в готовый проект для Wwise)
- 5 Загрузка банка клиентом игры
- 6 Вопросы и ответы
- 7 Полезные ссылки
Часть 1: Создание звукового банка (контейнера), *.bnk
1) Скачиваем дистрибутив Wwise, устанавливаем и запускаем.
2) Создаем новый проект (снимаем галки в разделе «Import assets to project”, вводим название проекта в поле «Name»
3) В открывшемся проекте переходим во вкладку «SoundBanks»
4) Создаем новый банк (контейнер)
5) Вводим название и убеждаемся в создании банка (контейнера)
Обратите внимание – название банка можно редактировать только непосредственно в редакторе, при последующем переименовании собранного банка он потеряет свой функционал
6) Переходим во вкладку "Audio", в разделе "Actor-Mixer Hierarchy" создаем новую группу. Правой кнопкой мыши находим его во всплывающем меню, выбираем пункт "Actor-Mixer"
7) Создаем группы для каждого вида звуков в клиенте:
- "gui" - интерфейс
- "vehicles" - техника
- "voice" - голосовые уведомления
- "effects" - эффекты
- "ambient" - окружающая среда
- "music" - музыка в бою
- "music_hangar"- музыка в ангаре
8) Теперь зададим зависимость громкости проигрываемых звуков от положения ползунков в игровом клиенте
9) Переходим во вкладку "Game Syncs". Добавляем новую группу с наименованием "Settings" в категории "Game Parameters". Правой кнопкой мыши на группе "Settings" открываем окно создания параметра, выбираем пункт "Game Parameter"
10) Создаем пункты под каждый ползунок присутствующий в меню клиента, а именно:
- RTPC_ext_menu_volume_master
- RTPC_ext_menu_volume_gui
- RTPC_ext_menu_volume_vehicles
- RTPC_ext_menu_volume_voice
- RTPC_ext_menu_volume_ambient
- RTPC_ext_menu_volume_effects
- RTPC_ext_menu_volume_music
- RTPC_ext_menu_volume_music_hangar
11) Левой кнопкой мыши выбираем один из пунктов для его настройки. Задаем параметры минимального, максимального и дефолтного уровня громкости. Проделываем аналогичную операцию для остальных пунктов
12) Переходим во вкладку "Audio". Далее мы будем описывать добавление звукового файла оповещения перезарядки орудия, он относится к категории "интерфейс". Два раза кликаем левой кнопкой мыши на группе "gui" открылось окно параметров воспроизведения
13) Переходим во вкладку "RTPC"
14) Создаем два параметра "Voice Volume"
15) Одному присваиваем нашу ранее созданную клиентскую зависимость "gui", другой привязываем к общему ползунку "master"
16) Зависимость громкости проигрываемого звука от положения ползунков в игровом клиенте добавлена
17) Аналогичные операции проделываем для оставшихся групп, после присвоения свойств в окне "Contents Editor" возле каждой группы будет подсвечен голубой знак
18) Добавляем звуковые файлы, левой кнопкой мыши нажимаем на группу
19) Нажимаем кнопку "Add Files"
20) Выбираем звуковые файлы на диске
21) Убеждаемся в добавлении звука
22) Название автоматически создается по названию аудио файла на диске, при необходимости можно изменить
23) Переходим во вкладку "Events"
24) Создаем новое событие
25) Вводим название (продолжаем создание события перезарядки орудия)
Обратите внимание - Название события выбирается таким образом чтобы оно не совпадало с клиентским. К примеру стандартное наименование события для перезарядки орудия выглядит так:
- gun_reloaded
Чтобы отделить стандартное клиентское событие от созданного нами в его названии достаточно добавить приставку или окончание. Далее все примеры будут описаны с единой приставкой "SM_", вы вправе выбрать любое приемлемое для себя, все ограничивается лишь вашей фантазией
- SM_gun_reloaded
- mod_gun_reloaded
- audio_gun_reloaded
- gun_reloaded_mod
- gun_reloaded_audio
- и т.п.
26) Привязываем новосозданное событие к ранее добавленному звуковому файлу, нажимаем кнопку "Browse"
27) Выбираем звук из раздела "Actor-Mixer Hierarchy", группы "gui"
28) Проверяем привязку звука к событию в окне "Event Editor"
29) Переходим во вкладку "SoundBanks"
30) Два раза нажимаем кнопкой мыши на нашем банке (контейнере)
31) Переходим во вкладку "Events" (окно настройки банка должно быть открыто), перетаскиваем мышью наше событие в контейнер (все остальные параметры, в том числе и звук из вкладки "Audio" подхватятся автоматически
32) Закрываем настройки банка и переходим во вкладку "ShareSets", открываем пункт "Default Conversion Settings"
33) Открываем настройки конвертации и выбираем формат сжатия банка, "Format - Vorbis" и его качество "Quality"
По умолчанию оптимальное значение выставляемого качества находится в районе от 4 до 6 единиц для проигрывания крупного банка (контейнера) с множеством количеством эвентов (событий) и звуковых файлов. Чем меньше выставляемое качество, тем меньший размер выходного файла мы получим после сборки. Далее в примере используем значение "6"
34) Переходим во вкладку "SoundBanks", нажимаем правой кнопкой мыши на нашем банке (контейнере), переходим в пункт сборки банка
35) Банк (контейнер) собран
36) Открываем папку созданного проекта, по умолчанию находится в папке пользователя в разделе документы, WwiseProjects
37) Открываем папку "GeneratedSoundBanks", забираем наш готовый файл
Часть 2: Конвертация банка (контейнера) с расширением *.bnk в контейнер *.pck
1) Проделываем операции с пункта 1 по 22 (из части 1)
2) Задаем параметр "Stream" для добавленного аудио файла
3) Проделываем операции с пункта 23 по 33 (из части 1)
4) Перед компиляцией проекта зададим вывод метаданных в файл .*xml
5) Переходим в пункт "Project > Project Settings"
6) Отмечаем поля "Generate Metadata File" и "Generate XML Metadata"
7) Проделываем операции с пункта 34 по 37 (из части 1)
8) Далее в контексте будет использован банк (контейнер) с наименованием "SM_gun_reloaded"
9) В выходной директории собран наш банк, файл метаданных к нему и запакованные аудио файлы в формате *.wem
10) Теперь нам нужно запустить утилиту "FilePackager.App", которая расположена по пути:
- {Wwise Install Folder} \ x86 \ Release \ bin \ tools \ FilePackager.App.exe
11) В открытом окне программы в разделе "Packages" удаляем дефолтный пакет
12) В пункте "SoundsBanks Info file" указываем путь до папки с нашим банком (контейнером), выбирая файл метаданных
13) Создаем в разделе "Packages" новый шаблон для *.bnk контейнера (по наименованию нашего банка (контейнера) *.bnk)
14) Выбираем в разделе "Default file assignments" наш шаблон, в параметрах "Streams" и "Streamed files"
15) В разделе "File to package" выбираем данные от нашего банка (контейнера) с префиксом "StreamedFile", нажимаем кнопку "Add to current package"
16) В пункте "Output directory" указываем путь куда будет сохранен собранный контейнер *.pck
17) Переходим в пункт "Generate > All packages", собираем наш контейнер
18) Открываем папку, забираем наш готовый файл
Часть 3: Создание эвента (события) со случайным воспроизведением звука
1) Проделываем операции с пункта 1 по 17 (из части 1)
2) В 18 пункте в группе "gui" создаем рандомный контейнер, правой кнопкой мыши находим его во всплывающем меню
3) Контейнер создан
4) Добавляем звуковые файлы, левой кнопкой мыши нажимаем на созданный рандомный контейнер
5) Проделываем операции с пункта 19 по 22 (из части 1)
6) Звуки добавлены
7) Проделываем операции с пункта 23 по 26 (из части 1)
8) В 27 пункте выбираем звуки из созданного рандомного контейнера
9) Звуки добавлены
10) Проделываем операции с пункта 28 по 37 (из части 1), банк (контейнер) готов
Часть 4: Добавление своего звукового файла на события (из примеров включенных в готовый проект для Wwise)
1) Скачиваем готовый проект.
2) Скачиваем программу Wwise, устанавливаем, запускаем.
3) Открываем наш проект, игнорируем всплывающую ошибку о нехватке файлов в проекте (это нормально, незатронутые файлы проекта в процессе редактирования не были помещены в архив с примером, добавляются автоматически при открытии)
4) Главное окно программы
5) Далее продемонстрирую пример замены оповещения повреждения вашей боеукладки, выбираем в списке наш файл
6) Удаляем текущий звуковой файл привязанный к событию, левой кнопкой мыши выделяем файл в окне "Contents Editor"
7) Импортируем свой звуковой файл
8) Нажимаем кнопку "Add Files"
9) Выбираем звуковые файлы на диске
10) Убеждаемся в добавлении звука, нажимаем кнопку "Import"
11) Переходим во вкладку "SoundBanks", нажимаем левой кнопкой мыши на нашем банке (контейнере), переходим в пункт сборки банка
12) Банк (контейнер) собран
13) Открываем папку проекта, переходим в подпапку "GeneratedSoundBanks", забираем наш готовый файл
14) Заменяем файл банка в папке "audioww" для соответствующего оповещения
Загрузка банка клиентом игры
Загрузка стандартными средствами клиента
Для подхвата вашего банка (контейнера) игровым клиентом вы должны внести его в список конфигурационного файла: audio_mods.xml
- <audio_mods.xml>
- ...
- <loadBanks>
- <bank>sound_mod.bnk</bank>
- </loadBanks>
- ...
- </audio_mods.xml>
Где, "sound_mod.bnk" - наш банк (контейнер) который мы хотим подключить.
Банк (контейнер) должен быть помещен вместе с загрузочным файлом audio_mods.xml по пути: res_mods/X.Y.Z/audioww
где X.Y.Z - папка с названием текущей версии игрового клиента.
Загрузка в модификации XVM (eXtended Visualization Mod)
Для загрузки банка (контейнера) клиентом необходимо прописать его в настройках файла модификации sounds.xc
- "sounds": {
- "soundBanks": {
- "battle": ["xvm://audioww/xvm.bnk", "xvm://audioww/sound_mod.bnk"],
- "hangar": ["xvm://audioww/xvm.bnk"]
- "soundBanks": {
- }
Добавив свой банк (контейнер) в поле "hangar" вы загрузите его в ангарном интерфейсе, в "battle" - в боевом интерфейсе. В примере наш банк с наименованием "sound_mod.bnk", который расположен по пути: res_mods/mods/shared_resources/xvm/audioww
Загрузка посредством дополнения - BanksLoader
Подробные сведения можно узнать в статье автора на сайте koreanrandom: BanksLoader (Polyacov_Yury).
Список кодов ошибок, возникающих при загрузке банка (контейнера)
- 0 - NotImplemented
- 1 - Success
- 2 - Fail
- 3 - PartialSuccess
- 4 - NotCompatible
- 5 - AlreadyConnected
- 6 - NameNotSet
- 7 - InvalidFile
- 8 - AudioFileHeaderTooLarge
- 9 - MaxReached
- 10 - InputsInUsed
- 11 - OutputsInUsed
- 12 - InvalidName
- 13 - NameAlreadyInUse
- 14 - InvalidID
- 15 - IDNotFound
- 16 - InvalidInstanceID
- 17 - NoMoreData
- 18 - NoSourceAvailable
- 19 - StateGroupAlreadyExists
- 20 - InvalidStateGroup
- 21 - ChildAlreadyHasAParent
- 22 - InvalidLanguage
- 23 - CannotAddItseflAsAChild
- 24 - TransitionNotFound (The transition is not in the list).
- 25 - TransitionNotStartable (Start allowed in the Running and Done states).
- 26 - TransitionNotRemovable (Must not be in the Computing state).
- 27 - UsersListFull (No one can be added any more - could be MaxReached).
- 28 - UserAlreadyInList (This user is already there).
- 29 - UserNotInList
- 30 - NoTransitionPoint
- 31 - InvalidParameter
- 32 - ParameterAdjusted
- 33 - IsA3DSound
- 34 - NotA3DSound
- 35 - ElementAlreadyInList
- 36 - PathNotFound
- 37 - PathNoVertices
- 38 - PathNotRunning
- 39 - PathNotPaused
- 40 - PathNodeAlreadyInList
- 41 - PathNodeNotInList
- 42 - VoiceNotFound
- 43 - DataNeeded
- 44 - NoDataNeeded
- 45 - DataReady
- 46 - NoDataReady
- 47 - NoMoreSlotAvailable
- 48 - SlotNotFound
- 49 - ProcessingOnly
- 50 - MemoryLeak
- 51 - CorruptedBlockList
- 52 - InsufficientMemory
- 53 - Cancelled
- 54 - UnknownBankID
- 55 - IsProcessing
- 56 - BankReadError
- 57 - InvalidSwitchType
- 58 - VoiceDone
- 59 - UnknownEnvironment
- 60 - EnvironmentInUse
- 61 - UnknownObject
- 62 - NoConversionNeeded
- 63 - FormatNotReady
- 64 - WrongBankVersion
- 65 - DataReadyNoProcess
- 66 - FileNotFound
- 67 - DeviceNotReady
- 68 - CouldNotCreateSecBuffer
- 69 - BankAlreadyLoaded
- 71 - RenderedFX
- 72 - ProcessNeeded
- 73 - ProcessDone
- 74 - MemManagerNotInitialized
- 75 - StreamMgrNotInitialized
- 76 - SSEInstructionsNotSupported
- 77 - Busy
- 78 - UnsupportedChannelConfig
- 79 - PluginMediaNotAvailable
- 80 - MustBeVirtualized
- 81 - CommandTooLarge
- 82 - RejectedByFilter
- 83 - InvalidCustomPlatformName
Вопросы и ответы
Q: Файлы какого формата можно упаковать в банк (контейнер) звуков?
A: Программа Wwise поддерживает входные файлы следующих форматов: *.wav, *.mid
Q: Как прослушать и извлечь звуковые файлы из альтернативной готовой озвучки (либо стандартные звуки) из банков (контейнеров)?
A:
1. Для начала нам понадобится программа: RavioliGameTools
2. Скачиваем и распаковываем (для работы программы понадобится наличие .NET Framework 4.0, Visual C++ 2005 SP1 Runtime).
3. Открываем нужный вам звуковой банк в программе.
4. После нахождения нужного вам звука отмечаем его и переходим в меню "Extract", выбираем папку для извлекаемого файла и нужный формат (*.wav или *.ogg).
В случае если извлеченный вами звуковой файл *.wav не проигрывается плеером, и при открытии в окне программы RavioliGameTools выводится ошибка поддержки формата:
"Sound conversion failed (FMOD error! ERR_FORMAT - Unsupported file or audio format. ). Extracting file without conversion."
Вам может помочь последующая конвертация звуковых файлов:
1. Скачиваем архив: convert_IMA_ADPCM.zip
2. Распаковать содержимое архива в папку с извлеченными из банка (контейнера) *.wav файлами.
3. Запустить .bat файл дождаться завершение операции.
4. Файлы перекодированы.
Q: Переименовал банк (контейнер) теперь звуки не воспроизводятся?
A: Редактировать название банка (контейнера) можно только в процессе его создания в Wwise
Q: Добавил свой эвент (событие) в банк (контейнер), прописываю его в конфигурационном файле, а в клиенте звук воспроизводится стандартный?
A: Названия эвентов (событий) прописываемые при создании банка (контейнера) не должны совпадать с клиентскими, добавляйте приставку или окончание в начале своего эвента (события), например:
gun_reloaded >>> SM_gun_reloaded
Полезные ссылки
- Замена звуков - Звуки на различные события - Компоненты XVM
- Коммуникация между клиентом WoT и WWISE Authoring Tools
- BankPlayer - альтернативный проигрыватель для банков (контейнеров) от D2R52
- BankJoin - программа для объединения нескольких банков в один от D2R52
- Учебник по работе с Wwise-сом состоящий из семи уроков (на английском языке).