Запись обратного цикла
В режиме обратного цикла клиент WASAPI может записать аудиопоток, который воспроизводится устройством конечной точки отрисовки. Чтобы открыть поток в режиме обратного цикла, клиент должен:
- Получите интерфейс IMMDevice для устройства конечной точки отрисовки.
- Инициализация потока записи в режиме обратной передачи на устройстве конечной точки отрисовки.
После выполнения этих действий клиент может вызвать метод IAudioClient::GetService для получения интерфейса IAudioCaptureClient на устройстве конечной точки отрисовки.
WASAPI предоставляет режим обратной передачи цикла в основном для поддержки акустической отмены эхо (AEC). Однако другие типы звуковых приложений могут найти режим обратного цикла, полезный для записи системного набора, который воспроизводится звуковой подсистемой.
В примере кода в записи потока можно легко изменить функцию RecordAudioStream, чтобы настроить поток записи в режиме цикла. Необходимые изменения:
- В вызове метода IMMDeviceEnumerator::GetDefaultAudioEndpoint измените первый параметр (dataFlow) с eCapture на eRender.
- В вызове метода IAudioClient::Initialize измените значение второго параметра (StreamFlags) на AUDCLNT_STREAMFLAGS_LOOPBACK.
В версиях Windows до Windows 10 1703 клиент записи в режиме извлечения не получает никаких событий при инициализации потока с буферизацией на основе событий и включена обратная связь. Чтобы обойти эту проблему, инициализировать поток отрисовки в режиме на основе событий. Каждый раз, когда клиент получает событие для потока отрисовки, он должен сигнализировать клиенту записи, чтобы запустить поток записи, который считывает следующий набор примеров из буфера конечной точки записи. В Windows 10 версии 1703 и более поздних версий поддерживаются клиенты, управляемые событиями, и больше не требуют обходного решения, связанного с потоком отрисовки.
Клиент может включить режим обратного цикла только для потока общего режима (AUDCLNT_SHAREMODE_SHARED). Потоки монопольного режима не могут работать в режиме обратного цикла.
Реализация обратного цикла по WASAPI зависит от возможностей оборудования. Если оборудование поддерживает пин-код обратного цикла в конечной точке отрисовки, WASAPI использует звук, предоставленный на этом пин-коде для потока обратной передачи. Если оборудование не поддерживает пин-код обратного цикла, WASAPI копирует выходной поток из звукового модуля в буфер записи приложения цикла, а также копирует звуковые данные в пин-код отрисовки оборудования.
Некоторые поставщики оборудования реализуют устройства обратного цикла (а не экземпляры закреплений на устройствах отрисовки) в своих звуковых адаптерах. Хотя аппаратные устройства циклического цикла похожи на режим обратного цикла WASAPI, они могут быть более сложными.
Аппаратные устройства обратного цикла имеют следующие недостатки для звуковых приложений:
- Не все аудиоадаптеры имеют устройства обратного цикла. Таким образом, приложения, зависящие от них, не будут работать во всех системах.
- Прежде чем приложение сможет записывать данные с устройства loopback, пользователь должен идентифицировать устройство loopback и включить его для использования.
Разные поставщики назначают разные имена устройствам обратного цикла оборудования. Ниже приведены примеры:
- Стерео смешивание
- Волны смешивания
- Смешанные выходные данные
- Что вы услышите
Отсутствие стандартных имен может привести к тому, что пользователи могут столкнуться с трудностями при определении устройства обратного цикла в списке имен устройств.
Аппаратное устройство обратного цикла — это устройство записи. Таким образом, если адаптер поддерживает устройство обратного цикла, звуковое приложение может записывать с устройства таким же образом, как и запись с любого другого устройства записи.
Например, если выбрать аппаратное устройство для отслеживания по умолчанию, можно использовать функцию RecordAudioStream (без изменений) в примере кода в записи потока для записи потока с устройства. (Вы также можете использовать устаревший API аудио, например функции Windows мультимедиаInXxx , для записи потока с устройства.)
Если звуковой адаптер содержит аппаратное устройство, вы можете использовать панель управления мультимедиа Windows, Mmsys.cpl, чтобы назначить устройство как устройство записи по умолчанию. Для этого необходимо выполнить следующие шаги:
Чтобы запустить Mmsys.cpl, откройте окно командной строки и введите следующую команду:
control mmsys.cpl
Кроме того, можно запустить Mmsys.cpl, щелкнув правой кнопкой мыши значок говорящего в области уведомлений, расположенную справа от панели задач, и выбрав "Устройства записи".
После открытия окна Mmsys.cpl щелкните правой кнопкой мыши в списке устройств записи и убедитесь, что установлен флажок "Показать отключенные устройства ". (В противном случае, если устройство обратного цикла отключено, оно не будет отображаться в списке.)
Просмотрите список устройств записи, чтобы найти устройство loopback (если оно существует). Если устройство обратного цикла отключено, включите его, щелкнув правой кнопкой мыши устройство и нажав кнопку "Включить".
Наконец, чтобы выбрать устройство обратного цикла, которое будет устройством записи по умолчанию, щелкните правой кнопкой мыши устройство и нажмите кнопку "Задать как устройство по умолчанию".
WASAPI поддерживает запись обратного цикла независимо от того, содержит ли звуковое оборудование устройство петли или включило ли пользователь устройство.
Windows Vista предоставляет управление цифровыми правами (DRM). Поставщики контента полагаются на DRM, чтобы защитить свою собственную музыку или другое содержимое от несанкционированного копирования и других незаконных использования. Аналогичным образом доверенный звуковой драйвер не позволяет устройству обратного цикла записывать цифровые потоки, содержащие защищенное содержимое. Windows Vista позволяет воспроизводить защищенное содержимое только доверенным драйверам. Дополнительные сведения о доверенных драйверах и DRM см. в документации по Windows DDK.
По умолчанию функция обратного цикла WASAPI содержит сочетание всех воспроизводимых звуков независимо от сеанса служб терминалов, от которого поступил звук. Например, можно запустить клиент loopback в службе, работающей в сеансе 0, и записать звук из всех сеансов пользователей, а также воспроизводить звук из сеанса 0.
Начиная с Windows 10 сборки 20348 можно включить или исключить определенные процессы и их дочерние элементы из отслеживания циклов, передав AUDIOCLIENT_ACTIVATION_PARAMS в вызове IMMDevice::Activate. См. пример записи аудиозаписи в цикле приложений.
Удаленный рабочий стол позволяет перенаправлять звук на клиент. Это реализуется путем создания новых звуковых устройств, которые отображаются только для этого сеанса.
См. также