Bagikan melalui


Metode IAudioClient3::InitializeSharedAudioStream (audioclient.h)

Menginisialisasi aliran bersama dengan periodisitas yang ditentukan.

Sintaks

HRESULT InitializeSharedAudioStream(
  [in]           DWORD              StreamFlags,
  [in]           UINT32             PeriodInFrames,
  [in]           const WAVEFORMATEX *pFormat,
  [in, optional] LPCGUID            AudioSessionGuid
);

Parameter

[in] StreamFlags

Jenis: DWORD

Bendera untuk mengontrol pembuatan aliran. Klien harus mengatur parameter ini ke 0 atau ke bitwise ATAU dari satu atau beberapa konstanta AUDCLNT_STREAMFLAGS_XXX yang didukung atau konstanta AUDCLNT_SESSIONFLAGS_XXX. Konstanta AUDCLNT_STREAMFLAGS_XXX yang didukung untuk parameter ini saat menggunakan metode ini adalah:

  • AUDCLNT_STREAMFLAGS_EVENTCALLBACK

[in] PeriodInFrames

Jenis: UINT32

Periodisitas yang diminta oleh klien. Nilai ini harus merupakan kelipatan integral dari nilai yang dikembalikan dalam parameter pFundamentalPeriodInFrames ke IAudioClient3::GetSharedModeEnginePeriod. PeriodInFrames juga harus lebih besar dari atau sama dengan nilai yang dikembalikan dalam pMinPeriodInFrames dan kurang dari atau sama dengan nilai yang dikembalikan dalam pMaxPeriodInFrames.

[in] pFormat

Jenis: const WAVEFORMATEX*

Penunjuk ke deskriptor format. Parameter ini harus menunjuk ke pendeskripsi format yang valid dari jenis WAVEFORMATEX atau WAVEFORMATEXTENSIBLE. Untuk informasi selengkapnya, lihat bagian Keterangan untuk IAudioClient::Initialize.

[in, optional] AudioSessionGuid

Jenis: LPCGUID

Penunjuk ke GUID sesi. Parameter ini menunjuk ke nilai GUID yang mengidentifikasi sesi audio tempat aliran berada. Jika GUID mengidentifikasi sesi yang telah dibuka sebelumnya, metode menambahkan aliran ke sesi tersebut. Jika GUID tidak mengidentifikasi sesi yang ada, metode membuka sesi baru dan menambahkan aliran ke sesi tersebut. Aliran tetap menjadi anggota sesi yang sama selama masa pakainya. Mengatur parameter ini ke NULL setara dengan meneruskan pointer ke nilai GUID_NULL.

Mengembalikan nilai

Jenis: HRESULT

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_ALREADY_INITIALIZED
Objek IAudioClient sudah diinisialisasi.
AUDCLNT_E_WRONG_ENDPOINT_TYPE
Bendera AUDCLNT_STREAMFLAGS_LOOPBACK diatur tetapi perangkat titik akhir adalah perangkat tangkapan, bukan perangkat penyajian.
AUDCLNT_E_CPUUSAGE_EXCEEDED
Menunjukkan bahwa durasi proses-pass melebihi penggunaan CPU maksimum. Mesin audio melacak penggunaan CPU dengan mempertahankan berapa kali durasi proses-lulus melebihi penggunaan CPU maksimum. Penggunaan CPU maksimum dihitung sebagai persen dari periodisitas mesin. Nilai persentase adalah nilai pembatasan CPU sistem (dalam kisaran 10% dan 90%). Jika nilai ini tidak ditemukan, maka nilai default 40% digunakan untuk menghitung penggunaan CPU maksimum.
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_DEVICE_IN_USE
Perangkat titik akhir sudah digunakan. Perangkat sedang digunakan dalam mode eksklusif, atau perangkat sedang digunakan dalam mode bersama dan pemanggil diminta untuk menggunakan perangkat dalam mode eksklusif.
AUDCLNT_E_ENGINE_FORMAT_LOCKED
Klien menentukan AUDCLNT_STREAMOPTIONS_MATCH_FORMAT saat memanggil IAudioClient2::SetClientProperties, tetapi format mesin audio telah dikunci oleh klien lain. Dalam hal ini, Anda dapat memanggil IAudioClient2::SetClientProperties tanpa menentukan opsi format pencocokan lalu menggunakan format mesin audio saat ini.
AUDCLNT_E_ENGINE_PERIODICITY_LOCKED
Klien menentukan AUDCLNT_STREAMOPTIONS_MATCH_FORMAT saat memanggil IAudioClient2::SetClientProperties, tetapi periodisitas mesin audio telah dikunci oleh klien lain. Dalam hal ini, Anda dapat memanggil IAudioClient2::SetClientProperties tanpa menentukan opsi format pencocokan lalu menggunakan periodisitas mesin audio saat ini.
AUDCLNT_E_ENDPOINT_CREATE_FAILED
Metode gagal membuat titik akhir audio untuk render atau perangkat pengambilan. Ini dapat terjadi jika 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_INVALID_DEVICE_PERIOD
Menunjukkan bahwa periode perangkat yang diminta yang ditentukan dengan PeriodInFrames bukan kelipatan integral dari periodisitas mendasar mesin audio, lebih pendek dari periode minimum mesin, atau lebih lama dari periode maksimum mesin. Dapatkan nilai periodisitas mesin yang didukung dengan memanggil IAudioClient3::GetSharedModeEnginePeriod.
AUDCLNT_E_UNSUPPORTED_FORMAT
Mesin audio (mode bersama) atau perangkat titik akhir audio (mode eksklusif) tidak mendukung format yang ditentukan.
AUDCLNT_E_SERVICE_NOT_RUNNING
Layanan audio Windows tidak berjalan.
E_POINTER
Parameter pFormat adalah NULL.
E_INVALIDARG
Parameter pFormat menunjuk ke deskripsi format yang tidak valid; atau bendera AUDCLNT_STREAMFLAGS_LOOPBACK diatur tetapi ShareMode tidak sama dengan AUDCLNT_SHAREMODE_SHARED; atau bendera AUDCLNT_STREAMFLAGS_CROSSPROCESS diatur tetapi ShareMode sama dengan AUDCLNT_SHAREMODE_EXCLUSIVE.

Panggilan sebelumnya ke SetClientProperties dilakukan dengan kategori yang tidak valid untuk aliran audio/render.

E_OUTOFMEMORY
Kehabisan memori.

Keterangan

Tidak seperti IAudioClient::Initialize, metode ini tidak memungkinkan Anda menentukan ukuran buffer. Ukuran buffer dihitung berdasarkan periodisitas yang diminta dengan parameter PeriodInFrames . Aplikasi klien bertanggung jawab untuk memastikan bahwa sampel audio ditransfer masuk dan keluar dari buffer secara tepat waktu.

Klien audio harus memeriksa nilai yang diizinkan untuk parameter PeriodInFrames dengan memanggil IAudioClient3::GetSharedModeEnginePeriod. Nilai PeriodInFrames harus merupakan kelipatan integral dari nilai yang dikembalikan dalam parameter pFundamentalPeriodInFrames . PeriodInFrames juga harus lebih besar dari atau sama dengan nilai yang dikembalikan dalam pMinPeriodInFrames dan kurang dari atau sama dengan nilai pMaxPeriodInFrames.

Misalnya, untuk format 44100 kHz, GetSharedModeEnginePeriod mungkin mengembalikan:

  • pDefaultPeriodInFrames = 448 bingkai (sekitar 10,16 milidetik)

  • pFundamentalPeriodInFrames = 4 bingkai (sekitar 0,09 milidetik)

  • pMinPeriodInFrames = 48 bingkai (sekitar 1,09 milidetik)

  • pMaxPeriodInFrames = 448 bingkai (sama dengan default)

Nilai yang diizinkan untuk parameter PeriodInFrames ke InitializeSharedAudioStream akan mencakup 48 dan 448. Mereka juga akan menyertakan hal-hal seperti 96 dan 128.

Mereka TIDAK akan menyertakan 4 (yang lebih kecil dari nilai minimum yang diizinkan) atau 98 (yang bukan kelipatan dari dasarnya) atau 1000 (yang lebih besar dari nilai maksimum yang diizinkan).

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10 [khusus aplikasi desktop]
Server minimum yang didukung Windows Server 2016 [hanya aplikasi desktop]
Target Platform Windows
Header audioclient.h

Lihat juga

IAudioClient

IAudioClient2

IAudioClient3