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

FMOD и наушники

#0
20:35, 4 янв 2021

У меня 3D звук формируется низкоуровневым FMOD и все вроде работает, но есть одна проблема. Поскольку моя аппликация сделана для VR, то звук идет через наушники. И если источник звука расположен скажем справа, то весь звук идет только из правого наушника, что выглядит как-то неестественно. Т.е. звук локализуется но слишком уж прямолинейно. Возможно если бы у меня были колонки, то это смотрелось бы нормально, там оба уха получали бы звук от обоих спикеров, но в случае наушников это не работает.
Кто нибудь знает как эту проблему победить на FMOD? Я с этим API знаком слабо, сварганил все на основе их примеров, но там есть только самые базовые функции.

#1
20:55, 4 янв 2021

Я решил подобную проблему просто - поднял источник звука вверх. Не знаю какой эффект будет в VR, впрочем.

#2
20:59, 4 янв 2021

jaguard
Не, это не получится. В VR ты можешь головой крутить в любом направлении. В том числе поднять-опустить. Нужно как-то домешивать звук из одного спикера в другой. Поке не вижу как это сделать. Там куча функций и что они делают не всегда понятно.

#3
22:45, 4 янв 2021

san
А там нет таких понятий, как радиус источника звука и расстояние до него?

#4
22:48, 4 янв 2021

Может коробку добавить, чтобы звук переотражался?

#5
23:17, 4 янв 2021

Там ведь есть координаты источника и слушателя.
И тебе (как я понял) надо уменьшить стереобазу.
Ну так и помести источник ближе к центру (т.е. к слушателю), сохраняя направление.

#6
23:47, 4 янв 2021

rcsim
> И тебе (как я понял) надо уменьшить стереобазу.
да стереобазу можно уменьшить просто указав set3DLevel каналу меньше единицы. Но, мне кажется, для ВР нужно полное погружение и лучше покопать в сторону реальных переотражений звука (если они там вообще есть).

upd. похоже можно просто добавить ревербацию, без всяких стенок (стенки на переотражения не работают)

 FMOD::Reverb3D* reverb;
    result = system->createReverb3D(&reverb);
    FMOD_REVERB_PROPERTIES prop2 = FMOD_PRESET_BATHROOM;
    reverb->setProperties(&prop2);
#7
2:04, 5 янв 2021

Я нашел что-то более-менее подходящее, функция называется set3DSpread(float  angle).
Из описания:
1. A spread angle of 0 makes the stereo sound mono at the point of the 3d emitter.
2. A spread angle of 90 makes the left part of the stereo sound place itself at 45 degrees to the left and the right part 45 degrees to the right.
3. A spread angle of 180 makes the left part of the stero sound place itself at 90 degrees to the left and the right part 90 degrees to the right.

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

HolyDel
> похоже можно просто добавить ревербацию, без всяких стенок
Это еще не делал, но у меня и стенок-то нет. Действие происходит в ротонде (типа открытой беседки). Там стоит паровая машина которая шипит, гудит и производит прочие звуки большого диапазона. Проблема еще в том, что по идее низкие звуки вообще не должны локализоваться, а высокие наверно должны.

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

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