Могу ли я играть на любом буфере только один раз за определенное время? - PullRequest
3 голосов
/ 04 мая 2010

Из документации OpenAL:

Основные объекты OpenAL являются Слушатель, источник и буфер. Там может быть большое количество Буферы, которые содержат аудиоданные. Каждый буфер может быть присоединен к одному или больше источников

Моя проблема в том, что у меня есть один звуковой файл, который мне нужно воспроизводить несколько раз в секунду одновременно. Звук длится 2 секунды. Так что это будет пересекаться.

Нужно ли для этого несколько заполненных буферов (= многократный звук в памяти)?

Если бы я прикрепил один буфер к нескольким источникам, смогу ли я воспроизвести звук 10 раз, перекрывая себя, с одной копией в памяти? Или мне все равно придется иметь дело с 10 копиями этого звука в памяти?

1 Ответ

4 голосов
/ 29 июля 2010

вы можете, буфер не зависит от источника , вы можете иметь несколько источников , указывающих на один и тот же буфер, вызывая alSourcePlay() вы играете источник не буфер .

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

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

...