Звуковое окружение
Звуковое окружение (soundscape) - это тип звуковых сценариев, которые используются для воспроизведения в игре звуков окружающего мира. Их можно использовать на любых картах, достаточно использовать только один объект мира, при этом сетевой трафик не генерируется. Звуковое окружение состоит из зацикленных и произвольно воспроизводимых звуков, каждому из которых может быть указано до восьми местоположений; также могут применяться DSP-эффекты и Звуковой микшер.
Одновременно может работать только одно звуковое окружение, а его отдельные звуки не могут управляться с помощью входов. Когда игрок активирует следующее звуковое окружение, игра создает плавный переход между звуками от одного к другому.
- Время перехода между звуками задается переменной управления
soundscape_fadetimeилиfadetimeв новых платформах. - Используйте переменную управления
soundscape_debug, чтобы проверить, какое звуковое окружение активно и почему.
- Звуковые окружения в общем не будет работать, если карта не была скомпилирована с помощью VIS, хотя бы в быстром "-fast" режиме. Для правильной работы звуковых окружений требуется полная компиляция VIS.
- Для правильного циклического воспроизведения звуковых файлов, они должны иметь соответствующую метку цикла. См. Зацикливание звука.
- В большинстве ветвей платформы Source звуковые окружения не могут воспроизводить два экземпляра одного и того же звукового файла одновременно, даже если тон, громкость или звука различаются. Возможные решения приведены ниже.
- По крайней мере, один радиус объекта звукового окружения или объём переключателя должны охватывать info_player_start или любые другие специфические для игры объекты появления игрока, иначе игроки будут появляться в тишине, без включения звукового окружения, пока не активируют его.
Сценарии Soundscapes
Просмотр звукового окружения
Как правило, сценарии звукового окружения находятся в директории имя_игры/scripts/, и хранятся в нескольких текстовых файлах с именами soundscapes_имя_карты.txt. (Они запакованы в оригинальные игры Valve, но при запуске карты автоматически переназначаются и распаковываются в эту папку.)
Сценарии звукового окружения можно подключать к карте по её имени
имя_игры/scripts/soundscapes_<имя_карты>.txt
где <имя_карты> это имя файла карты для которой они должны быть загружены. Эти сценарии звукового окружения будут автоматически подключаться к карте без необходимости изменения декларации и могут использоваться только указанной в названии картой.
В нижней части этой статьи Вы найдёте ссылки на звуковые окружения отдельных игр, наряду с попытками их описания.
Все имеющиеся звуковые окружения Вы можете прослушать непосредственно в игре, используя команду управления PlaySoundscape. После ввода символов команды, отображается выпадающий список сценариев звукового окружения, который можно прокручивать стрелками на клавиатуре.
Настройка звукового окружения
Звуковое окружение может настраиваться только через эти объекты мира:
Есть другие объекты мира, которые активируют звуковое окружение, но только эти два фактически определяют свойства звукового окружения. Другие объекты мира могут указывать на них и включать дистанционно.
Всякий раз, когда объекты активируют звуковое окружение, в местоположении указанных в его свойствах целевых объектов воспроизводится звук.
<имя_игры>/scripts/soundscapes_manifest.txt. Чтобы лучше понимать записи сценария звукового окружения, Создание звукового окружения.
Активация звукового окружения
Объекты звукового окружения переключаются персонажем игрока или программно, другим указанным управляющим объектом. Они работают до тех пор, пока не сменится карта или их не отключит другое звуковое окружение, даже если активировавший его объект будет отключен.
soundscape_flush, чтобы отключить действующее звуковое окружение.
Объекты звукового окружения
Звуковое окружение активируется любым из следующих объектов мира:
- env_soundscape
- env_soundscape_triggerable (в свою очередь активируется через trigger_soundscape.)
- env_soundscape_proxy (в свою очередь активируется через env_soundscape или env_soundscape_triggerable.)
Звуковое окружение является точечным объектом мира, но включаются, когда игровой персонаж приближается к дальности их действия, находясь в области прямой видимости.
Два исключения из этого правила - env_soundscape_proxy (вызываемый через env_soundscape или env_soundscape_triggerable), и env_soundscape_triggerable (обычно вызываемый trigger_soundscape).
Всегда активно только одно звуковое окружение, но если одновременно срабатывают несколько звуковых окружений, то приоритет отдается ближайшему. (Радиус звукового окружения всегда имеет приоритет над объёмами trigger_soundscape.)
Обратите внимание, что звуковое окружение не прекращает воспроизведение звука, если игровой персонаж выйдет из радиуса его действия или прямой видимости.
Размещение звукового окружения
Во первых, размещайте действительно необходимое количество объектов звукового окружения. Прослушав несколько звуковых окружений, выберите основное. Затем, разместите второстепенные звуковые окружения в контрастирующих локациях (таких как дом, комната с генератором). Убедитесь, чтобы каждый объект звукового окружения, использующий позиционированные звуки, был связан к соответствующими целевыми объектами.
После составления общего плана карты и понимания того, где необходимо расположить объекты звукового окружения, можете начать добавлять/настраивать объекты, запускающие соответствующие объекты звукового окружения, и создать своего рода "блок-схему" последовательности переключения звуковых окружений от одного к другому. В большинстве случаев вы будете перекрывать все выходы из отличающихся пространств, размещая объекты переключатели для ваших основных звуковых окружений. По сути, цель состоит в том, чтобы проанализировать перемещение игрока на карте и сделать переключение сценариев звукового окружения соответствующим переходам между этими пространствам.
После того, как последовательность переключений будет создана, можете настроить звуковые окружения/переключатели для выполнения сложных условий (например, реагирования на игровые события).
Множественное использование звука в одном сценарии
На данный момент в большинстве ветвей Source невозможно одновременно воспроизводить два или более одинаковых звука в одном звуковом окружении, даже если указаны разные громкость, тон или мощность звука.
Это было исправлено (Во всех играх начиная с
)(также в
), что позволяет звуковым окружениям воспроизводить несколько одинаковых звуков одновременно. Исправление заключается в использовании enginesound->GetGuidForLastSoundEmitted() и связанных функций в c_soundscape.cpp для зацикленных звуков.
Возможное решение - создать копию файла звука с другим именем. Это может быть обходным путём для очень коротких звуков, таких как лёгкое гудение, но не рекомендуется для других, поскольку это бесполезно увеличивает общий размер. Именно так было сделано Valve на карте cs_militia Counter-Strike Source. На кухне есть две люминесцентные лампы со звуком гудения, для первой используется ambient/machines/fluorescent_hum_1.wav, а для второй - ambient/machines/fluorescent_hum_2.wav. Оба этих звука одинаковые, но должны иметь разные имена, чтобы их можно было использовать в одном звуковом окружении.
Другой пример - представленная ниже ситуация. Необходимо, чтобы в местоположении 3-х люминесцентных ламп звучало гудение. Для правильной работы, файл сценария звукового окружения и объекты Hammer должны быть настроены следующим образом.
"soundscape.demovdc"
{
"playlooping"
{
"volume" ".65"
"pitch" "92"
"channel" "CHAN_AUTO"
"position" "0"
"attenuation" "1.2"
"wave" "ambient\machines\fluorescent_hum_1.wav"
}
"playlooping"
{
"volume" ".65"
"pitch" "92"
"channel" "CHAN_AUTO"
"position" "1"
"attenuation" "1.2"
"wave" "ambient\machines\fluorescent_hum_2.wav"
}
"playlooping"
{
"volume" ".65"
"pitch" "92"
"channel" "CHAN_AUTO"
"position" "2"
"attenuation" "1.2"
"wave" "ambient\machines\fluorescent_hum_3.wav"
}
}
Несмотря на то, что большинство ветвей Source не поддреживают воспроизведение более одного одинакового звука одновременно, в некоторых ситуациях оказывается возможным воспроизводить один и тот же звук несколько раз в разных местоположениях, используя звуковые каналы.
После многочисленных тестов в различных ситуациях и изучения исходного кода, кажется, что это возможно с помощью разных каналов. Например, вместо использования разных имен используются разные каналы, такие как CHAN_STATIC, CHAN_STREAM, CHAN_AUTO и т.д. По неизвестной на данный момент причине это работает не всегда и не при каждой загрузке карты. Дополнительную информацию смотрите в статье Звуковые сценарии.
Собственное звуковое окружение
Создание
Сценарии звукового окружения очень похожи на звуковые сценарии, но по сути они совершенно разные.
Для сценариев звукового окружения применяются несколько специфичных правил и они размещаются в текстовых файлах отдельно от файлов обычных звуковых сценариев. Типичный файл сценариев звукового окружения может называться soundscape_mall.txt, и содержать от 5-30 различных сценариев звукового окружения, которые имеют следующий формат:
<имя>
{
<правило>
{
<ключ-параметр>
...
}
...
}
Общие ключ-параметры
- wave <строка>
- Путь и имя файла воспроизводимого звука, относительно
.<имя_модификации>/sound/
Совет: Несмотря на название, этот ключ-параметр используется для воспроизведения любых поддерживаемых типов звуковых файлов, а не только WAV-файлов.
- volume <норма>
- 1 - полная громкость, 0 - тишина.
- pitch <целое число>
- Высота тона звука в процентах. 70-130 - полезный диапазон.
- music <булева переменная> (только в
) - Звук считается "музыкой" и подчиняется настройке громкости. Аналогично указанию знака звука
#, только с применением DSP-эффектов и является направленным.
- position <0-7>
- Одно из восьми местоположений на карте (определяются при создании карты), откуда воспроизводится звук.
Примечание: Звуки без указания местоположения являются общими, с независимости от указания знаков звука.
- position random
- Звук воспроизводится из абсолютно произвольного места на расстоянии 36 единиц, относительно персонажа игрока.
- origin <координаты> (Во всех играх начиная с
) (также в
) - Воспроизводит звук из указанного начала отсчёта, например "0,0,0". Координаты должны быть разделены запятыми, лидирующие и замыкающие пробелы игнорируются.
Примечание: Аналогично position, но местоположение воспроизводения звука определятся сценарием. Полезно только для звуковых окружений, предназначенных для одной карты, потому что на других картах не будет возможности изменить местоположение звука.
- attenuation <число с плавающей запятой>
- Скорость затихания звуков по мере удаления камеры от них. Соответствует только указанному местоположению
position. Значение по умолчанию: "1.00". Чем меньше значение, тем больше будет дальность распространения звука. И наоборот, чем больше значение, тем меньше будет дальность распространения звука. Наглядный пример приведен на рисунке справа. - soundlevel <строка>
- Мощность звука, может использоваться вместо
attenuation(затихания). Допускается одно из предустановленных значений.
- suppress_on_restore <булева переменная>
- Предотвращает повторное воспроизведение звука при загрузке сохранённой игры.
Совет: Это предназначено для фоновой музыки, длительно воспроизводимой в звуковом окружении.
Случайные значения
Некоторые правила допускают указание 'максимального' и 'минимального' значений параметра. Например:
"pitch" "80,120"
Всякий раз при выполнении правила, будет выбираться случайное значение из заданного диапазона.
Правила
playlooping
"playlooping"
{
"volume" "0.98"
"pitch" "110"
"soundlevel" "SNDLVL_85dB"
"position" "0"
"wave" "ambient/swamps/water_Lap_loop_st.wav"
}
Проигрывает звук непрерывно. Не допускаются случайные значения.
playrandom
"playrandom"
{
// Воспроизводить каждые 1-4 секунды
"time" "1,4"
"volume" "0.4,1"
"pitch" "90,105"
"soundlevel" "SNDLVL_85dB"
"position" "0"
"attenuation" "1"
"rndwave"
{
"wave" "ambient/wind/wind_med1.wav"
"wave" "ambient/wind/wind_hit1.wav"
}
}
Воспроизводит звук по истечении заданного периода времени в секундах, в диапазоне, указанном ключ-параметром time. Допускаются случайные значения
Для "playrandom" необходимо, чтобы все ключ-параметры wave были внутри rndwave (даже одиночный). Каждый раз при выполнении правила будет выбираться случайное значение.
playsoundscape
"SubScape"
{
"playsoundscape"
{
"name" "GenericIndoor"
// Общая громкость подсценария 50%
"volume" "0.5"
// Воспроизводить все позиционированные звуки из местоположения 0
"positionoverride" "0"
// Воспроизводить все общие звуки из местоположения 1
"ambientpositionoverride" "1"
}
}
Воспроизводит весь сценарий. Игнорируются предустановки DSP, указанные внутри подсценария.
- name <строка>
- Имя воспроизводимого сценария.
- position <целое число>
- Смещает индекс каждого местоположения сценария.
- positionoverride <целое число>
- Переопределяет воспроизведение всех позиционированных звуков в подсценарии из указанного местоположения.
- ambientpositionoverride <целое число>
- Переопределяет воспроизведение всех общих звуков в подсценарии из указанного местоположения.
- ambientoriginoverride <координаты> (Во всех играх начиная с
) (также в
) - Принудительно воспроизводить все общие звуки в подсценарии из указанного начала отсчёта.
dsp <целое число>
// Отключить DSP-эффект и окружающие звуки
"Empty"
{
"dsp" "0"
"dsp_volume" "1.0"
}
//Тип помещения/пространства DSP с типом пространственного эффекта
"Empty2"
{
"dsp" "40"
"dsp_spatial" "119"
"dsp_volume" "1.0"
}
- dsp_spatial <целое число>
- dsp_volume <число с плавающей запятой>
Переопределяет текущую предустановку DSP. "dsp" "1" будет получен из $surfaceprop или материалов на ближайших элементах карты.
Список возможных значений DSP-эффекта смотрите в scripts/dsp_presets.txt. Возможно, потребуется извлечь его из соответствующего VPK-файла с помощью GCFScape. Для просмотра предустановки DSP, воспользуйтесь командой room_type <целое число> в терминале управления.
dsp_volume.
fadetime <число с плавающей запятой>
"SoundScapeName"
{
"fadetime" "1.0"
"playlooping"
{
// ...
}
}
(Во всех играх начиная с
)(также в
)
Длительность времени для затихания звукового окружения, в секундах.
soundmixer <строка>
"quiet"
{
"soundmixer" "Citadel_Dialog_Only"
// ...
}
Выбирает пользовательский звуковой микшер. Звуковые микшеры управляют приоритетом и громкостью групп звуков; создать новые - в scripts\soundmixers.txt (В качестве шаблона ВСЕГДА используйте Default_Mix).
Пример
"swamp.water.slow"
{
"dsp" "1"
"dsp_spatial" "20"
"dsp_volume" "1.0"
"fadetime" "1.0"
"soundmixer" "outside_swap_mixer"
"playlooping"
{
"volume" "0.98"
"pitch" "110"
"soundlevel" "SNDLVL_85dB"
"position" "0"
"wave" "ambient/swamps/water_Lap_loop_st.wav"
}
"playrandom"
{
"time" "1,4"
"volume" "0.4,1"
"pitch" "90,105"
"soundlevel" "SNDLVL_85dB"
"origin" "3424.676025, 381.604095, 152.927948"
"rndwave"
{
"wave" "ambient/wind/wind_med1.wav"
"wave" "ambient/wind/wind_hit1.wav"
}
}
}
Зацикливание MP3-файлов
В Source нельзя зацикливать MP3-файлы, их рекомендуется использовать только для не зацикливаемых звуков. Тем не менее, можно имитировать зацикливание с помощью rndwave с идентичными файлами, установив время равное длительности звучания:
//////////// Звуки птиц (зацикленный mp3-файл от gtamike_TSGK) ////////////
//////////// 2 MP3-файла одинаковы, но отличаются по именам ////////////
//////////// Длительность звучания 3.29 минуты = 3 X 60 + 29 = 209 секунд ////////////
// mp3_loop
"mp3_loop"
{
"dsp" "1"
"playlooping"
{
"volume" "1.0"
"pitch" "100"
"soundlevel" "SNDLVL_150dB"
"wave" "loop_mp3_soundscape/outside_1MB_20KB_part_1.mp3"
}
"playrandom"
{
"time" "209"
"volume" "1.0"
"pitch" "100"
"soundlevel" "SNDLVL_150dB"
"rndwave"
{
"wave" "loop_mp3_soundscape/outside_1MB_20KB_part_1.mp3"
"wave" "loop_mp3_soundscape/outside_1MB_20KB_part_2.mp3"
}
}
}Сохранение и работа с собственными звуковым окружением
Игра использует файл-декларацию scripts/soundscapes_manifest.txt для поиска файлов сценариев звукового окружения, но можно использовать scripts/soundscapes_%имя карты%.txt для загрузки сценариев звукового окружения к отдельной карте. Все сценарии звуковых окружений загружаются при запуске карты в игре.
maps/%имя_карты%_soundscapes.txt. Создание soundscapes_%имя_карты%.txt следует использовать, когда изменение декларации не требуется или невозможно (например, для пользовательских карт без отдельной директории модификации). Этот файл также можно упаковать в сам BSP-файл.
Она будет искать этот файл-декларацию (и общие сценарии) в директории scripts\ при запуске карты. Где находится эта директория (и корневая директория пользовательских сценариев звукового окружения), зависит от того, является ли игра модификацией (создается через Create a Mod), или оригинальной игрой Valve:
- Если это модицикация, игра будет искать в его корневой директории.
- Если это оригинальная игра Valve, игра будет искать в директории
имя_игры\. (Например, в случае с Half-Life 2: Episode One, игра будет искать декларацию в директорииSteam\SteamApps\пользователь\half-life 2 episode one\episodic\scripts\.) В этом случае директорияscripts\должна быть создана вручную, и все пользовательскиеsoundscapes_manifest.txtнаходясь здесь, будут переопределять оригинальный файл.
Чтобы добавить новый сценарий звукового окружения в файл-декларацию, просто дополните его в конце строкой:
"file" "<путь к файлу>"
maps/%имя_карты%_level_sounds.txt, файлы звуковых окружений подключаются из директории scripts и начинаются с soundscapes_, а не из директории maps с %именем_карты% в начале. Вы по-прежнему можете одновременно использовать как звуковые сценарии для отдельных карт, так и звуковые окружения для отдельных карт.Создание звукового окружения с помощью XBLAH's Modding Tool
Смотрите XBLAH's Modding Tool/Docs/Sounds/Soundscape Editor
Смотреть также
- env_soundscape
- env_soundscape_proxy
- env_soundscape_triggerable
- trigger_soundscape
- Подсветка синтаксиса Notepad++
Навигация
| ||||||||