Звуковое окружение

From Valve Developer Community
< Ru
Jump to navigation Jump to search
English (en)Español (es)Français (fr)Русский (ru)中文 (zh)Translate (Translate)

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

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

Tip.pngСовет:
Note.pngПримечание:
  • Звуковые окружения в общем не будет работать, если карта не была скомпилирована с помощью VIS, хотя бы в быстром "-fast" режиме. Для правильной работы звуковых окружений требуется полная компиляция VIS.
  • Для правильного циклического воспроизведения звуковых файлов, они должны иметь соответствующую метку цикла. См. Зацикливание звука(en).
  • В большинстве ветвей платформы Source звуковые окружения не могут воспроизводить два экземпляра одного и того же звукового файла одновременно, даже если тон, громкость или звука различаются. Возможные решения приведены ниже.
  • По крайней мере, один радиус объекта звукового окружения или объём переключателя(en) должны охватывать info_player_start(en) или любые другие специфические для игры объекты появления игрока, иначе игроки будут появляться в тишине, без включения звукового окружения, пока не активируют его.

Сценарии Soundscapes

Просмотр звукового окружения

Как правило, сценарии звукового окружения находятся в директории имя_игры/scripts/, и хранятся в нескольких текстовых файлах с именами soundscapes_имя_карты.txt. (Они запакованы в оригинальные игры Valve, но при запуске карты автоматически переназначаются и распаковываются в эту папку.)

Сценарии звукового окружения можно подключать к карте по её имени

имя_игры/scripts/soundscapes_<имя_карты>.txt

где <имя_карты> это имя файла карты для которой они должны быть загружены. Эти сценарии звукового окружения будут автоматически подключаться к карте без необходимости изменения декларации и могут использоваться только указанной в названии картой.

Note.pngПримечание: В оригинальных играх Valve эти файлы обычно упакованы отдельно, но они могут быть автоматически подменены любыми файлами, распакованными в эту директорию.

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

Все имеющиеся звуковые окружения Вы можете прослушать непосредственно в игре, используя команду управления PlaySoundscape. После ввода символов команды, отображается выпадающий список сценариев звукового окружения, который можно прокручивать стрелками на клавиатуре.

Настройка звукового окружения

Звуковое окружение может настраиваться только через эти объекты мира:

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

Всякий раз, когда объекты активируют звуковое окружение, в местоположении указанных в его свойствах целевых объектов воспроизводится звук.

Tip.pngСовет: В большинстве сценариев звукового окружения используется указание местоположения для воспроизведения звука, поэтому просто посмотрите их запись, чтобы понять как это делать. Большинство записей находятся в текстовых файлах, перечисленных в файле-декларации <имя_игры>/scripts/soundscapes_manifest.txt. Чтобы лучше понимать записи сценария звукового окружения, Создание звукового окружения(en).

Активация звукового окружения

Объекты звукового окружения переключаются персонажем игрока или программно, другим указанным управляющим объектом. Они работают до тех пор, пока не сменится карта или их не отключит другое звуковое окружение, даже если активировавший его объект будет отключен.

Tip.pngСовет: Используйте команду управления soundscape_flush, чтобы отключить действующее звуковое окружение.

Объекты звукового окружения

Звуковое окружение активируется любым из следующих объектов мира:

Звуковое окружение является точечным объектом мира(en), но включаются, когда игровой персонаж приближается к дальности их действия, находясь в области прямой видимости(en).

Два исключения из этого правила - env_soundscape_proxy(en) (вызываемый через env_soundscape(en) или env_soundscape_triggerable(en)), и env_soundscape_triggerable(en) (обычно вызываемый trigger_soundscape(en)).

Всегда активно только одно звуковое окружение, но если одновременно срабатывают несколько звуковых окружений, то приоритет отдается ближайшему. (Радиус звукового окружения всегда имеет приоритет над объёмами trigger_soundscape(en).)

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

Tip.pngСовет: Используйте переменную управления(en) soundscape_debug(en), чтобы понять, какой объект активен и почему.

Размещение звукового окружения

Во первых, размещайте действительно необходимое количество объектов звукового окружения. Прослушав несколько звуковых окружений, выберите основное. Затем, разместите второстепенные звуковые окружения в контрастирующих локациях (таких как дом, комната с генератором). Убедитесь, чтобы каждый объект звукового окружения, использующий позиционированные звуки, был связан к соответствующими целевыми объектами.

После составления общего плана карты и понимания того, где необходимо расположить объекты звукового окружения, можете начать добавлять/настраивать объекты, запускающие соответствующие объекты звукового окружения, и создать своего рода "блок-схему" последовательности переключения звуковых окружений от одного к другому. В большинстве случаев вы будете перекрывать все выходы из отличающихся пространств, размещая объекты переключатели для ваших основных звуковых окружений. По сути, цель состоит в том, чтобы проанализировать перемещение игрока на карте и сделать переключение сценариев звукового окружения соответствующим переходам между этими пространствам.

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

Множественное использование звука в одном сценарии

На данный момент в большинстве ветвей Source невозможно одновременно воспроизводить два или более одинаковых звука в одном звуковом окружении, даже если указаны разные громкость, тон или мощность звука.

Это было исправлено (Во всех играх начиная с Counter-Strike: Global Offensive)(также в Garry's Mod), что позволяет звуковым окружениям воспроизводить несколько одинаковых звуков одновременно. Исправление заключается в использовании enginesound->GetGuidForLastSoundEmitted() и связанных функций в c_soundscape.cpp для зацикленных звуков.

Уточнить: Было ли это исправлено в каких-либо предшествующих CS:GO играх?

Возможное решение - создать копию файла звука с другим именем. Это может быть обходным путём для очень коротких звуков, таких как лёгкое гудение, но не рекомендуется для других, поскольку это бесполезно увеличивает общий размер. Именно так было сделано Valve на карте cs_militia Counter-Strike Source(en). На кухне есть две люминесцентные лампы со звуком гудения, для первой используется ambient/machines/fluorescent_hum_1.wav, а для второй - ambient/machines/fluorescent_hum_2.wav. Оба этих звука одинаковые, но должны иметь разные имена, чтобы их можно было использовать в одном звуковом окружении.

Другой пример - представленная ниже ситуация. Необходимо, чтобы в местоположении 3-х люминесцентных ламп звучало гудение. Для правильной работы, файл сценария звукового окружения и объекты Hammer должны быть настроены следующим образом.

Soundscape identicalsounds.jpg
Hammer identicalsounds.jpg
"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 и т.д. По неизвестной на данный момент причине это работает не всегда и не при каждой загрузке карты. Дополнительную информацию смотрите в статье Звуковые сценарии(en).

Собственное звуковое окружение

Создание

Сценарии звукового окружения очень похожи на звуковые сценарии(en), но по сути они совершенно разные.

Для сценариев звукового окружения применяются несколько специфичных правил и они размещаются в текстовых файлах отдельно от файлов обычных звуковых сценариев. Типичный файл сценариев звукового окружения может называться soundscape_mall.txt, и содержать от 5-30 различных сценариев звукового окружения, которые имеют следующий формат:

Icon-Bug.pngБаг:Если имя звукового окружения слишком длинное, объекты звукового окружения не смогут его использовать, хотя его можно будет переключить через терминал управления. Ограничение количества символов неизвестно.
 <имя>
 {
 	<правило>
 	{
 		<ключ-параметр>
 		...
 	}
 
 	...
 }

Общие ключ-параметры

wave <строка(en)>
Путь и имя файла воспроизводимого звука, относительно <имя_модификации>/sound/.
Tip.pngСовет: Несмотря на название, этот ключ-параметр используется для воспроизведения любых поддерживаемых типов звуковых файлов, а не только WAV(en)-файлов.
volume <норма(en)>
1 - полная громкость, 0 - тишина.
pitch <целое число(en)>
Высота тона звука в процентах. 70-130 - полезный диапазон.
music <булева переменная(en)> (только в The Ship: Murder Party)
Звук считается "музыкой" и подчиняется настройке громкости. Аналогично указанию знака звука #, только с применением DSP-эффектов(en) и является направленным.
Sound attenuation.jpg
position <0-7>
Одно из восьми местоположений на карте (определяются при создании карты), откуда воспроизводится звук.
Note.pngПримечание: Звуки без указания местоположения являются общими, с независимости от указания знаков звука.
position random
Звук воспроизводится из абсолютно произвольного места на расстоянии 36 единиц, относительно персонажа игрока.
Note.pngПримечание: В играх до Left 4 Dead работает только совместно с playrandom. Начиная с Left 4 Dead (также в Garry's Mod), playlooping может использовать position random.
origin <координаты(en)> (Во всех играх начиная с Left 4 Dead) (также в Garry's Mod)
Воспроизводит звук из указанного начала отсчёта, например "0,0,0". Координаты должны быть разделены запятыми, лидирующие и замыкающие пробелы игнорируются.
Note.pngПримечание: Аналогично position, но местоположение воспроизводения звука определятся сценарием. Полезно только для звуковых окружений, предназначенных для одной карты, потому что на других картах не будет возможности изменить местоположение звука.
attenuation <число с плавающей запятой(en)>
Скорость затихания звуков по мере удаления камеры от них. Соответствует только указанному местоположению position. Значение по умолчанию: "1.00". Чем меньше значение, тем больше будет дальность распространения звука. И наоборот, чем больше значение, тем меньше будет дальность распространения звука. Наглядный пример приведен на рисунке справа.
soundlevel <строка(en)>
Мощность звука, может использоваться вместо attenuation (затихания). Допускается одно из предустановленных значений(en).
Warning.pngПредупреждение: Не забывайте заключать в "двойные кавычки" все значения с пробелами.
suppress_on_restore <булева переменная(en)>
Предотвращает повторное воспроизведение звука при загрузке сохранённой игры.
Tip.pngСовет: Это предназначено для фоновой музыки, длительно воспроизводимой в звуковом окружении.

Случайные значения

Некоторые правила допускают указание 'максимального' и 'минимального' значений параметра. Например:

 "pitch"	"80,120"

Всякий раз при выполнении правила, будет выбираться случайное значение из заданного диапазона.

Правила

playlooping

 "playlooping"
 {
 	"volume"	"0.98"
 	"pitch"		"110"
 	"soundlevel"	"SNDLVL_85dB"
 
 	"position"	"0"
 
 	"wave"	"ambient/swamps/water_Lap_loop_st.wav"
 }

Проигрывает звук непрерывно. Не допускаются случайные значения.

Note.pngПримечание: Звук не будет воспроизводиться циклически, если в файле нет меток петли. Смотрите Зацикливание звука(en).
Icon-Bug.pngБаг:Если включить другое звуковое окружение, содержащее тот же самый звук в "playlooping", но с другим значением тона "pitch", воспроизведение звука прекратится, если оно не было запущено повторно из другого звуковго окружения, не содержащего указанного звука.

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 (даже одиночный). Каждый раз при выполнении правила будет выбираться случайное значение.

Icon-Bug.pngБаг:Если указать местоположение случайного звука без указания затихания, то звук будет воспроизводиться "везде", как если бы положение не указывалось.  (подтверждено в: Garry's Mod)
Warning.pngПредупреждение: Будьте осторожны и не указывайте зацикленные звуки в группе playrandom, поскольку они не остановятся при активировании другого звукового окружения.
Note.pngПримечание: Воспроизведение даже на зацикленных звуков, таких как MP3-файлы, не будет остановлено при активации другого объекта звукового окружения.  (подтверждено в: Counter-Strike: Source)

playsoundscape

 "SubScape"
 { 
 	"playsoundscape"
 	{ 
 		"name"	"GenericIndoor"
 
 		// Общая громкость подсценария 50% 
 		"volume"	"0.5"
 
 		// Воспроизводить все позиционированные звуки из местоположения 0
 		"positionoverride"	"0"
 
 		// Воспроизводить все общие звуки из местоположения 1
 		"ambientpositionoverride"	"1"
 	} 
 }

Воспроизводит весь сценарий. Игнорируются предустановки DSP, указанные внутри подсценария.

name <строка(en)>
Имя воспроизводимого сценария.
position <целое число(en)>
Смещает индекс каждого местоположения сценария.
positionoverride <целое число(en)>
Переопределяет воспроизведение всех позиционированных звуков в подсценарии из указанного местоположения.
ambientpositionoverride <целое число(en)>
Переопределяет воспроизведение всех общих звуков в подсценарии из указанного местоположения.
ambientoriginoverride <координаты(en)> (Во всех играх начиная с Portal 2) (также в Garry's Mod)
Принудительно воспроизводить все общие звуки в подсценарии из указанного начала отсчёта.

dsp <целое число>

// Отключить DSP-эффект и окружающие звуки
"Empty"
{ 
	"dsp"	"0"
	"dsp_volume"	"1.0"
}

//Тип помещения/пространства DSP с типом пространственного эффекта
"Empty2"
{ 
	"dsp"	"40"
        "dsp_spatial"	"119"
	"dsp_volume"	"1.0"
}
dsp_spatial <целое число(en)>
dsp_volume <число с плавающей запятой(en)>

Переопределяет текущую предустановку DSP(en). "dsp" "1" будет получен из $surfaceprop(en) или материалов(en) на ближайших элементах карты.

Список возможных значений DSP-эффекта смотрите в scripts/dsp_presets.txt. Возможно, потребуется извлечь его из соответствующего VPK-файла с помощью GCFScape(en). Для просмотра предустановки DSP, воспользуйтесь командой room_type <целое число(en)> в терминале управления.

Note.pngПримечание: Будьте осторожны при установке предустановок в сценариях, которые могут использоваться в разных местах.
Note.pngПримечание: Для определения громкости DSP-эффекта также можно использовать dsp_volume.
Note.pngПримечание: В новых ветвях Source (2009+) переменная cvar для room_type представлена в виде dsp_room с добавлением предустановки пространственного DSP-эффекта dsp_spatial.
Note.pngПримечание: Тип пространственного DSP-эффекта можно указать для звукового окружения в сочетании с типом помещения ("dsp") при помощи параметра "dsp_spatial" "n"

fadetime <число с плавающей запятой>

"SoundScapeName"
{
	"fadetime"  "1.0"
	"playlooping"
	{
		// ...
	}
}

(Во всех играх начиная с Alien Swarm)(также в Garry's Mod)

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

Note.pngПримечание: В играх без затихания звука, например Counter-Strike: Source, можно частично контролировать его, установив громкость больше 1, что увеличит время затихания звука этого звукового окружения.
Icon-Bug.pngБаг:If set to 0 this value will be ignored, and will instead use the value of the soundscape_fadetime cvar. If that value is also set to 0 it will use a default time of 3 [подтвердить] seconds. A workaround is to set this to a really low value near 0.  (подтверждено в: Portal 2)

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"
		}
	}
}
Warning.pngПредупреждение: Использование MP3-файлов для звукового окружения поможет сократить размер пользовательских карт, но это не рекомендуется для зацикленных звуков. Может случиться, что ПЕРВЫЙ файл в "rndwave" начнёт воспроизводиться по истечении половины указанного времени. Тогда придется удвоить значение (в нашем случае 418, но теперь возникнет пауза между повторами). Рассмотрите возможность использования ADPCM-сжатия WAV; смотрите Сжатие звука(en).

Сохранение и работа с собственными звуковым окружением

Игра использует файл-декларацию scripts/soundscapes_manifest.txt для поиска файлов сценариев звукового окружения, но можно использовать scripts/soundscapes_%имя карты%.txt для загрузки сценариев звукового окружения к отдельной карте. Все сценарии звуковых окружений загружаются при запуске карты в игре.

Note.pngПримечание: В Mapbase Mapbase название файла-декларации изменёно на maps/%имя_карты%_soundscapes.txt. Fortress Forever Fortress Forever поддерживает оба варианта.

Создание soundscapes_%имя_карты%.txt следует использовать, когда изменение декларации не требуется или невозможно (например, для пользовательских карт без отдельной директории модификации). Этот файл также можно упаковать в сам BSP-файл(en).

Она будет искать этот файл-декларацию (и общие сценарии) в директории scripts\ при запуске карты. Где находится эта директория (и корневая директория пользовательских сценариев звукового окружения), зависит от того, является ли игра модификацией(en) (создается через Create a Mod), или оригинальной игрой Valve:

  • Если это модицикация, игра будет искать в его корневой директории.
  • Если это оригинальная игра Valve, игра будет искать в директории имя_игры\. (Например, в случае с Half-Life 2: Episode One(en), игра будет искать декларацию в директории Steam\SteamApps\пользователь\half-life 2 episode one\episodic\scripts\.) В этом случае директория scripts\ должна быть создана вручную, и все пользовательские soundscapes_manifest.txt находясь здесь, будут переопределять оригинальный файл.

Чтобы добавить новый сценарий звукового окружения в файл-декларацию, просто дополните его в конце строкой:

	"file"		"<путь к файлу>"
Icon-Important.pngВажно: Все имена сценариев звукового окружения должны быть уникальны в пределах игры.
Warning.pngВозможна путаница:Хотя звуковые сценарии для отдельной карты подключаются аналогичным образом через файл maps/%имя_карты%_level_sounds.txt, файлы звуковых окружений подключаются из директории scripts и начинаются с soundscapes_, а не из директории maps с %именем_карты% в начале. Вы по-прежнему можете одновременно использовать как звуковые сценарии для отдельных карт, так и звуковые окружения для отдельных карт.
Tip.pngСовет: Если Вы хотите добавить на свою карту собственное звуковое окружение, но еще не сделали его, то должны подумать о создании полноценного мода(en) (через опцию Create a Mod в меню Source SDK). Это сохранит собственную декларацию от любых обновлений звукового окружения в оригинальной игре.

Создание звукового окружения с помощью XBLAH's Modding Tool

Смотрите XBLAH's Modding Tool/Docs/Sounds/Soundscape Editor

Смотреть также

Навигация