Изменение стереобазы EmitSoundToClient

iamdss

Участник
Сообщения
126
Реакции
12
Необходимо стало изменить стереобазу звука, сдвинув полностью влево или вправо. Для чего нужно - пишу плагин для HL2DM для воспроизведения звуков рикошета и промахов мимо головы и хотелось бы, в зависимости от расположения конечной точки выстрела, сдвигать и стереобазу. Иначе звук получается менее естественным, так как стандартные звуки HL2 уже являются стерео и меняют канал. Как это возможно осуществить при условии, что я использую EmitSoundToClient?
 

iamdss

Участник
Сообщения
126
Реакции
12
Спасибо. Ещё такой вопрос. Чем, собственно, отличается EmitAmbientSound от EmitSoundToAll? Параметры схожи. И ещё у меня вопрос по параметрам Emit_ функций:

C-подобный:
const char[] name
  Тут понятно.

const float[3] pos
  Позиция источника звука.

int entity
  Entity index to associate sound with - не понятно, зачем присваивать звуку энтити и что это даёт? Перемещаться с ней будет?

int level
  Уровень - что это и чем отличается от объёма?

int flags
  Что значат флаги? (Список видел в инклудах, но не пойму смысла)

float vol
  Объём - в чём отличие от уровня?

int pitch
  Слава Богу, это тоже понятно.

float delay
  Задержка, тоже ясно.

Существует также такой параметр как канал, что это? И чем отличается, к примеру, SNDCHAN_WEAPON от SNDCHAN_BODY?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
iamdss, EmitAmbientSound проигрывает звуки не персонально каждому указанному игроку, а звук привязанный к точке на карте. Тоесть те кто ближе будут слышать звук громче, кто дальше - тише, а то и вовсе не слышать. Таким образом воспроизводятся звуки шагов, выстрелов и прочее.

int entity - это устаналивает эту ентити источником звука (возможно перемеещение, не проверял)

Насчет остального:
Sound channels.
enum
{
SNDCHAN_REPLACE = -1, /**< Unknown */
SNDCHAN_AUTO = 0, /**< Auto */
SNDCHAN_WEAPON = 1, /**< Weapons */
SNDCHAN_VOICE = 2, /**< Voices */
SNDCHAN_ITEM = 3, /**< Items */
SNDCHAN_BODY = 4, /**< Player? */
SNDCHAN_STREAM = 5, /**< "Stream channel from the static or dynamic area" */
SNDCHAN_STATIC = 6, /**< "Stream channel from the static area" */
SNDCHAN_VOICE_BASE = 7, /**< "Channel for network voice data" */
SNDCHAN_USER_BASE = 135 /**< Anything >= this is allocated to game code */
};


Sound flags for the sound emitter system.
enum
{
SND_NOFLAGS= 0, /**< Nothing */
SND_CHANGEVOL = 1, /**< Change sound volume */
SND_CHANGEPITCH = 2, /**< Change sound pitch */
SND_STOP = 3, /**< Stop the sound */
SND_SPAWNING = 4, /**< Used in some cases for ambients */
SND_DELAY = 5, /**< Sound has an initial delay */
SND_STOPLOOPING = 6, /**< Stop looping all sounds on the entity */
SND_SPEAKER = 7, /**< Being played by a mic through a speaker */
SND_SHOULDPAUSE = 8, /**< Pause if game is paused */
};


Various predefined sound levels in dB.
enum
{
SNDLEVEL_NONE = 0, /**< None */
SNDLEVEL_RUSTLE = 20, /**< Rustling leaves */
SNDLEVEL_WHISPER = 25, /**< Whispering */
SNDLEVEL_LIBRARY = 30, /**< In a library */
SNDLEVEL_FRIDGE = 45, /**< Refridgerator */
SNDLEVEL_HOME = 50, /**< Average home (3.9 attn) */
SNDLEVEL_CONVO = 60, /**< Normal conversation (2.0 attn) */
SNDLEVEL_DRYER = 60, /**< Clothes dryer */
SNDLEVEL_DISHWASHER = 65, /**< Dishwasher/washing machine (1.5 attn) */
SNDLEVEL_CAR = 70, /**< Car or vacuum cleaner (1.0 attn) */
SNDLEVEL_NORMAL = 75, /**< Normal sound level */
SNDLEVEL_TRAFFIC = 75, /**< Busy traffic (0.8 attn) */
SNDLEVEL_MINIBIKE = 80, /**< Mini-bike, alarm clock (0.7 attn) */
SNDLEVEL_SCREAMING = 90, /**< Screaming child (0.5 attn) */
SNDLEVEL_TRAIN = 100, /**< Subway train, pneumatic drill (0.4 attn) */
SNDLEVEL_HELICOPTER = 105, /**< Helicopter */
SNDLEVEL_SNOWMOBILE = 110, /**< Snow mobile */
SNDLEVEL_AIRCRAFT = 120, /**< Auto horn, aircraft */
SNDLEVEL_RAIDSIREN = 130, /**< Air raid siren */
SNDLEVEL_GUNFIRE = 140, /**< Gunshot, jet engine (0.27 attn) */
SNDLEVEL_ROCKET = 180, /**< Rocket launching (0.2 attn) */
};
#define SNDVOL_NORMAL 1.0 /**< Normal volume */
#define SNDPITCH_NORMAL 100 /**< Normal pitch */
#define SNDPITCH_LOW 95 /**< A low pitch */
#define SNDPITCH_HIGH 120 /**< A high pitch */
#define SNDATTN_NONE 0.0 /**< No attenuation */
#define SNDATTN_NORMAL 0.8 /**< Normal attenuation */
#define SNDATTN_STATIC 1.25 /**< Static attenuation? */
#define SNDATTN_RICOCHET 1.5 /**< Ricochet effect */
#define SNDATTN_IDLE 2.0 /**< Idle attenuation? */
В комментах написано.
Тоесть каналы разные для звуков оружий, шагов, голоса и прочего.
 

iamdss

Участник
Сообщения
126
Реакции
12
Хорошо, спасибо. Насчёт остального постараюсь выяснить сам.

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

SND_CHANGEVOL | SND_CHANGEPITCH - будут обработаны vol и pitch аргументы функции, иначе будут проигнорированы.

Может, кому в будущем поможет.

Добавлено через 42 минуты
level - в некоторой степени, радиус звука. Хотя для меня всё равно остаётся загадкой, чем же отличается level от volume... Это одно и то же, только для volume нам надо ещё и заводить флаг.
 
Последнее редактирование:
Сверху Снизу