Metode IAudioRenderClient::ReleaseBuffer (audioclient.h)

Metode ReleaseBuffer merilis ruang buffer yang diperoleh dalam panggilan sebelumnya ke metode IAudioRenderClient::GetBuffer .

Sintaks

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesWritten,
  [in] DWORD  dwFlags
);

Parameter

[in] NumFramesWritten

Jumlah bingkai audio yang ditulis oleh klien ke paket data. Nilai parameter ini harus kurang dari atau sama dengan ukuran paket data, seperti yang ditentukan dalam parameter NumFramesRequested yang diteruskan ke metode IAudioRenderClient::GetBuffer .

[in] dwFlags

Bendera konfigurasi buffer. Pemanggil dapat mengatur parameter ini baik ke 0 atau ke nilai enumerasi _AUDCLNT_BUFFERFLAGS berikut (bit bendera):

AUDCLNT_BUFFERFLAGS_SILENT

Jika bit bendera ini diatur, mesin audio memperlakukan paket data seolah-olah berisi keheningan terlepas dari nilai data yang terkandung dalam paket. Bendera ini menghilangkan kebutuhan klien untuk secara eksplisit menulis data keheningan ke buffer penyajian.

Nilai kembali

Jika metode berhasil, metode akan mengembalikan S_OK. Jika gagal, kemungkinan kode pengembalian disertakan, tetapi tidak terbatas pada, nilai yang diperlihatkan dalam tabel berikut.

Menampilkan kode Deskripsi
AUDCLNT_E_INVALID_SIZE
Nilai NumFramesWritten melebihi nilai NumFramesRequested yang ditentukan dalam panggilan IAudioRenderClient::GetBuffer sebelumnya.
AUDCLNT_E_BUFFER_SIZE_ERROR
Streaming adalah mode eksklusif dan menggunakan buffering berbasis peristiwa, tetapi klien mencoba untuk merilis paket yang bukan ukuran buffer.
AUDCLNT_E_OUT_OF_ORDER
Panggilan ini tidak didahului oleh panggilan yang sesuai ke IAudioRenderClient::GetBuffer.
AUDCLNT_E_DEVICE_INVALIDATED
Perangkat titik akhir audio telah dicabut, atau perangkat keras audio atau sumber daya perangkat keras terkait telah dikonfigurasi ulang, dinonaktifkan, dihapus, atau tidak tersedia untuk digunakan.
AUDCLNT_E_SERVICE_NOT_RUNNING
Layanan audio Windows tidak berjalan.
E_INVALIDARG
Parameter dwFlags bukan nilai yang valid.

Keterangan

Klien harus merilis jumlah bingkai yang sama dengan yang dimintanya dalam panggilan sebelumnya ke metode IAudioRenderClient::GetBuffer . Pengecualian tunggal untuk aturan ini adalah bahwa klien selalu dapat memanggil ReleaseBuffer untuk merilis 0 bingkai (kecuali aliran adalah mode eksklusif dan menggunakan buffering berbasis peristiwa).

Perilaku ini menyediakan cara yang nyaman bagi klien untuk "merilis" paket yang diminta sebelumnya dengan panjang 0. Dalam hal ini, panggilan ke ReleaseBuffer bersifat opsional. Setelah memanggil GetBuffer untuk mendapatkan paket panjang 0, klien memiliki opsi untuk tidak memanggil ReleaseBuffer sebelum memanggil GetBuffer lagi.

Selain itu, jika panggilan GetBuffer sebelumnya mendapatkan paket ukuran bukan nol, memanggil ReleaseBuffer dengan NumFramesRequested diatur ke 0 akan berhasil (kecuali aliran adalah mode eksklusif dan menggunakan buffering berbasis peristiwa). Arti dari panggilan adalah bahwa klien tidak menulis data ke paket sebelum merilisnya. Dengan demikian, metode memperlakukan bagian buffer yang diwakili oleh paket sebagai tidak digunakan dan akan membuat bagian buffer ini tersedia lagi untuk klien dalam panggilan GetBuffer berikutnya.

Klien harus menghindari penundaan berlebihan antara panggilan GetBuffer yang memperoleh buffer dan panggilan ReleaseBuffer yang merilis buffer. Implementasi mesin audio mengasumsikan bahwa panggilan GetBuffer dan panggilan ReleaseBuffer yang sesuai terjadi dalam periode pemrosesan buffer yang sama. Klien yang menunda merilis buffer untuk lebih dari satu periode berisiko kehilangan data sampel.

Untuk contoh kode yang memanggil metode ReleaseBuffer , lihat topik berikut:

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header audioclient.h

Lihat juga

IAudioClient::Initialize

Antarmuka IAudioRenderClient

IAudioRenderClient::GetBuffer