Программирование звука с использованием XAudio2.
Всем доброго времени суток! Это моя первая статья на GameDev.ru, которая появилась в связи с тем, что в недавнем времени решил я сам перейти на библиотеку XAudio2. Документации по ней в Интернете на русском нет.
Введение
Помимо XAudio2 существует несколько библиотек для вывода звука: DirectSound, OpenAL, FMOD, BASS. Но мне хочется поговорить именно об XAudio2, так как об этом нет русских статей.
Как заявляет сама Microsoft (смотреть тут), она больше не поддерживает DirectSound, и новые проекты, в зависимости от типа, должны использовать новое программное обеспечение. Для игр это XAudio2 и X3DAudio, для всего остального — Windows Core Audio.
Библиотека XAudio2 входят в состав Microsoft DirectX SDK и при её использовании может возникнуть такая же проблема, как и с библиотекой D3DX9 — постоянно нужно пользователю обновлять Microsoft DirectX. Самая последняя версия Microsoft DirectX (июнь 2010) включает следующие библиотеки XAudio2:
- XAudio2_0.dll;
- XAudio2_1.dll;
- XAudio2_2.dll;
- XAudio2_3.dll;
- XAudio2_4.dll;
- XAudio2_5.dll;
- XAudio2_6.dll;
- XAudio2_7.dll;
- XAudioD2_7.dll.
Так что если ваша программа не заработала на другом компьютере, то возможны два варианта:
- Вы что-то сделали не так;
- У пользователя не стоят те же самые библиотеки, которые вы использовали для создания программы.
А теперь перейдём к рассмотрению XAudio2.
XAudio2
Первые приготовления
В XAudio2 имеются два основных интерфейса: IXAudio2 и IXAudio2Voice.
- IXAudio2 — это интерфейс, который работает со всеми аудио-голосами (IXAudio2Voice).
- IXAudio2Voice — это базовый интерфейс для трёх других: IXAudio2SourceVoice, IXAudio2SubmixVoice и IXAudio2MasteringVoice.
Все эти интерфейсы (IXAudio2SourceVoice, IXAudio2SubmixVoice и IXAudio2MasteringVoice) обрабатывают несжатые аудио-данные.
- IXAudio2SourceVoice этот интерфейс, который непосредственно получает несжатый аудио-данные. Далее он передаёт данные в IXAudio2SubmixVoice, если конечно тот существует (что является необязательным) или же в IXAudio2MasteringVoice.
- IXAudio2SubmixVoice служит для всевозможных преобразований аудио-данных. Результат своей работы он передаёт IXAudio2MasteringVoice.
- IXAudio2MasteringVoice тоже может производить некоторые операции над аудио-данными, и именно через этот интерфейс данные попадают в аудио-устройство. Данных интерфейсом может быть создано несколько, но одновременно может работать только один.
Структур для обработки голоса может быть несколько, их разнообразие велико. От простого:


Перейдём к коду.
Создадим в Visual C++ новый пустой проект Win32 приложения. Укажем где у нас находятся заголовочные файлы (include) и библиотеки (lib) от Microsoft DirectX SDK.
Замечание: Для работы с XAudio2 не нужно линковщику указывать статическую библиотеку (lib), достаточно к проекту подключить заголовочный файл XAudio2.h.
Начнём с создания класса для всех операций с аудио-библиотекой, назовём его Audio. Добавим к проекту файл Audio.h и внесём в него:
Теперь разберём что к чему.
Нам это будет нужно для контроля выполнения функций. Пока у нас будет всего одна функция, которая возможно выполнится с ошибкой.
Возвращает тот самый код выполнения.
Для того чтобы в памяти находился только один экземпляр класса Audio, мы будем хранить его адрес в статической переменной.
Служит для создания двух интерфейсов: IXAudio2 и IXAudio2MasteringVoice.
Так мы будем знать создали ли мы главные интерфейсы.
Теперь создадим файл Audio.cpp:
Тут разберём только функцию Create().
Функция XAudio2Create используется для создания главного интерфейса (IXAudio2). Выглядит следующим образом:
- ppXAudio2 указатель на указатель интерфейса IXAudio2.
- Flags используется для установки режима работы. Может быть либо 0, либо XAUDIO2_DEBUG_ENGINE (в этом случае будет запрашивать отладочную информация из библиотеки).
- XAudio2Processor указывает какой процессор использовать для обработки аудио. Тут мы оставили значение по умолчанию, а полный список можно посмотреть в структуре XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER.
Если функция завершается успешно, то обратная величина S_OK.
Далее мы создаём главный интерфейс для передачи аудио-данных на аудио-устройство через функцию CreateMasteringVoice интерфейса IXAudio2. Вот как она выглядит:
Ошибки xaudio2_7.dll, xaudio2_8.dll и xaudio2_9.dll — как исправить

При запуске какой-либо игры или программы в Windows 7, 8.1 или Windows 10, вы можете столкнуться с ошибкой «Запуск программы невозможен, так как на компьютере отсутствует xaudio2_8.dll», аналогичная ошибка возможна и для файлов xaudio2_7.dll или xaudio2_9.dll.
В этой инструкции подробно о том, что представляют собой эти файлы и о возможных способах исправить ошибку xaudio2_n.dll при запуске игр/программ в Windows.
Что такое XAudio2
XAudio2 — набор системных низкоуровневых библиотек от Майкрософт для работы со звуком, звуковых эффектов, работы с голосом и других задач, которые могут использоваться в различных играх и программах.
В зависимости от версии Windows, на компьютере уже установлены те или иные версии XAudio, для каждой из которых имеется соответствующий файл DLL (находится в C:\Windows\System32):

- В Windows 10 по умолчанию присутствует xaudio2_9.dll и xaudio2_8.dll
- В Windows 8 и 8.1 в наличии файл xaudio2_8.dll
- В Windows 7 при наличии установленных обновлений и пакета DirectX — xaudio2_7.dll и более ранние версии этого файла.
При этом, если, к примеру, на вашем компьютере установлена Windows 7, копирование (или скачивание) оригинального файла xaudio2_8.dll в неё не заставит работать эту библиотеку — ошибка при запуске сохранится (хотя текст её изменится).
Исправление ошибок xaudio2_7.dll, xaudio2_8.dll и xaudio2_9.dll
Во всех случаях появления ошибки, вне зависимости от версии Windows, скачайте и установите библиотеки DirectX, используя веб-установщик с официального сайта Майкрософт https://www.microsoft.com/ru-ru/download/35 (для пользователей Windows 10: если вы ранее уже скачивали эти библиотеки, но обновили систему до очередной версии, установите их снова).
Несмотря на то, что в каждой из версий ОС уже присутствует та или иная версия DirectX, веб-установщик загрузит недостающие библиотеки, которые могут требоваться для запуска тех или иных программ, среди которых есть, в том числе и xaudio2_7.dll (но нет двух других файлов, тем не менее, проблема может быть исправлена для некоторого ПО).
Если проблема не была устранена, а на вашем компьютере установлена 7-ка, еще раз напомню: вы не сможете скачать xaudio2_8.dll или xaudio2_9.dll для Windows 7. Точнее, загрузить сможете, но работать эти библиотеки не будут.
Однако вы можете изучить следующие моменты:
- Проверьте на официальном сайте, совместима ли программа с Windows 7 и с вашей версией DirectX (см. Как узнать версию DirectX).
- Если программа совместима, поищите в интернете описание возможных проблем при запуске конкретно этой игры или программы в Windows 7 вне контекста конкретной DLL (может оказаться, что для её работы в 7-ку требуется установить дополнительные системные компоненты, использовать другой исполняемый файл, изменить параметры лаунчера, установить какой-либо фикс и т.п.).
Надеюсь, один из вариантов поможет вам исправить проблему. Если же нет, опишите ситуацию (программу, версию ОС) в комментариях, возможно, мне удастся помочь.
Как удалить XAudio
Подлинный файл является одним из компонентов программного обеспечения SoftK56 Data Fax Modem, разработанного Conexant Systems .
XAudio.exe — это исполняемый файл (программа) для Windows. Расширение имени файла .exe — это аббревиатура от англ. слова executable — исполнимый. Необходимо запускать исполняемые файлы от проверенных производителей программ, потому что исполняемые файлы могут потенциально изменить настройки компьютера или нанести вред вашему компьютеру. Бесплатный форум с информацией о файлах может помочь вам разобраться является ли XAudio.exe вирусом, трояном, программой-шпионом, рекламой, которую вы можете удалить, или файл принадлежит системе Windows или приложению, которому можно доверять.
Вот так, вы сможете исправить ошибки, связанные с XAudio.exe
- Используйте программу Настройщик Windows, чтобы найти причину проблем, в том числе и медленной работы компьютера.
- Обновите программу Modem Audio Service. Обновление можно найти на сайте производителя (ссылка приведена ниже).
- В следующих пунктах предоставлено описание работы XAudio.exe.
Информация о файле XAudio.exe
Описание: XAudio.exe не является необходимым для Windows. Файл XAudio.exe находится в папке C:\Windows\System32\drivers. Известны следующие размеры файла для Windows 10/8/7/XP 386,560 байт (91% всех случаев), 403,968 байт или 390,544 байт.
Название сервиса — XAudioService.
У процесса нет видимого окна. Это не файл Windows. Это файл, подписанный Microsoft. Поэтому технический рейтинг надежности 22% опасности.
Важно: Некоторые вредоносные программы маскируют себя как XAudio.exe, особенно, если они расположены не в каталоге C:\Windows\System32\drivers. Таким образом, вы должны проверить файл XAudio.exe на вашем ПК, чтобы убедиться, что это угроза. Мы рекомендуем Security Task Manager для проверки безопасности вашего компьютера.
Комментарий пользователя
Лучшие практики для исправления проблем с XAudio
Аккуратный и опрятный компьютер — это главное требование для избежания проблем с XAudio. Для этого требуется регулярная проверка компьютера на вирусы, очистка жесткого диска, используя cleanmgr и sfc /scannow, удаление программ, которые больше не нужны, проверка программ, которые запускаются при старте Windows (используя msconfig) и активация Автоматическое обновление Windows. Всегда помните о создании периодических бэкапов, или в крайнем случае о создании точек восстановления.
Если у вас актуальные проблемы, попробуйте вспомнить, что вы делали в последнее время, или последнюю программу, которую вы устанавливали перед тем, как появилась впервые проблема. Используйте команду resmon, чтобы определить процесс, который вызывает проблемы. Даже если у вас серьезные проблемы с компьютером, прежде чем переустанавливать Windows, лучше попробуйте восстановить целостность установки ОС или для Windows 8 и более поздних версий Windows выполнить команду DISM.exe /Online /Cleanup-image /Restorehealth. Это позволит восстановить операционную систему без потери данных.
Следующие программы могут вам помочь для анализа процесса XAudio.exe на вашем компьютере: Security Task Manager отображает все запущенные задания Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записей автозагрузки. Уникальная оценка рисков безопасности указывает на вероятность процесса быть потенциально опасным — шпионской программой, вирусом или трояном. Malwarebytes Anti-Malware определяет и удаляет бездействующие программы-шпионы, рекламное ПО, трояны, кейлоггеры, вредоносные программы и трекеры с вашего жесткого диска.
XAudio сканер

Security Task Manager показывает все запущенные сервисы Windows, включая внедренные скрытые приложения (например, мониторинг клавиатуры или браузера, авто вход). Уникальный рейтинг надежности указывает на вероятность того, что процесс потенциально может быть вредоносной программой-шпионом, кейлоггером или трояном.
Бесплатный aнтивирус находит и удаляет неактивные программы-шпионы, рекламу, трояны, кейлоггеры, вредоносные и следящие программы с вашего жесткого диска. Идеальное дополнение к Security Task Manager.
Reimage бесплатное сканирование, очистка, восстановление и оптимизация вашей системы.