Сейчас занимаюсь одним небольшим игровым проектом и возникла потребность воспроизводить один и тот же звук с нескольких позиций.
Как это обычно реализуют? Задача должна быть очень распространенной -
в тех же стратегиях множество юнитов постоянно одновременно играют один и
тот же звук. Можно для каждого юнита зарезервировать буффер - но не очень
охота транжирить память. Можно ли решить эту задачу с использованием одного буффера?
Спецы в DirectSound, подскажите!
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
если хотите микшировать звуки, то без нескольких вторичных буферов не обойтись. Внутренний микшер у ДиретСаунда неплохой. Не надо себе будет голову забивать ненужными вещами. Он все сам сделает. Если копировать все в один буфер, то будет проигрыватся именно в той последовательности в какой скопировали. Судя по всему Вам это не надо.
У нас на работе возникла задача, которая позволяла бы клиенты слушать сразу до 4 голосовых потоков одновременно. Раньше клиентское приложение позволяло слушать только один.
Выход я видел один. Сделать 4 вторичных буфера под каждый стрим. Работает замечательно.
Скажите конкретно, чем не нравится подход создания вторичных буферов, тогда и будем уже смотреть дальше
У нас на работе возникла задача, которая позволяла бы клиенты слушать сразу до 4 голосовых потоков одновременно. Раньше клиентское приложение позволяло слушать только один.
Выход я видел один. Сделать 4 вторичных буфера под каждый стрим. Работает замечательно.
Скажите конкретно, чем не нравится подход создания вторичных буферов, тогда и будем уже смотреть дальше
-
- Уже с Приветом
- Posts: 1491
- Joined: 02 Jul 2003 22:47
uniqueman wrote:если хотите микшировать звуки, то без нескольких вторичных буферов не обойтись. Внутренний микшер у ДиретСаунда неплохой. Не надо себе будет голову забивать ненужными вещами. Он все сам сделает. Если копировать все в один буфер, то будет проигрыватся именно в той последовательности в какой скопировали. Судя по всему Вам это не надо.
У нас на работе возникла задача, которая позволяла бы клиенты слушать сразу до 4 голосовых потоков одновременно. Раньше клиентское приложение позволяло слушать только один.
Выход я видел один. Сделать 4 вторичных буфера под каждый стрим. Работает замечательно.
Скажите конкретно, чем не нравится подход создания вторичных буферов, тогда и будем уже смотреть дальше
Память жрет. Хорошо, у меня в задаче удалось обойтись тремя буфферами для каждого объекта, а как обстоит дело, если одновременно нужно проиграть несколько десятков звуков?
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
В типовой схеме взаимодействия для каждого источника звука создается свой вторичный буфер.
В исключительных случаях возможен прямой доступ к первичному буферу. При этом запрещается использование вторичных буферов — то есть приложение теряет возможность описывать независимые источники звука. Зато наличие доступа к первичному буферу гарантирует, что все изменения в звуковых данных будут услышаны максимально быстро (единицы миллисекунд). Однако первичный буфер имеет фиксированный размер, выбираемый драйвером DirectSound, и размер этот достаточно мал (несколько десятков миллисекунд звучания). Для того чтобы успевать вписывать звук в первичный буфер, приложение должно иметь высокий уровень приоритета. Но даже в этом случае Windows не гарантирует нужной скорости, не являясь системой реального времени.
Или попробовать поиграть с DuplicateSoundBuffer
Это как одно из решений. Других я не знаю.
В исключительных случаях возможен прямой доступ к первичному буферу. При этом запрещается использование вторичных буферов — то есть приложение теряет возможность описывать независимые источники звука. Зато наличие доступа к первичному буферу гарантирует, что все изменения в звуковых данных будут услышаны максимально быстро (единицы миллисекунд). Однако первичный буфер имеет фиксированный размер, выбираемый драйвером DirectSound, и размер этот достаточно мал (несколько десятков миллисекунд звучания). Для того чтобы успевать вписывать звук в первичный буфер, приложение должно иметь высокий уровень приоритета. Но даже в этом случае Windows не гарантирует нужной скорости, не являясь системой реального времени.
Или попробовать поиграть с DuplicateSoundBuffer
Это как одно из решений. Других я не знаю.