Метод IAudioCaptureClient::ReleaseBuffer (audioclient.h)

Метод ReleaseBuffer освобождает буфер.

Синтаксис

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesRead
);

Параметры

[in] NumFramesRead

Количество аудиокадров, которые клиент считывает из буфера записи. Этот параметр должен быть равен количеству кадров в ранее полученном пакете данных или равен 0.

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

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

Код возврата Описание
AUDCLNT_E_INVALID_SIZE
Параметр NumFramesRead имеет значение, отличное от размера пакета данных или 0.
AUDCLNT_E_OUT_OF_ORDER
Этому вызову не предшествовал соответствующий вызов IAudioCaptureClient::GetBuffer .
AUDCLNT_E_DEVICE_INVALIDATED
Устройство конечной точки аудио отключено, звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или иным образом недоступны для использования.
AUDCLNT_E_SERVICE_NOT_RUNNING
Служба звука Windows не запущена.

Комментарии

Клиент должен вызвать этот метод, когда завершит чтение пакета данных, полученного ранее путем вызова метода IAudioCaptureClient::GetBuffer .

Данные в пакете, полученном клиентом из вызова GetBuffer , гарантированно остаются действительными до тех пор, пока клиент не вызовет ReleaseBuffer , чтобы освободить пакет.

Между каждым вызовом GetBuffer и соответствующим вызовом ReleaseBuffer клиент должен либо считывать весь пакет данных, либо ни один из них. Если клиент считывает весь пакет после вызова GetBuffer , он должен вызвать ReleaseBuffer с параметром NumFramesRead , равным общему количеству кадров в пакете данных. В этом случае следующий вызов GetBuffer создаст новый пакет данных. Если клиент не считывает данные из пакета после вызова GetBuffer, он должен вызвать ReleaseBuffer с параметром NumFramesRead , равным 0. В этом случае следующий вызов GetBuffer создаст тот же пакет данных, что и при предыдущем вызове GetBuffer .

Если клиент вызывает ReleaseBuffer с значением NumFramesRead , кроме размера пакета или 0, вызов завершается ошибкой и возвращает код ошибки AUDCLNT_E_INVALID_SIZE.

Клиентам следует избегать чрезмерных задержек между вызовом GetBuffer , который получает буфер, и вызовом ReleaseBuffer , который освобождает буфер. Реализация звукового модуля предполагает, что вызов GetBuffer и соответствующий вызов ReleaseBuffer происходят в течение одного периода обработки буфера. Клиенты, которые задерживают освобождение буфера на более чем один период, рискуют потерять образцы данных.

Пример кода, который вызывает метод ReleaseBuffer, см. в разделе Захват Stream.

Требования

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

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

Интерфейс IAudioCaptureClient

IAudioCaptureClient::GetBuffer