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


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

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

Синтаксис

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesRead
);

Параметры

[in] NumFramesRead

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

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

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

Код возврата Description
AUDCLNT_E_INVALID_SIZE
Параметр NumFramesRead имеет значение, отличное от размера пакета данных или 0.
AUDCLNT_E_OUT_OF_ORDER
Этот вызов не предшествовал соответствующему вызову IAudioCaptureClient::GetBuffer .
AUDCLNT_E_DEVICE_INVALIDATED
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или недоступны для использования.
AUDCLNT_E_RESOURCES_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 , см. в разделе "Запись потока".

Требования

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

См. также

Интерфейс IAudioCaptureClient

IAudioCaptureClient::GetBuffer