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


Метод IAudioClient3::InitializeSharedAudioStream (audioclient.h)

Инициализирует общий поток с указанной периодичностью.

Синтаксис

HRESULT InitializeSharedAudioStream(
  [in]           DWORD              StreamFlags,
  [in]           UINT32             PeriodInFrames,
  [in]           const WAVEFORMATEX *pFormat,
  [in, optional] LPCGUID            AudioSessionGuid
);

Параметры

[in] StreamFlags

Тип: DWORD

Флаги для управления созданием потока. Клиент должен задать этому параметру значение 0 или побитовое значение ИЛИ одной или нескольких поддерживаемых констант AUDCLNT_STREAMFLAGS_XXX или констант AUDCLNT_SESSIONFLAGS_XXX. Поддерживаемые константы AUDCLNT_STREAMFLAGS_XXX для этого параметра при использовании этого метода:

  • AUDCLNT_STREAMFLAGS_EVENTCALLBACK

[in] PeriodInFrames

Тип: UINT32

Периодичность, запрашиваемая клиентом. Это значение должно быть целочисленным, кратным значению, возвращаемого в параметре pFundamentalPeriodInFramesдля IAudioClient3::GetSharedModeEnginePeriod. PeriodInFrames также должен быть больше или равен значению, возвращаемого в pMinPeriodInFrames , и меньше или равно значению, возвращаемого в pMaxPeriodInFrames.

[in] pFormat

Тип: const WAVEFORMATEX*

Указатель на дескриптор формата. Этот параметр должен указывать на допустимый дескриптор формата типа WAVEFORMATEX или WAVEFORMATEXTENSIBLE. Дополнительные сведения см. в разделе Примечания для IAudioClient::Initialize.

[in, optional] AudioSessionGuid

Тип: LPCGUID

Указатель на GUID сеанса. Этот параметр указывает на значение GUID, определяющее звуковой сеанс, к которому принадлежит поток. Если GUID идентифицирует ранее открытый сеанс, метод добавляет поток в этот сеанс. Если GUID не идентифицирует существующий сеанс, метод открывает новый сеанс и добавляет поток в этот сеанс. Поток остается членом одного и того же сеанса на протяжении всего времени его существования. Присвоение этому параметру значения NULL эквивалентно передаче указателя на значение GUID_NULL.

Возвращаемое значение

Тип: HRESULT

Если метод завершается успешно, возвращает значение S_OK. В случае сбоя возможные коды возврата включают, но не ограничиваются ими, значения, показанные в следующей таблице.

Код возврата Описание
AUDCLNT_E_ALREADY_INITIALIZED
Объект IAudioClient уже инициализирован .
AUDCLNT_E_WRONG_ENDPOINT_TYPE
Флаг AUDCLNT_STREAMFLAGS_LOOPBACK установлен, но устройство конечной точки является устройством захвата, а не устройством отрисовки.
AUDCLNT_E_CPUUSAGE_EXCEEDED
Указывает, что длительность прохода процесса превысила максимальную загрузку ЦП. Звуковой модуль отслеживает загрузку ЦП, сохраняя количество раз, когда длительность прохода процесса превышает максимальную загрузку ЦП. Максимальная загрузка ЦП рассчитывается в процентах от периодичности ядра. Процентное значение — это значение регулирования ЦП системы (в диапазоне от 10 % до 90 %). Если это значение не найдено, то для вычисления максимальной загрузки ЦП используется значение по умолчанию 40 %.
AUDCLNT_E_DEVICE_INVALIDATED
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или иным образом стали недоступными для использования.
AUDCLNT_E_DEVICE_IN_USE
Устройство конечной точки уже используется. Либо устройство используется в монопольном режиме, либо устройство используется в общем режиме, и вызывающий запрос на использование устройства в монопольном режиме.
AUDCLNT_E_ENGINE_FORMAT_LOCKED
Указанный клиент AUDCLNT_STREAMOPTIONS_MATCH_FORMAT при вызове IAudioClient2::SetClientProperties, но формат звукового модуля был заблокирован другим клиентом. В этом случае можно вызвать IAudioClient2::SetClientProperties без указания параметра формата соответствия, а затем использовать текущий формат обработчика аудио.
AUDCLNT_E_ENGINE_PERIODICITY_LOCKED
Указанный клиент AUDCLNT_STREAMOPTIONS_MATCH_FORMAT при вызове IAudioClient2::SetClientProperties, но периодичность звукового обработчика была заблокирована другим клиентом. В этом случае можно вызвать IAudioClient2::SetClientProperties без указания параметра формата соответствия, а затем использовать текущую периодичность обработчика звука.
AUDCLNT_E_ENDPOINT_CREATE_FAILED
Методу не удалось создать конечную точку звука для отрисовки или устройства захвата. Это может произойти, если устройство конечной точки звука было отключено или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или иным образом стали недоступными для использования.
AUDCLNT_E_INVALID_DEVICE_PERIOD
Указывает, что запрошенный период устройства, указанный с помощью PeriodInFrames , не является целочисленным кратным основной периодичности звукового модуля, короче минимального периода подсистемы или длиннее максимального периода обработчика. Получите поддерживаемые значения периодичности подсистемы, вызвав IAudioClient3::GetSharedModeEnginePeriod.
AUDCLNT_E_UNSUPPORTED_FORMAT
Звуковой модуль (общий режим) или устройство конечной точки аудио (монопольный режим) не поддерживают указанный формат.
AUDCLNT_E_SERVICE_NOT_RUNNING
Аудиослужба Windows не запущена.
E_POINTER
Параметр pFormat имеет значение NULL.
E_INVALIDARG
Параметр pFormat указывает на недопустимое описание формата; или флаг AUDCLNT_STREAMFLAGS_LOOPBACK установлен, но ShareMode не равен AUDCLNT_SHAREMODE_SHARED; или флаг AUDCLNT_STREAMFLAGS_CROSSPROCESS установлен, но ShareMode равен AUDCLNT_SHAREMODE_EXCLUSIVE.

Предыдущий вызов SetClientProperties был выполнен с недопустимой категорией для аудио-потоков или потоков отрисовки.

E_OUTOFMEMORY
Недостаточно памяти.

Комментарии

В отличие от IAudioClient::Initialize, этот метод не позволяет указать размер буфера. Размер буфера вычисляется на основе периодичности, запрошенной с помощью параметра PeriodInFrames . Клиентское приложение отвечает за своевременную передачу звуковых примеров в буфер и из него.

Звуковые клиенты должны проверка допустимых значений для параметра PeriodInFrames, вызвав IAudioClient3::GetSharedModeEnginePeriod. Значение PeriodInFrames должно быть целочисленным, кратным значению, возвращаемого в параметре pFundamentalPeriodInFrames . PeriodInFrames также должен быть больше или равен значению, возвращаемого в pMinPeriodInFrames , и меньше или равно значению pMaxPeriodInFrames.

Например, для формата 44100 кГц GetSharedModeEnginePeriod может возвращать следующее:

  • pDefaultPeriodInFrames = 448 кадров (около 10,16 миллисекунда)

  • pFundamentalPeriodInFrames = 4 кадра (около 0,09 миллисекунд)

  • pMinPeriodInFrames = 48 кадров (около 1,09 миллисекунда)

  • pMaxPeriodInFrames = 448 кадров (аналогично значению по умолчанию)

Допустимые значения параметра PeriodInFramesдля InitializeSharedAudioStream будут включать 48 и 448. Они также будут включать такие вещи, как 96 и 128.

Они не будут включать 4 (которое меньше минимально допустимого значения) или 98 (что не кратно основному) или 1000 (что больше максимально допустимого значения).

Требования

Требование Значение
Минимальная версия клиента Windows 10 [только классические приложения]
Минимальная версия сервера Windows Server 2016 [только классические приложения]
Целевая платформа Windows
Header audioclient.h

См. также раздел

IAudioClient

IAudioClient2

IAudioClient3