IDirectSoundBuffer8::GetCurrentPosition
- действительно единственный способ определить, откуда он воспроизводится, но он также надежен только в Windows Vista или более поздних системах, которые сообщают DSBCAPS_TRUEPLAYPOSITION
.
A.Несколько вещей, на которые стоит обратить внимание:
DirectSound является «устаревшим», то есть он активно не разрабатывался, не продвигался и не тестировался напрямую целую вечность.Последние образцы были отправлены в уже выпущенном DirectX SDK в ноябре 2007 года. Версии DirectSound до 8 не поддерживаются для собственных приложений x64, а заголовки / библиотеки DirectSound 8 находятся в Windows SDK, как и в WindowsSDK 7. Он не поддерживается для Windows в ARM, приложениях Магазина Windows и универсальных приложениях Windows.Документацию по DirectSound можно найти только в автономном режиме в устаревшем DirectX SDK, но не в Microsoft Docs. Единственное содержимое DirectSound, все еще находящееся в сети, предназначено для разработчиков драйверов.
DirectSound также эмулируетсяв современных версиях Windows, так что на самом деле в этом нет ничего «прямого».Первичный буфер на самом деле не подключен напрямую к аудиооборудованию или вообще не используется для микширования, так что это просто еще один программный буфер, такой как вторичный буфер.Он эмулирует устаревшие ограничения первичных буферов, которые применялись еще в Windows 9x / ME, но в остальном он ничего не делает.
Начиная с Windows Vista, LOC_HARDWARE
буферы больше не поддерживаются вообще.В Windows Vista добавлена поддержка многоканальных буферов LOC_SOFTWARE
, которые в Windows XP были доступны только в виде буферов LOC_HARDWARE
.
Начиная с Windows Vista, эффекты (ID3L, EAX,и т. д.) не поддерживаются через DirectSound.
TL; DR : не использовать DirectSound в новых приложениях.Он все еще поддерживается только для старого программного обеспечения и игр.
Итак, что разработчик должен использовать, если не DirectSound?
(1) Windows Core Audio (WASAPI) - это хорошовариант, если вы можете предоставить звуковые данные с известной скоростью и форматом данных.Если вам нужно микширование в режиме реального времени или преобразование исходной скорости, вы должны сделать это самостоятельно - или вы можете использовать одну из многих существующих сторонних аудио библиотек, чтобы сделать это, что также отправит окончательный результат в WASAPI.См. Документы Microsoft .
(2). XAudio версии 2 - хороший выбор, если вы хотите выполнять микширование в реальном времени, преобразование скорости источника и программные эффекты DSP.Он включен в операционную систему начиная с Windows 8, но для поддержки Windows 7 необходимо использовать некоторые устаревшие дистрибутивы и SDK.См. Документы Microoft и в этом блоге .
И WASPI, и XAudio используют модель «аудиопакета» вместо буфера циклического представления данных.Пока пакет ожидает обработки, у вас не будет недостаточного запуска.