Mengekspos Efek Pengambilan Hardware-Accelerated
Di Windows XP dan yang lebih baru, kerangka kerja audio WDM mendukung akselerasi perangkat keras efek pengambilan audio yang diekspos melalui DirectSound. Efek ini termasuk pembatalan gema akustik (AEC) dan penekanan kebisingan (NS). Untuk informasi tentang bagaimana aplikasi DirectSoundCapture memungkinkan penggunaan AEC dan NS yang dipercepat perangkat keras, lihat dokumentasi Microsoft Windows SDK.
Driver miniport dapat mengekspos akselerasi perangkat keras untuk subset efek ini, tergantung pada kemampuan perangkat yang mendasar. Untuk mengekspos kemampuan perangkat keras untuk efek AEC dan NS, setiap pin pada filter AEC yang diterapkan driver harus memenuhi persyaratan ini:
Pin harus menyertakan node individual dalam rantai simpulnya untuk mewakili setiap efek perangkat keras yang akan dimasukkan ke dalam grafik. Jenis node KS untuk efek AEC dan NS ditentukan oleh GUID berikut: KSNODETYPE_ACOUSTIC_ECHO_CANCELKSNODETYPE_NOISE_SUPPRESS
Simpul AEC dan NS pada pin harus mendukung kumpulan properti KSPROPSETID_General dan harus memberikan informasi tentang produsen ketika dikueri untuk properti KSPROPERTY_GENERAL_COMPONENTID .
Simpul AEC dan NS pada pin harus mendukung kumpulan properti KSPROPSETID_TopologyNode dan dua propertinya:
KSPROPERTY_TOPOLOGYNODE_ENABLE mengaktifkan efek.
KSPROPERTY_TOPOLOGYNODE_RESET mengatur ulang efek ke status defaultnya.
Simpul AEC dan NS pada pin harus mendukung properti set properti KSPROPSETID_Audio berikut: KSPROPERTY_AUDIO_CPU_RESOURCESKSPROPERTY_AUDIO_ALGORITHM_INSTANCE
Pin harus mendukung properti kumpulan properti KSPROPSETID_Audio berikut: KSPROPERTY_AUDIO_POSITIONKSPROPERTY_AUDIO_LATENCY
Pin harus mengekspos kemampuan rentang datanya (lihat Menyematkan Data-Range dan Properti Persimpangan).
Persyaratan khusus untuk mengekspos node AEC dan NS yang dipercepat perangkat keras disajikan di bawah ini.
Pembatalan Gema Akustik
Driver miniport PCM mengekspos dukungan perangkat keras untuk AEC dalam bentuk topologi untuk menangkap dan merender aliran yang memenuhi persyaratan tambahan ini:
- Pin harus menyertakan simpul AEC (KSNODETYPE_ACOUSTIC_ECHO_CANCEL), yang harus ditentukan dalam posisi yang tepat dalam rantai simpul yang diurutkan (lihat di bawah).
Penekanan Kebisingan
Driver miniport PCM mengekspos dukungan perangkat keras untuk NS dalam bentuk topologi untuk aliran tangkapan yang memenuhi persyaratan tambahan ini:
- Pin harus menyertakan simpul NS (KSNODETYPE_NOISE_SUPPRESS), yang harus ditentukan dalam posisi yang tepat dalam rantai simpul yang diurutkan (lihat di bawah).
Pengurutan Rantai Simpul
Saat ini, arsitektur efek tangkapan DirectSound mengharuskan node ditentukan dalam urutan permintaan aplikasi. Akibatnya, urutan di mana driver miniport menentukan simpulnya harus cocok dengan urutan yang digunakan oleh filter sistem AEC (Aec.sys), yang mengimplementasikan algoritma AEC dan NS dalam perangkat lunak.
Untuk mengaktifkan akselerasi perangkat keras, driver harus menentukan efek yang diimplementasikan oleh perangkat keras dalam urutan berikut:
KSNODETYPE_ACOUSTIC_ECHO_CANCEL
Perhatikan bahwa daftar ini dapat menghilangkan efek yang tidak dibedakan selama pemesanan relatif dipertahankan.
Penetapan Pin Simpul AEC
Driver adaptor menggunakan array struktur PCCONNECTION_DESCRIPTOR untuk menentukan koneksi dalam filter. Setiap elemen array menjelaskan satu koneksi, yang dapat berupa node-to-node, node-to-pin, atau pin-to-pin. Untuk detailnya, lihat Simpul dan Koneksi.
Untuk menggunakan struktur PCCONNECTION_DESCRIPTOR, penulis driver menetapkan pin "logis" ke simpul. Ini adalah "pin" pada simpul itu sendiri dan hanya digunakan untuk menentukan koneksi di dalam filter. Ini berbeda dengan pin eksternal pada filter, yang digunakan untuk menyambungkan ke filter lain.
Tabel berikut menunjukkan ID pin yang harus ditetapkan driver adaptor ke empat pin logis pada simpul AEC.
Sematkan Nama Parameter ID | Nilai | Makna |
---|---|---|
KSNODEPIN_AEC_RENDER_IN |
1 |
Pin sink (input simpul) untuk aliran render |
KSNODEPIN_AEC_RENDER_OUT |
0 |
Pin sumber (output simpul) untuk aliran render |
KSNODEPIN_AEC_CAPTURE_IN |
2 |
Pin sink (input simpul) untuk aliran pengambilan |
KSNODEPIN_AEC_CAPTURE_OUT |
3 |
Pin sumber (output simpul) untuk aliran pengambilan |
ID pin dalam tabel sebelumnya ditentukan dalam file header Ksmedia.h.
Contoh kode berikut menunjukkan bagaimana driver adaptor dapat menentukan topologi internal filter AEC yang berisi simpul AEC dan simpul NS:
// AEC Filter Topology
// Pin IDs for external pins on AEC filter
#define ID_CaptureOutPin 0 // microphone stream
#define ID_CaptureInPin 1
#define ID_RenderOutPin 2 // speaker stream
#define ID_RenderInPin 3
// Generic pin IDs for simple node with one input and one output
#define NODE_INPUT_PIN 1
#define NODE_OUTPUT_PIN 0
// Node IDs
#define NODE_ID_AEC 0 // acoustic echo cancellation
#define NODE_ID_NS 1 // noise suppression
// The array below defines the internal topology of an
// AEC filter that contains an AEC node and an NS node.
const PCCONNECTION_DESCRIPTOR AecConnections[] = {
{ PCFILTER_NODE, ID_RenderInPin, NODE_ID_AEC, KSNODEPIN_AEC_RENDER_IN },
{ NODE_ID_AEC, KSNODEPIN_AEC_RENDER_OUT, PCFILTER_NODE, ID_RenderOutPin },
{ PCFILTER_NODE, ID_CaptureInPin, NODE_ID_AEC, KSNODEPIN_AEC_CAPTURE_IN },
{ NODE_ID_AEC, KSNODEPIN_AEC_CAPTURE_OUT, NODE_ID_NS, NODE_INPUT_PIN },
{ NODE_ID_NS, NODE_OUTPUT_PIN, PCFILTER_NODE, ID_CaptureOutPin }
};
Array AecConnections dalam contoh kode sebelumnya menentukan topologi filter yang diperlihatkan dalam gambar berikut.
Gambar sebelumnya mewakili setiap koneksi di dalam filter dengan panah putus-putus yang menunjuk ke arah aliran data. Total lima koneksi muncul dalam gambar. Setiap koneksi sesuai dengan salah satu dari lima elemen dalam array AecConnections dalam contoh kode.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk