C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
проблема с IDirectSoundNotify, странное срабатывание евентов
Tertium
Отправлено: 03.01.2006, 07:29


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



В DirectSound для стримминга используются нотификация позиций плей-курсора с помощью евентов. Задаю позиции в буфере и даю дескрипторы евентов, и директ выставляет эвент, когда плей-курсор доходит до установленной позиции. В отдельном потоке жду эти эвенты и делаю докачку данных в буфера (буфер как бы разбит на 8 частей евентами). Евент для каждого буфера использую один для всех 8 позиций, а когда дожидаюсь смотрю скока раз он уже вызывался, и тут все нормально.
Вообще все хорошо, пока звук один. Но когда запускаю помимо стримающегося звука еще статический буфер — просто звук на весь буфер — срабатывание евентов учащается и стримающийся звук естественно становится прерывистым. Это при том, что в потоке ожидания эвентов обычные звуки вообще не учитываются. Та же картина с двумя стримающимися параллельно звуками. Как будто подгоняют друг друга. В чем проблема? Может быть, так предусмотрено — либо один звук с нотификациями позиций курсора, либо все остальные? Странно вобщем. Ктонть сталкивался?
Tertium
Отправлено: 10.01.2006, 20:56


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



вобщем суть была в том, что мокрософт забыл упомянуть, что на нек-рых (а может и на всех) звуковухах (у меня Live7.1) буфер с нотификацией может быть только программный, а не аппаратный. точнее там было это написано, но далее писалось, что если вы явно не указали, что буфер софтовый, но хотите нотифи, то он будет создан софтовым. А вот хренушки. только если указать DSBCAPS_LOCSOFTWARE при создаче — тада все ок. иначе — борода. А руками сначала сделал — в отдельном потоке чекаем где курсор и сами файрим евент — так тоже работало раз от раза — потому что буфер аппаратный и хрен его знает как он там мэппится в устройство.. вобщем мокрософт

Вернуться в Вопросы программирования в C++Builder