2011-03-01 4 views
4

Я использую OpenAL в своем проекте iPhone для создания звуков, которые ослабляются, когда он находится дальше от слушателя.OpenAL - как играть в ненавязчивые звуковые эффекты?

Однако - я также хочу воспроизвести некоторые звуковые эффекты, которые не должны быть ослаблены расстоянием.

До сих пор я решил, что с помощью стереофонических звуков, которые не ослабевают. Но теперь я добавляю много голосовых команд, которые занимают довольно много места, поэтому я хочу, чтобы они были монофоническими, и теперь снова возникает проблема, что они ослабляются на расстояние.

Следующим решением было установить «AL_MIN_GAIN» источника, воспроизводящего образцы голоса, в 1.0, но это, похоже, работает только на симуляторе, а не на устройстве.

Есть ли другие способы воспроизведения звуковых эффектов с openAL, которые не должны быть ослаблены расстоянием?

+0

Использование стереозвука звучит как отличный способ, чтобы обойти это. – bobobobo

ответ

1

Вы можете попробовать открыть второй контекст, который не имеет модели расстояния. Я не уверен, поддерживает ли iOS несколько контекстов или нет, хотя ...

В качестве альтернативы, просто держите свои «голосовые» источники в том же положении, что и слушатель.

4
alSourcei (sourceName, AL_SOURCE_RELATIVE, AL_TRUE); 
alSource3f (sourceName, AL_POSITION, 0.0f, 0.0f, 0.0f); 
alSource3f (sourceName, AL_VELOCITY, 0.0f, 0.0f, 0.0f); 

А затем источник должен оставаться в положении слушателя.

+0

Это не работает _активно, если вы перемещаете слушателя. Я считаю, что 'AL_SOURCE_RELATIVE' это должно быть для _инициальной спецификации позиции источника звука_, но если слушатель движется, то источник звука не движется с ним_ (поэтому он все еще действует как 3D-звук) – bobobobo

+0

Кроме того, скорости не выполняются относительно, поэтому вам действительно нужно будет установить скорость источника (и обновить его каждый кадр), чтобы остановить эффект доплеровского эффекта. – bobobobo

+0

[Отличная публикация, посвященная моему первому комментарию здесь] (http://openal.996291.n3.nabble.com /AL-SOURCE-RELATIVE-behavior-td4190.html) – bobobobo

0

Просто используйте

alSourcei(id, AL_DIRECT_CHANNELS_SOFT, 1) 

AL_DIRECT_CHANNELS_SOFT макрос определен в <AL/alext.h>

Смежные вопросы