Войти
ПрограммированиеФорумЗвук

DirectSound. Радиус звука.

#0
17:08, 12 фев. 2013

Привет всем! Как установить/определить радиус слышимости звука? Допустим звук как работает двигатель будет слышен на расстоянии 10-15 м, звук как капает вода из под крана всего 5 м и т.д.


#1
20:08, 12 фев. 2013

Frest
Если речь идёт о 3D сцене, то у тебя должны быть минимум два объекта: источник (Source) и слушатель (Listener). У каждого такого объекта есть вектор позиции. Определяешь расстояние между двумя точками. Далее, в зависимости от того, что за звук должен издать источник, ты определяешь на каком расстоянии он может быть услышан (точнее заранее прописываешь для каждого звука его максимальный радиус действия и делаешь так, что на границе с этим радиусом у тебя звук играет с громкость несколько процентов). Если расстояние больше, то не проигрываешь. А чем расстояние дальше от источника, тем больше убавляешь громкость (ну и до тех пор, пока не выйдешь за пределы).

#2
23:46, 12 фев. 2013

s3dworld
Извините, но менять вручную параметры по мере движения источников звука или слушателя - это как минимум извращенство.

Frest
В DirectSound есть специальные интерфейсы для настройки параметров 3d-звуков: IDirectSound3DBuffer8 - для источников, IDirectSound3DListener8 - для наблюдателя. Каждый из них имеет возможности установки параметров, контролирующих звучание. Смотри в сторону функций SetAllParameters и частных вызовов для установки отдельных параметров (SetPosition - контроль положения, SetMinDistance, SetMaxDistance, SetDistanceFactor - контроль расстояния, на котором начинается изменение громкости).

PS еще есть метод SetRolloffFactor - он тоже влияет на затухание звука

#3
14:08, 13 фев. 2013

alex-r
Спасибо, сейчас посмотрю!

#4
17:19, 13 фев. 2013

alex-r
> IDirectSound3DListener8 - для наблюдателя
может слушателя?

#5
22:59, 13 фев. 2013

nes
> может слушателя?
Можно и так сказать. Смысл, по-моему, один и тот же

#6
23:30, 13 фев. 2013

alex-r
> s3dworld
> Извините, но менять вручную параметры по мере движения источников звука или
> слушателя - это как минимум извращенство.
А думаете DirectSound как-то сам догадается где звуки расположены в данный момент времени относительно слушателя?

alex-r
> SetDistanceFactor - контроль расстояния, на котором начинается изменение громкости

Нет, этот метод задает масштаб, и фактически определяет единицы измерения расстояний которые задаются.
"Контроль расстояния на котором начинается изменение громкости" определяется тем что задано в методе SetMinDistance, характер затухания с расстоянием SetRolloffFactor, а SetMaxDistance - то расстояние на котором звук будет иметь 0 громкость.

#7
23:58, 13 фев. 2013

outcast
> думаете DirectSound как-то сам догадается где звуки расположены в данный момент
> времени относительно слушателя?
Для этого достаточно переустановить позицию. Но менять громкость каждого звука ... это уж ни в какие рамки

#8
0:04, 14 фев. 2013

alex-r
> Для этого достаточно переустановить позицию. Но менять громкость каждого звука
> ... это уж ни в какие рамки
Внутри DirectSoundа громкость меняется для каждого звука в зависимости от позиции согласно установленным параметрам.
Может надо срочно писать письмо в Microsoft, что это ни в какие рамки не лезет? Ишь что удумали - специалисты с gamedev.ru не одобряют такое!

#9
0:42, 14 фев. 2013

outcast
> Внутри DirectSoundа громкость меняется для каждого звука в зависимости от
> позиции согласно установленным параметрам.
> Может надо срочно писать письмо в Microsoft, что это ни в какие рамки не лезет?
> Ишь что удумали - специалисты с gamedev.ru не одобряют такое!
Предлагаете делать все вручную - вперед. Вот только смысл использовать DirectSound при этом? А так-то да, коооонечно, можно что угодно самим сделать.

ПрограммированиеФорумЗвук

Тема в архиве.