Bagikan melalui


Pemetaan Saluran Default XAudio2

Klien XAudio2 memiliki kontrol penuh atas pemetaan dari saluran suara ke saluran masing-masing suara tujuannya. Ini mengontrol pemetaan melalui penggunaan metode IXAudio2Voice::SetOutputMatrix . Namun, dalam beberapa keadaan, XAudio2 menyederhanakan tugas ini dengan menyiapkan matriks kirim default secara otomatis. Ini dilakukan dengan menggunakan masker saluran, jika ada, yang terkait dengan saluran audio suara. Masker saluran adalah kombinasi dari masker bit SPEAKER_xxx seperti yang didefinisikan dalam X3DAudio.h dan di tempat lain. XAudio2 mengharuskan masker saluran menjadi 0 atau memiliki jumlah bit yang sama yang ditetapkan sebagai jumlah saluran.

Tabel berikut ini memperlihatkan persyaratan masker saluran dan default untuk format yang didukung oleh XAudio2.

Format Persyaratan Masker Saluran Masker Default Anggota Struktur Terkait
PCM File mungkin berisi masker saluran Masker saluran adalah 0, atau tidak ada WAVEFORMATEXTENSIBLE.dwChannelMask atau tidak ada (WAVEFORMATEX)
ADPCM File tidak berisi masker saluran Masker Saluran Default selalu digunakan Tidak ada (ADPCMWAVEFORMAT)

 

Untuk submix dan suara master, dan untuk suara sumber tanpa masker saluran atau masker saluran 0, XAudio2 mengasumsikan posisi pembicara default sesuai dengan tabel berikut.

Saluran Posisi Saluran Implisit
1 Selalu memetakan ke FrontLeft dan FrontRight dalam skala penuh di kedua speaker (kasus khusus untuk suara mono)
2 FrontLeft, FrontRight (konfigurasi stereo dasar)
3 FrontLeft, FrontRight, LowFrequency (konfigurasi 2.1)
4 FrontLeft, FrontRight, BackLeft, BackRight (quadraphonic)
5 FrontLeft, FrontRight, FrontCenter, SideLeft, SideRight (konfigurasi 5.0)
6 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight (konfigurasi 5.1) (lihat komentar berikut)
7 FrontLeft, FrontRight, FrontCenter, LowFrequency, SideLeft, SideRight, BackCenter (konfigurasi 6.1)
8 FrontLeft, FrontRight, FrontCenter, LowFrequency, BackLeft, BackRight, SideLeft, SideRight (konfigurasi 7.1)
9 atau lebih Tidak ada posisi implisit (pemetaan satu-ke-satu)

 

Jika pasangan suara tertentu dalam grafik audio tidak memiliki posisi pembicara yang terkait dengan suara sumber atau targetnya (satu suara memiliki lebih dari delapan saluran), suara tidak dapat diputar hingga suara sumber memiliki matriks kirim yang diatur secara eksplisit menggunakan metode IXAudio2Voice::SetOutputMatrix . Memanggil metode IXAudio2SourceVoice::Start untuk salah satu suara akan gagal sampai Anda melakukan ini.

Jika suara sumber dan suara target memiliki jumlah posisi pembicara yang berbeda dan IXAudio2Voice::SetOutputMatrix belum dipanggil pada suara sumber, XAudio2 mengirimkan setiap saluran sumber ke speaker target terdekat (atau speaker) yang tersedia, sebanding dengan seberapa dekat mereka dengan speaker yang dimaksudkan. Ada dua kasus khusus di mana perilaku default berbeda.

  1. Jika audio sumber mono dan diposisikan pada SPEAKER_FRONT_CENTER atau tidak memiliki posisi yang ditentukan, audio selalu dikirim ke SPEAKER_FRONT_LEFT dan SPEAKER_FRONT_RIGHT jika ada dalam audio output. Jika mereka tidak ada, itu kembali ke kasus normal.
  2. Jika sumber dan tujuan keduanya adalah 6 saluran dan diposisikan di salah satu pengaturan speaker 5.1 standar (Left+Right+Center+Sub+BackL+BackR atau Left+Right+Center+Sub+SideL+SideR), saluran dipetakan melalui satu ke satu. Dengan kata lain, SideLeft/Right dan BackLeft/Right diperlakukan secara setara. Ini karena ada kebingungan historis di sekitar pengaturan ini. Oleh karena itu, niat yang diasumsikan selalu memetakan satu ke satu.

Suara

Panduan Pemrograman XAudio2

GetChannelMask