Поделиться через


RenderExclusiveEventDriven

В этом примере приложения используются API Core Audio для отрисовки звуковых данных на выходном устройстве, указанном пользователем. В этом примере демонстрируется буферизация на основе событий для клиента отрисовки в монопольном режиме. Для потока монопольного режима клиент использует буфер конечной точки с звуковым устройством.

Эта тема описана в следующих разделах.

Description

В этом примере показаны следующие функции.

  • API MMDevice для перечисления и выбора мультимедийных устройств.
  • WASAPI для операций управления потоками.

Требования

Продукт Версия
Windows SDK Windows 7
Visual Studio 2008

 

Скачивание примера

Этот пример доступен в следующих расположениях.

Расположение Путь или URL-адрес
Пакет Windows SDK \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderExclusiveEventDriven\...

 

Построение образца

Чтобы создать пример RenderExclusiveEventDriven, выполните следующие действия:

  1. Откройте оболочку CMD для пакета SDK для Windows и перейдите в пример каталога RenderExclusiveEventDriven.
  2. Выполните команду start WASAPIRenderExclusiveEventDriven.sln в каталоге RenderExclusiveEventDriven, чтобы открыть проект WASAPIRenderExclusiveEventDriven в окне Visual Studio.
  3. В окне выберите конфигурацию решения отладки или выпуска, выберите меню "Сборка" в строке меню и выберите параметр "Сборка". Если вы не открываете Visual Studio из оболочки CMD для пакета SDK, Visual Studio не будет иметь доступа к среде сборки пакета SDK. В этом случае пример не будет создаваться, если вы явно не задаете переменную среды MSSdk, которая используется в файле проекта, WASAPIRenderExclusiveEventDriven.vcproj.

Запуск примера

При успешном создании демонстрационного приложения создается исполняемый файл, WASAPIRenderExclusiveEventDriven.exe. Чтобы запустить его, введите WASAPIRenderExclusiveEventDriven в командном окне, за которым следует обязательные или необязательные аргументы. В следующем примере показано, как запустить пример, указав длительность воспроизведения на мультимедийном устройстве по умолчанию.

WASAPIRenderExclusiveEventDriven.exe -d 20 -multimedia

В следующей таблице показаны аргументы.

Аргумент Description
-? Отображает справку.
-h Отображает справку.
f- Частота синусовой волны в Гц.
-l Задержка отрисовки звука в миллисекундах.
-d Длительность синусовой волны в секундах.
-m Отключает использование MMCSS.
-Консоли Используйте консольное устройство по умолчанию.
-Коммуникаций Используйте устройство связи по умолчанию.
-Мультимедиа Используйте мультимедийное устройство по умолчанию.
-Конечной точки Используйте идентификатор конечной точки, указанный в значении коммутатора.

 

Если приложение выполняется без аргументов, оно перечисляет доступные устройства и предложит пользователю выбрать устройство для сеанса отрисовки. После того как пользователь указывает устройство, приложение отрисовывает синусную волну на 440 Гц в течение 10 секунд. Эти значения можно изменить, указав значения коммутатора -f и -d.

Пример RenderExclusiveEventDriven демонстрирует буферизацию на основе событий. В примере показано, как:

  • Создайте экземпляр звукового клиента, настройте его для запуска в монопольном режиме и включите буферизацию на основе событий, задав флаг AUDCLNT_STREAMFLAGS_EVENTCALLBACK в вызове IAudioClient::Initialize.
  • Свяжите клиента с примерами, готовыми к просмотру, предоставив дескриптор событий системе путем вызова метода IAudioClient::SetEventHandle.
  • Создайте поток отрисовки для обработки примеров из звукового модуля.
  • Правильно выравнивайте буферы на границе 128-байтов перед отправкой их на устройство. Это делается путем настройки периодичности двигателя.
  • Проверьте формат смешивания конечной точки устройства, чтобы определить, можно ли отображать примеры. Если устройство не поддерживает формат смеси, данные преобразуются в PCM.
  • Обработка переключения потоков.

После начала сеанса отрисовки и запуска потока звуковой подсистемы сигнализирует предоставленному дескриптору событий уведомлять клиента каждый раз, когда буфер становится готов к обработке клиента. Звуковые данные также можно обрабатывать в цикле на основе таймера. Этот режим показан в примере RenderExclusiveTimerDriven .

Дополнительные сведения о отрисовке потока см. в разделе "Отрисовка потока".

Примеры пакета SDK, использующие основные API аудио