RenderSharedEventDriven
В этом примере приложения используются API core Audio для отрисовки звуковых данных на выходное устройство, указанное пользователем. В этом примере демонстрируется буферизация на основе событий для клиента отрисовки в общем режиме. Для потока общего режима клиент предоставляет общий доступ к буферу конечной точки с звуковой подсистемой.
В этом разделе содержатся следующие разделы.
Описание
В этом примере показаны следующие функции.
- API MMDevice для перечисления и выбора мультимедийных устройств.
- WASAPI для операций управления потоками.
Требования
Продукт | Версия |
---|---|
пакета SDK для Windows | Windows 7 |
Visual Studio | 2008 |
Скачивание примера
Этот пример доступен в следующих расположениях.
Местоположение | Путь или URL-адрес |
---|---|
Windows SDK | \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderSharedEventDriven\... |
Создание примера
Чтобы создать пример RenderSharedEventDriven, выполните следующие действия.
- Откройте оболочку CMD для пакета SDK для Windows и перейдите в пример каталога RenderSharedEventDriven.
- Выполните команду
start WASAPIRenderSharedEventDriven.sln
в каталоге RenderSharedEventDriven, чтобы открыть проект WASAPIRenderSharedEventDriven в окне Visual Studio. - В окне выберите конфигурацию решения отладки или выпуска, выберите меню сборки сборки в строке меню и выберите параметр Сборка. Если вы не открываете Visual Studio из оболочки CMD для пакета SDK, Visual Studio не будет иметь доступа к среде сборки пакета SDK. В этом случае пример не будет создаваться, если вы явно не задаете переменную среды MSSdk, которая используется в файле проекта, WASAPIRenderSharedEventDriven.vcproj.
Запуск примера
При успешной сборке демонстрационного приложения создается исполняемый файл WASAPIRenderSharedEventDriven.exe. Чтобы запустить его, введите WASAPIRenderSharedEventDriven
в командном окне, а затем обязательные или необязательные аргументы. В следующем примере показано, как запустить пример, указав длительность воспроизведения на мультимедийном устройстве по умолчанию.
WASAPIRenderSharedEventDriven.exe -d 20 -multimedia
В следующей таблице показаны аргументы.
Аргумент | Описание |
---|---|
-? | Отображает справку. |
-h | Отображает справку. |
-f | Частота синусовой волны в Гц. |
-l | Задержка отрисовки звука в миллисекундах. |
-d | Длительность синусовой волны в секундах. |
-m | Отключает использование MMCSS. |
-консоль | Используйте консольное устройство по умолчанию. |
-связь | Используйте устройство связи по умолчанию. |
-мультимедиа | Используйте мультимедийное устройство по умолчанию. |
-конечная точка | Используйте идентификатор конечной точки, указанный в значении коммутатора. |
Если приложение выполняется без аргументов, оно перечисляет доступные устройства и предложит пользователю выбрать устройство для сеанса отрисовки. После того как пользователь указывает устройство, приложение отрисовывает синусную волну на 440 Гц в течение 10 секунд. Эти значения можно изменить, указав значения -f и -d переключения.
RenderSharedEventDriven демонстрирует буферизацию на основе событий. В примере показано, как:
- Создайте экземпляр звукового клиента, настройте его для запуска в монопольном режиме и включите буферизацию на основе событий, задав флаг AUDCLNT_STREAMFLAGS_EVENTCALLBACK в вызове IAudioClient::Initialize.
- Свяжите клиента с примерами, готовыми к просмотру, предоставив дескриптор событий системе, вызвав метод IAudioClient::SetEventHandle.
- Создайте поток отрисовки для примеров из звукового модуля.
- Проверьте формат смешивания конечной точки устройства, чтобы определить, можно ли отображать примеры. Если устройство не поддерживает формат смеси, данные преобразуются в PCM.
- Обработка переключения потоков.
После начала сеанса отрисовки и запуска потока звуковой подсистемы сигнализирует предоставленному дескриптору событий уведомлять клиента каждый раз, когда буфер становится готов к обработке клиента. Звуковые данные также можно обрабатывать в цикле на основе таймера. Этот режим показан в примере RenderSharedTimerDriven.
Дополнительные сведения о отрисовке потока см. в разделе отрисовки потока.
Связанные разделы
-
Примеры пакета SDK , использующие основные API аудио