OpenAL синхронизация - PullRequest
       23

OpenAL синхронизация

2 голосов
/ 10 марта 2011

Я новичок в звуковом программировании, поэтому извините, если я не использую правильные термины ...

У меня есть два потоковых буфера, которые я хочу воспроизводить одновременно полностью синхронизированными.Я хочу контролировать соотношение смешивания между потоками.Я уверен, что это так же просто, как играть с двумя источниками и просто изменять их усиление, но я читал о людях, делающих некоторые трюки, такие как использование 2-канального буфера вместо двух отдельных каналов.Затем они играют из одного источника, но контролируют смешивание между каналами.Статья, которую я прочитал, не была посвящена OpenAL, поэтому мой вопрос: Возможно ли это даже с OpenAL?

Думаю, мне не нужно делать это таким образом, но теперь яЛюбопытно и хочу узнать, как его настроить.Должен ли я установить alFilter?Документация Creative гласит: «Буферы, содержащие более одного канала данных, будут воспроизводиться без трехмерного пространственного размещения».Прочитав это, я думаю, мне нужен предварительный проход на уровне буфера, а затем наличие смешанного моноканального сигнала с выходным сигналом источника.

Полагаю, я задам другой вопрос. Достаточно ли гибок OpenAL для выполнения подобных трюков?

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

1 Ответ

0 голосов
/ 26 марта 2011

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

Да, так и должно быть. Вы пробовали это? В чем была проблема?

ALuint source1;
ALuint source2;
...

void set_ratio(float ratio) {
    ratio=std::min(ratio,1);
    alSourcef (source1, AL_GAIN, ratio);
    alSourcef (source2, AL_GAIN, (1-ratio));
}
...