Войти
ПрограммированиеФорумЗвук

Многопоточность в DirectSound

#0
14:47, 24 июня 2011

Добрый день.

Буду признателен если поделитесь инфой на тему реализации многопоточности в DirectSound.

Столкнулся с проблемой торможения потока, в котором рисуется 3D графика и используется DirectSound.

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

Поэтому возник вопрос целесообразности использования DirectSound из разных потоков. Поддерживает ли он такую возможность?


#1
16:39, 24 июня 2011

> Вытаскивание функции обновления звуковой сцены в отдельный поток не привело к улучшениям. Визуализация продолжает тормозить.
>Визуализация продолжает тормозить.
>продолжает тормозить.
>Визуализация
>Визуализация
>Визуализация
Sergan, мне кажется ты сам себе намекнул, но сам же и не понял )

#2
16:51, 24 июня 2011

Неа, не понял ) Визуализация и часть работы с DirectSound находятся в одном потоке. Поэтому при торможении звука этот поток тормозится или ожидает, в случае реализации звука в другом потоке. Вопрос в том, как DirectSound эффективно распараллелить. И вообще, возможно ли это?

#3
17:11, 24 июня 2011

> Вопрос в том, как DirectSound эффективно распараллелить.
Sergan, вопрос в том ЗАЧЕМ, а не в том КАК ) Его не надо паралллеить. Параллелить надо задачи - один поток на визуализацию, один (?) на работу с файлами, один (!) отдельный поток на звук (и то не факт, что надо). Зачем юзать звук из 100500 разных потоков - как-то совершенно непонятно, по крайней мере мне.

Ты уверен на 100% что проблема именно в звуке, а не в чём-то ещё?

#4
17:17, 24 июня 2011

slava_mib, вот это я и пытаюсь выяснить. Есть ли смысл в распаралелливании DirectSound. Похоже что он не позволяет растащить его использование на разные потоки, с целью повышения эффективности.

#5
17:30, 24 июня 2011

А чего там выяснять-то? Выруби его и посмотри как будет работать без него. Воспроизведение звука (именно воспроизведение, а не загрузка/декодирование) в 99.999% случаев не является ботлнеком. Он не позволяет это потому что оно просто не нужно, вот и всё )

#6
17:35, 24 июня 2011

Это то, что я сделал в первую очередь. Отключил DirectSound. Это положительно сказалось на fps. Просто сцена большая, эммитеров много. Порядка 5000.

#7
17:41, 24 июня 2011

5000 эмитеров звука? Да вам, батенька, к врачу надо ))))
ДиректСоунд вопросизводит то, что ему сказано. Задача программиста - не давать ему воспроизводить то, что не надо. Вы плохо справились с работой программиста )

#8
17:49, 24 июня 2011

Писать с нуля и оптимизировать то, что уже есть, немного разные задачи. Не находите ли? )
Никто не говорил что все 5000 эмитеров воспроизводят звук. Они находятся в сцене. И включаются по мере необходимости. И опять же, уменьешение количества это один из подходов к решению проблемы, не исключающий прочих. 
Тем не мнее, как я понял эффективного распараллеливания не предусмотрено. Значит задача будет решаться другим путем.

#9
18:01, 24 июня 2011

> Писать с нуля и оптимизировать то, что уже есть, немного разные задачи. Не находите ли? )
Sergan, это вообще к чему? )

> Никто не говорил что все 5000 эмитеров воспроизводят звук. Они находятся в сцене. И включаются по мере необходимости.
Sergan, если они не воспроизводят, но тормозят - значит в любом случае где-то жуткая кривизна, с этим спорить-то сложно. А детали реализации - это уже детали, и разбираться в них надо автору, т.е. Вам )

#10
19:01, 24 июня 2011

Sergan
> Никто не говорил что все 5000 эмитеров воспроизводят звук. Они находятся в
> сцене. И включаются по мере необходимости. И опять же, уменьешение количества
> это один из подходов к решению проблемы, не исключающий прочих.

5000 эмитеров, это всмысле буферов DXSound ? Жуть.
Очевидный ход сделать 16-32-64 буфера (не больше чем держит аппаратно карта) и это решит проблему. Распараллеливать бестолковое занятие.

P.S. Если хочется что-то распаралелить юзай X3Daudio и XAudio2 вместо директсаунда, оно умеет параллелить.

#11
4:16, 25 июня 2011

outcast говорит тему, параллельно просто подгружать звук в буффер (если он уникален) или использовать один буффер если дублируется,
но подгружать/выгружать по мере приближения к эммитеру под зону его действия (делать в потоке подгрузки который работает крайне фоново). А так звук просто работает в отдельном потоке процесса
и никак не должен зависеть от визуализации и её тем более как-то тормозить (при правильной реализации), решение предполагаемое автором в корне не верное.

ПрограммированиеФорумЗвук

Тема в архиве.