Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Метод GetCurrentPadding извлекает количество кадров заполнений в буфере конечной точки.
Синтаксис
HRESULT GetCurrentPadding(
[out] UINT32 *pNumPaddingFrames
);
Параметры
[out] pNumPaddingFrames
Указатель на переменную UINT32 , в которую метод записывает количество кадров (количество звуковых кадров в буфере).
Возвращаемое значение
Если метод выполнен успешно, он возвращает S_OK. В случае сбоя возможные коды возврата включаются, но не ограничиваются значениями, приведенными в следующей таблице.
| Код возврата | Description |
|---|---|
|
Аудиопоток не был успешно инициализирован. |
|
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или недоступны для использования. |
|
Ресурсы потока были недействительны. Эта ошибка может возникать по следующим причинам: — поток приостановлен. — Поток эксклюзивной или разгрузки отключен. — Упаковаемое приложение с монопольным режимом или потоком разгрузки. — Поток "защищенных выходных данных" закрыт. |
|
Звуковая служба Windows не запущена. |
|
Параметр pNumPaddingFrames имеет значение NULL. |
Замечания
Для этого метода требуется предварительная инициализация интерфейса IAudioClient . Все вызовы этого метода завершаются ошибкой AUDCLNT_E_NOT_INITIALIZED до тех пор, пока клиент не инициализирует аудиопоток, успешно вызвав метод IAudioClient::Initialize .
Этот метод получает значение заполнения, указывающее количество допустимых непрочитанных данных, содержащихся в буфере конечной точки. Приложение отрисовки может использовать значение заполнения, чтобы определить, сколько новых данных он может безопасно записывать в буфер конечной точки без перезаписи ранее записанных данных, которые звуковой модуль еще не считывал из буфера. Приложение записи может использовать значение заполнения, чтобы определить, сколько новых данных он может безопасно считывать из буфера конечной точки, не считывая недопустимые данные из области буфера, в который обработчик аудио еще не записал допустимые данные.
Значение заполнения выражается как ряд аудиокадров. Размер звукового кадра задается элементом nBlockAlign структуры WAVEFORMATEX (или WAVEFORMATEXTENSIBLE), переданной клиенту методу IAudioClient::Initialize . Размер звукового кадра в байтах равен количеству каналов в потоке, умноженном на размер выборки на канал. Например, размер кадра составляет четыре байта для потока стерео (2-канал) с 16-разрядными образцами.
Для потока отрисовки в общем режиме значение заполнения, сообщаемое GetCurrentPadding , указывает количество аудиокадров, которые помещаются в очередь для воспроизведения в буфере конечной точки. Перед записью в буфер конечной точки клиент может вычислить объем доступного пространства в буфере, вычитая значение заполнения из длины буфера. Чтобы обеспечить успешное выполнение последующего вызова метода IAudioRenderClient::GetBuffer , клиент должен запросить длину пакета, которая не превышает доступное пространство в буфере. Чтобы получить длину буфера, вызовите метод IAudioClient::GetBufferSize .
Для потока захвата в общем режиме значение заполнения, сообщаемое GetCurrentPadding , указывает количество кадров данных записи, доступных в следующем пакете в буфере конечной точки. В определенный момент, ноль, один или несколько пакетов данных записи могут быть готовы для чтения из буфера клиентом. Если в настоящее время пакеты недоступны, метод сообщает значение 0. После вызова GetCurrentPadding вызов метода IAudioCaptureClient::GetBuffer извлекает пакет, длина которого точно равна значению заливки, сообщаемого GetCurrentPadding. Каждый вызов GetBuffer извлекает целый пакет. Пакет всегда содержит целое число аудиокадров.
Для потока захвата в общем режиме вызов GetCurrentPadding эквивалентен вызову метода IAudioCaptureClient::GetNextPacketSize . То есть значение заполнения, сообщаемое GetCurrentPadding , равной длине пакета, сообщаемой GetNextPacketSize.
Для потока отрисовки или записи в монопольном режиме, который был инициализирован с помощью флага AUDCLNT_STREAMFLAGS_EVENTCALLBACK, клиент обычно не использует значение отрисовки, сообщаемое GetCurrentPadding. Вместо этого клиент обращается ко всему буферу во время каждого прохода обработки. Каждый раз, когда буфер становится доступным для обработки, звуковой модуль уведомляет клиента, сигнализируя дескриптор событий клиента. Дополнительные сведения об этом флаге см. в разделе IAudioClient::Initialize.
Для потока отрисовки или записи в монопольном режиме, который не был инициализирован с помощью флага AUDCLNT_STREAMFLAGS_EVENTCALLBACK, клиент может использовать значение заполнения, полученное из GetCurrentPadding таким образом, как описано ранее для потока общего режима. Ниже приведены сведения.
Во-первых, для потока отрисовки в монопольном режиме значение заполнения указывает количество аудиокадров, которые помещаются в очередь для воспроизведения в буфере конечной точки. Как и раньше, клиент может вычислить объем доступного пространства в буфере, вычитая значение заполнения из длины буфера.
Во-вторых, для потока захвата в монопольном режиме значение заполнения, сообщаемое GetCurrentPadding , указывает текущую длину следующего пакета. Однако это значение заполнения представляет собой моментальный снимок длины пакета, который может увеличиться до вызова метода IAudioCaptureClient::GetBuffer . Таким образом, длина пакета, полученного GetBuffer , по крайней мере больше, но может быть больше, чем, значение заполнения, сообщаемое вызовом GetCurrentPadding , который предшествовал вызову GetBuffer . В отличие от этого, длина пакета, полученного из GetBuffer , всегда равна значению заполнения, сообщаемого предыдущим вызовом GetCurrentPadding .
Пример кода, вызывающий метод GetCurrentPadding , см. в разделе "Отрисовка потока".
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows Vista [классические приложения | Приложения UWP] |
| минимальный поддерживаемый сервер | Windows Server 2008 [классические приложения | Приложения UWP] |
| целевая платформа | Windows |
| Header | audioclient.h |
См. также
IAudioCaptureClient::GetBuffer