Спецы в DirectSound, подскажите!

Angry
Уже с Приветом
Posts: 1491
Joined: 02 Jul 2003 22:47

Спецы в DirectSound, подскажите!

Post by Angry »

Сейчас занимаюсь одним небольшим игровым проектом и возникла потребность воспроизводить один и тот же звук с нескольких позиций.
Как это обычно реализуют? Задача должна быть очень распространенной -
в тех же стратегиях множество юнитов постоянно одновременно играют один и
тот же звук. Можно для каждого юнита зарезервировать буффер - но не очень
охота транжирить память. Можно ли решить эту задачу с использованием одного буффера?
uniqueman
Уже с Приветом
Posts: 2013
Joined: 16 Mar 2002 10:01
Location: New York City

Post by uniqueman »

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

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

Выход я видел один. Сделать 4 вторичных буфера под каждый стрим. Работает замечательно.

Скажите конкретно, чем не нравится подход создания вторичных буферов, тогда и будем уже смотреть дальше
Angry
Уже с Приветом
Posts: 1491
Joined: 02 Jul 2003 22:47

Post by Angry »

uniqueman wrote:если хотите микшировать звуки, то без нескольких вторичных буферов не обойтись. Внутренний микшер у ДиретСаунда неплохой. Не надо себе будет голову забивать ненужными вещами. Он все сам сделает. Если копировать все в один буфер, то будет проигрыватся именно в той последовательности в какой скопировали. Судя по всему Вам это не надо.

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

Выход я видел один. Сделать 4 вторичных буфера под каждый стрим. Работает замечательно.

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


Память жрет. Хорошо, у меня в задаче удалось обойтись тремя буфферами для каждого объекта, а как обстоит дело, если одновременно нужно проиграть несколько десятков звуков?
uniqueman
Уже с Приветом
Posts: 2013
Joined: 16 Mar 2002 10:01
Location: New York City

Post by uniqueman »

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

В исключительных случаях возможен прямой доступ к первичному буферу. При этом запрещается использование вторичных буферов — то есть приложение теряет возможность описывать независимые источники звука. Зато наличие доступа к первичному буферу гарантирует, что все изменения в звуковых данных будут услышаны максимально быстро (единицы миллисекунд). Однако первичный буфер имеет фиксированный размер, выбираемый драйвером DirectSound, и размер этот достаточно мал (несколько десятков миллисекунд звучания). Для того чтобы успевать вписывать звук в первичный буфер, приложение должно иметь высокий уровень приоритета. Но даже в этом случае Windows не гарантирует нужной скорости, не являясь системой реального времени.

Или попробовать поиграть с DuplicateSoundBuffer


Это как одно из решений. Других я не знаю.

Return to “Вопросы и новости IT”