Compartir a través de


Método IAudioClient3::InitializeSharedAudioStream (audioclient.h)

Inicializa una secuencia compartida con la periodicidad especificada.

Sintaxis

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

Parámetros

[in] StreamFlags

Tipo: DWORD

Marcas para controlar la creación de la secuencia. El cliente debe establecer este parámetro en 0 o en el or bit a bit de uno o varios de los AUDCLNT_STREAMFLAGS_XXX constantes compatibles o AUDCLNT_SESSIONFLAGS_XXX constantes. Las constantes de AUDCLNT_STREAMFLAGS_XXX admitidas para este parámetro cuando se usa este método son:

  • AUDCLNT_STREAMFLAGS_EVENTCALLBACK

[in] PeriodInFrames

Tipo: UINT32

Periodicidad solicitada por el cliente. Este valor debe ser un múltiplo entero del valor devuelto en el parámetro pFundamentalPeriodInFrames a IAudioClient3::GetSharedModeEnginePeriod. PeriodInFrames también debe ser mayor o igual que el valor devuelto en pMinPeriodInFrames y menor o igual que el valor devuelto en pMaxPeriodInFrames.

[in] pFormat

Tipo: const WAVEFORMATEX*

Puntero a un descriptor de formato. Este parámetro debe apuntar a un descriptor de formato válido de tipo WAVEFORMATEX o WAVEFORMATEXTENSIBLE. Para obtener más información, vea la sección Comentarios de IAudioClient::Initialize.

[in, optional] AudioSessionGuid

Tipo: LPCGUID

Puntero a un GUID de sesión. Este parámetro apunta a un valor GUID que identifica la sesión de audio a la que pertenece la secuencia. Si el GUID identifica una sesión que se ha abierto anteriormente, el método agrega la secuencia a esa sesión. Si el GUID no identifica una sesión existente, el método abre una nueva sesión y agrega la secuencia a esa sesión. La secuencia sigue siendo miembro de la misma sesión durante su vigencia. Establecer este parámetro en NULL equivale a pasar un puntero a un valor de GUID_NULL.

Valor devuelto

Tipo: HRESULT

Si el método se realiza correctamente, devuelve S_OK. Si se produce un error, los códigos de retorno posibles incluyen, entre otros, los valores que se muestran en la tabla siguiente.

Código devuelto Descripción
AUDCLNT_E_ALREADY_INITIALIZED
El objeto IAudioClient ya se ha inicializado.
AUDCLNT_E_WRONG_ENDPOINT_TYPE
La marca AUDCLNT_STREAMFLAGS_LOOPBACK está establecida, pero el dispositivo de punto de conexión es un dispositivo de captura, no un dispositivo de representación.
AUDCLNT_E_CPUUSAGE_EXCEEDED
Indica que la duración del paso del proceso superó el uso máximo de CPU. El motor de audio realiza un seguimiento del uso de CPU manteniendo el número de veces que la duración del paso del proceso supera el uso máximo de CPU. El uso máximo de CPU se calcula como porcentaje de la periodicidad del motor. El valor porcentual es el valor de limitación de CPU del sistema (dentro del intervalo del 10 % y el 90 %). Si no se encuentra este valor, se usa el valor predeterminado del 40 % para calcular el uso máximo de CPU.
AUDCLNT_E_DEVICE_INVALIDATED
El dispositivo de punto de conexión de audio se ha desconectado o el hardware de audio o los recursos de hardware asociados se han reconfigurado, deshabilitado, quitado o dejado de estar disponible para su uso.
AUDCLNT_E_DEVICE_IN_USE
El dispositivo de punto de conexión ya está en uso. El dispositivo se usa en modo exclusivo o el dispositivo se usa en modo compartido y el autor de la llamada pidió que usara el dispositivo en modo exclusivo.
AUDCLNT_E_ENGINE_FORMAT_LOCKED
El cliente especificó AUDCLNT_STREAMOPTIONS_MATCH_FORMAT al llamar a IAudioClient2::SetClientProperties, pero otro cliente ha bloqueado el formato del motor de audio. En este caso, puede llamar a IAudioClient2::SetClientProperties sin especificar la opción de formato de coincidencia y, a continuación, usar el formato actual del motor de audio.
AUDCLNT_E_ENGINE_PERIODICITY_LOCKED
El cliente especificó AUDCLNT_STREAMOPTIONS_MATCH_FORMAT al llamar a IAudioClient2::SetClientProperties, pero otro cliente ha bloqueado la periodicidad del motor de audio. En este caso, puede llamar a IAudioClient2::SetClientProperties sin especificar la opción de formato de coincidencia y, a continuación, usar la periodicidad actual del motor de audio.
AUDCLNT_E_ENDPOINT_CREATE_FAILED
El método no pudo crear el punto de conexión de audio para la representación o el dispositivo de captura. Esto puede ocurrir si el dispositivo de punto de conexión de audio se ha desconectado o el hardware de audio o los recursos de hardware asociados se han reconfigurado, deshabilitado, quitado o si no están disponibles para su uso.
AUDCLNT_E_INVALID_DEVICE_PERIOD
Indica que el período de dispositivo solicitado especificado con PeriodInFrames no es un múltiplo entero de la periodicidad fundamental del motor de audio, es más corto que el período mínimo del motor o es mayor que el período máximo del motor. Obtenga los valores de periodicidad admitidos del motor mediante una llamada a IAudioClient3::GetSharedModeEnginePeriod.
AUDCLNT_E_UNSUPPORTED_FORMAT
El motor de audio (modo compartido) o el dispositivo de punto de conexión de audio (modo exclusivo) no admite el formato especificado.
AUDCLNT_E_SERVICE_NOT_RUNNING
El servicio de audio de Windows no se está ejecutando.
E_POINTER
El parámetro pFormat es NULL.
E_INVALIDARG
El parámetro pFormat apunta a una descripción de formato no válida; o la marca AUDCLNT_STREAMFLAGS_LOOPBACK está establecida, pero ShareMode no es igual a AUDCLNT_SHAREMODE_SHARED; o la marca AUDCLNT_STREAMFLAGS_CROSSPROCESS está establecida, pero ShareMode es igual a AUDCLNT_SHAREMODE_EXCLUSIVE.

Se realizó una llamada anterior a SetClientProperties con una categoría no válida para las secuencias de audio/representación.

E_OUTOFMEMORY
Memoria insuficiente

Comentarios

A diferencia de IAudioClient::Initialize, este método no permite especificar un tamaño de búfer. El tamaño del búfer se calcula en función de la periodicidad solicitada con el parámetro PeriodInFrames . Es responsabilidad de la aplicación cliente asegurarse de que las muestras de audio se transfieren dentro y fuera del búfer de forma oportuna.

Los clientes de audio deben comprobar los valores permitidos para el parámetro PeriodInFrames mediante una llamada a IAudioClient3::GetSharedModeEnginePeriod. El valor de PeriodInFrames debe ser un múltiplo entero del valor devuelto en el parámetro pFundamentalPeriodInFrames . PeriodInFrames también debe ser mayor o igual que el valor devuelto en pMinPeriodInFrames y menor o igual que el valor de pMaxPeriodInFrames.

Por ejemplo, para un formato de 44100 kHz, GetSharedModeEnginePeriod podría devolver:

  • pDefaultPeriodInFrames = 448 fotogramas (aproximadamente 10,16 milisegundos)

  • pFundamentalPeriodInFrames = 4 fotogramas (aproximadamente 0,09 milisegundos)

  • pMinPeriodInFrames = 48 fotogramas (aproximadamente 1,09 milisegundos)

  • pMaxPeriodInFrames = 448 fotogramas (igual que el predeterminado)

Los valores permitidos para el parámetro PeriodInFrames para InitializeSharedAudioStream incluirían 48 y 448. También incluirían cosas como 96 y 128.

NO incluirían 4 (que es menor que el valor mínimo permitido) o 98 (que no es múltiplo del fundamental) o 1000 (que es mayor que el valor máximo permitido).

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2016 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado audioclient.h

Consulte también

IAudioClient

IAudioClient2

IAudioClient3