2012-10-12 35 views
2

使用OpenAL的,一個可以設置距離模型:OpenAL的3D定位和平移中心

alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED); 

和聲音效果的位置:

float globalRefDistance = 125.0f; 
float globalMaxDistance = 1250.0f; 
ALfloat alPos[] = {pos.x, pos.y, 0.0f}; 
alSourcefv(soundId, AL_POSITION, alPos); 
alSourcef(soundId, AL_REFERENCE_DISTANCE, globalRefDistance); 
alSourcef(soundId, AL_MAX_DISTANCE, globalMaxDistance); 

這樣做會降低,並很好地平底鍋的聲音,除了當聆聽者靠近聲源並且在聲音的左側和右側來回走動時。在這種情況下,平移很快從左向右。在中央播放聲音的地方並不是真正的地方。

我該如何定義一個範圍/窗口/錐體,其中OpenAL將3D聲音置於中央,而不進行平移?

我希望能夠走到左邊的聲音,聽到它逐漸從左聲道淡入。然後在兩個渠道上一段時間。然後在正確的頻道逐漸淡出。

我試着設置聲音是方向性搞亂,但它似乎並沒有這樣的伎倆:

alPos[0] = 0.0f; alPos[1] = 0.0f; alPos[2] = 1.0f; 
alSourcefv(soundId, AL_DIRECTION, alPos); 
alSourcef(soundId, AL_CONE_INNER_ANGLE, 180.0f); 
alSourcef(soundId, AL_CONE_OUTER_ANGLE, 240.0f); 
+0

顯然這是一個最近的變化:opensource.creative.com/pipermail/openal/2013-July/012714.html另請參閱https://code.google.com/p/libgdx/issues/detail?id=1183 – rogerdpack

回答

1

而不是使用的OpenAL的AL_POSITION的,我結束了跟蹤監聽器的位置和所有手動聲音位置,然後手動應用音量滾降和平移每個刻度。

這允許一個特定的窗口/寬度/錐體的效果完全居中的空間。聽起來好多了。

另請注意,我從AL_LINEAR_DISTANCE_CLAMPED切換回默認的反向鉗制模式。由於某些原因,線性鉗位模式導致任何位置具有負X值的效應過快地平移,無論參考值還是最大距離。這隻發生在Mac構建中,所以我認爲OpenAL Mac實現在使用線性鉗制時存在平移錯誤。