Алгоритм правильной настройки громкости звука в зависимости от расстояния (x, y) - PullRequest
5 голосов
/ 04 ноября 2010

Я занимаюсь разработкой игры. Как я могу "увеличить" громкость звука для звука, основываясь на "расстоянии" спрайта от текущей сцены рендеринга? Предположим, у меня есть мир:

WIDTH_WORLD = 10000
HEIGHT_WORLD = 10000

Current Scene  
xCurrent = 800   ( + Width Res. = 800 + 1024 = 1824)  
yCurrent = 400   ( + Height Res. = 400 + 768 =... )

Far Sprite
xSprite = 7000 
ySprite = 3000 

Что такое хороший алгоритм для "расчета" громкости звука (и, возможно, отношения левого / правого каналов панорамирования)? Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 04 ноября 2010

Используйте расстояние (Dsquared = xdist ^ 2 + ydist ^ 2) в качестве коэффициента масштабирования, чтобы уменьшить громкость.Инвертируйте это квадратное значение расстояния, чтобы применить его непосредственно к вашему объему (объем уменьшается как квадрат расстояния, и расстояние в любом случае легко рассчитывается как квадратное значение).

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

2 голосов
/ 04 ноября 2010

Общий объем

  • Существует несколько подходов к ослаблению громкости.Например, вы можете использовать функцию линейного демпфирования, например, volume = max( 0, max_volume - max_volume/max_distance * distance ), или функцию с обратным спадом расстояния, например, volume = min( max_volume, max_volume / distance ).

Коэффициент баланса

  • Опять же, существует несколько подходов для реализации адекватной функциональности.В вашем случае вы могли бы сказать, что если объект находится у или за левой границей экрана, панорамирование влево, если объект находится за или за правой границей экрана, панорамирование вправо, в противном случае используйте функцию интерполяции, например balance = (object_x-camera_x) / screen_half_width со значениями между -1: слева, +1: справа и 0: по центру.

Комбинируя эти подходы, вы должны подумать о том, что подходит для вашего случая: например, только ослабьтегромкость, если объект находится за пределами экрана, что когда-либо ...

0 голосов
/ 04 ноября 2010

Ну, громкость звука уменьшается как квадрат расстояния от источника звука, так что это даст вам хорошее место для начала.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...