Metode IAudioClient::GetCurrentPadding (audioclient.h)

Metode GetCurrentPadding mengambil jumlah bingkai padding di buffer titik akhir.

Sintaks

HRESULT GetCurrentPadding(
  [out] UINT32 *pNumPaddingFrames
);

Parameter

[out] pNumPaddingFrames

Penunjuk ke variabel UINT32 tempat metode menulis jumlah bingkai (jumlah bingkai audio padding di buffer).

Nilai kembali

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

Menampilkan kode Deskripsi
AUDCLNT_E_NOT_INITIALIZED
Aliran audio belum berhasil diinisialisasi.
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 dibuat tidak tersedia untuk digunakan.
AUDCLNT_E_SERVICE_NOT_RUNNING
Layanan audio Windows tidak berjalan.
E_POINTER
Parameter pNumPaddingFrames adalah NULL.

Keterangan

Metode ini memerlukan inisialisasi sebelumnya dari antarmuka IAudioClient . Semua panggilan ke metode ini akan gagal dengan kesalahan AUDCLNT_E_NOT_INITIALIZED sampai klien menginisialisasi aliran audio dengan berhasil memanggil metode IAudioClient::Initialize .

Metode ini mengambil nilai padding yang menunjukkan jumlah data yang valid dan belum dibaca yang saat ini dimuat buffer titik akhir. Aplikasi penyajian dapat menggunakan nilai padding untuk menentukan berapa banyak data baru yang dapat ditulis dengan aman ke buffer titik akhir tanpa menimpa data yang ditulis sebelumnya yang belum dibaca mesin audio dari buffer. Aplikasi penangkapan dapat menggunakan nilai padding untuk menentukan berapa banyak data baru yang dapat dibaca dengan aman dari buffer titik akhir tanpa membaca data yang tidak valid dari wilayah buffer tempat mesin audio belum menulis data yang valid.

Nilai padding dinyatakan sebagai sejumlah bingkai audio. Ukuran bingkai audio ditentukan oleh anggota nBlockAlign dari struktur WAVEFORMATEX (atau WAVEFORMATEXTENSIBLE) yang diteruskan klien ke metode IAudioClient::Initialize . Ukuran dalam byte bingkai audio sama dengan jumlah saluran dalam aliran yang dikalikan dengan ukuran sampel per saluran. Misalnya, ukuran bingkai adalah empat byte untuk aliran stereo (2 saluran) dengan sampel 16-bit.

Untuk aliran penyajian mode bersama, nilai padding yang dilaporkan oleh GetCurrentPadding menentukan jumlah bingkai audio yang diantrekan untuk diputar di buffer titik akhir. Sebelum menulis ke buffer titik akhir, klien dapat menghitung jumlah ruang yang tersedia di buffer dengan mengurangi nilai padding dari panjang buffer. Untuk memastikan bahwa panggilan berikutnya ke metode IAudioRenderClient::GetBuffer berhasil, klien harus meminta panjang paket yang tidak melebihi ruang yang tersedia di buffer. Untuk mendapatkan panjang buffer, panggil metode IAudioClient::GetBufferSize .

Untuk aliran pengambilan mode bersama, nilai padding yang dilaporkan oleh GetCurrentPadding menentukan jumlah bingkai data pengambilan yang tersedia dalam paket berikutnya di buffer titik akhir. Pada saat tertentu, nol, satu, atau beberapa paket data penangkapan mungkin siap untuk dibaca klien dari buffer. Jika saat ini tidak ada paket yang tersedia, metode melaporkan nilai padding 0. Mengikuti panggilan GetCurrentPadding , panggilan metode IAudioCaptureClient::GetBuffer akan mengambil paket yang panjangnya sama persis dengan nilai padding yang dilaporkan oleh GetCurrentPadding. Setiap panggilan ke GetBuffer mengambil seluruh paket. Paket selalu berisi jumlah bingkai audio yang tidak terpisahkan.

Untuk aliran pengambilan mode bersama, memanggil GetCurrentPadding setara dengan memanggil metode IAudioCaptureClient::GetNextPacketSize . Artinya, nilai padding yang dilaporkan oleh GetCurrentPadding sama dengan panjang paket yang dilaporkan oleh GetNextPacketSize.

Untuk penyajian mode eksklusif atau aliran pengambilan yang diinisialisasi dengan bendera AUDCLNT_STREAMFLAGS_EVENTCALLBACK, klien biasanya tidak memiliki penggunaan untuk nilai padding yang dilaporkan oleh GetCurrentPadding. Sebagai gantinya, klien mengakses seluruh buffer selama setiap lulus pemrosesan. Setiap kali buffer tersedia untuk diproses, mesin audio memberi tahu klien dengan memberi sinyal handel peristiwa klien. Untuk informasi selengkapnya tentang bendera ini, lihat IAudioClient::Initialize.

Untuk penyajian mode eksklusif atau aliran pengambilan yang tidak diinisialisasi dengan bendera AUDCLNT_STREAMFLAGS_EVENTCALLBACK, klien dapat menggunakan nilai padding yang diperoleh dari GetCurrentPadding dengan cara yang mirip dengan yang dijelaskan sebelumnya untuk aliran mode bersama. Detailnya adalah sebagai berikut.

Pertama, untuk aliran penyajian mode eksklusif, nilai padding menentukan jumlah bingkai audio yang diantrekan untuk diputar di buffer titik akhir. Seperti sebelumnya, klien dapat menghitung jumlah ruang yang tersedia dalam buffer dengan mengurangi nilai padding dari panjang buffer.

Kedua, untuk aliran pengambilan mode eksklusif, nilai padding yang dilaporkan oleh GetCurrentPadding menentukan panjang paket berikutnya saat ini. Namun, nilai padding ini adalah rekam jepret dengan panjang paket, yang mungkin meningkat sebelum klien memanggil metode IAudioCaptureClient::GetBuffer . Dengan demikian, panjang paket yang diambil oleh GetBuffer setidaknya sebesar, tetapi mungkin lebih besar dari, nilai padding yang dilaporkan oleh panggilan GetCurrentPadding yang mendahului panggilan GetBuffer . Sebaliknya, untuk aliran pengambilan mode bersama, panjang paket yang diperoleh dari GetBuffer selalu sama dengan nilai padding yang dilaporkan oleh panggilan GetCurrentPadding sebelumnya.

Untuk contoh kode yang memanggil metode GetCurrentPadding, lihat Merender Stream.

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

IAudioCaptureClient::GetBuffer

IAudioCaptureClient::GetNextPacketSize

Antarmuka IAudioClient

IAudioClient::Initialize

IAudioRenderClient::GetBuffer