Filter Topologi

Filter topologi mewakili bagian sirkuit pada kartu adaptor audio yang menangani interaksi di antara berbagai aliran gelombang dan MIDI yang dikelola pada kartu. Sirkuit ini melakukan pencampuran aliran penyajian dan multipleks aliran pengambilan.

Filter topologi menyediakan pin penghubung (lihat Grafik Filter Audio) yang mewakili koneksi fisik adaptor audio ke perangkat eksternal. Koneksi ini biasanya membawa sinyal output analog yang mendorong speaker dan sinyal input analog dari mikrofon. Pin jembatan filter topologi mungkin juga mewakili jack linein dan lineout analog, dan bahkan mungkin konektor input dan output digital.

Istilah "filter topologi" adalah dalam satu arti yang salah. Terlepas dari namanya, filter topologi hanyalah salah satu dari beberapa jenis filter audio yang mengekspos topologi atau tata letak internal mereka. Meskipun filter topologi berisi fitur topologi utama, filter tersebut tidak selalu berisi seluruh topologi adaptor. Filter Wave dan MIDI memiliki topologi sendiri. Misalnya, filter WaveCyclic atau WavePci minimal (lihat Filter Gelombang) mungkin mengekspos topologi yang terdiri dari dua pin dan DAC (pengonversi digital-ke-analog) atau ADC (konverter analog-ke-digital) tergantung pada apakah perangkat yang mendasani melakukan penyajian atau penangkapan audio.

Filter topologi diimplementasikan sebagai pasangan port/miniport. Pabrik filter topologi membuat filter topologi sebagai berikut:

  • Ini membuat instans objek driver miniport Topologi.

  • Ini membuat instans objek driver port Topologi dengan memanggil PcNewPort dengan nilai GUID CLSID_PortTopology.

  • Ini memanggil metode IPort::Init driver port untuk mengikat driver miniport ke driver port.

Contoh kode dalam Pembuatan Subdevice mengilustrasikan proses ini.

Port Topologi dan driver miniport berkomunikasi satu sama lain melalui antarmuka IPortTopology dan IMiniportTopology masing-masing. Antarmuka ini relatif sederhana dibandingkan dengan yang untuk driver port gelombang dan MIDI dan miniport karena filter topologi tidak perlu secara eksplisit mengelola aliran yang melewati pin mereka. Pin filter topologi mewakili koneksi hardwired di perangkat keras adaptor. Koneksi fisik yang mendasari pin filter topologi biasanya membawa sinyal audio analog, tetapi mungkin membawa aliran audio digital sebagai gantinya, tergantung pada implementasi perangkat keras.

Berbeda dengan antarmuka IMiniportWaveCyclic, IMiniportWavePci, IMiniportMidi, dan IMiniportDMus , antarmuka IMiniportTopology tidak memiliki metode NewStream .

Sebagian besar fungsionalitas filter topologi disediakan oleh penangan propertinya. Filter topologi ada terutama untuk memberikan informasi topologi kepada driver sistem SysAudio dan untuk aplikasi yang menggunakan Microsoft Windows Multimedia mixer API. Handler properti di filter topologi menyediakan akses ke berbagai kontrol (seperti volume, equalization, dan reverb) yang biasanya ditawarkan adaptor audio. Melalui permintaan properti, API mixer dapat menghitung simpul kontrol di perangkat keras adaptor, menemukan koneksi antara simpul, dan kueri dan mengatur parameter kontrol simpul. Aplikasi SndVol32 (lihat SysTray dan SndVol32) menggunakan API mixer untuk menemukan volume per aliran adaptor dan kontrol bisukan.

Saat membuat grafik filter, SysAudio meminta filter topologi untuk properti KSPROPERTY_PIN_PHYSICALCONNECTION pada pin-nya untuk menentukan gelombang, MIDI, atau pin filter DirectMusic mana yang terhubung ke pin filter topologi mana.

Tidak seperti filter gelombang, MIDI, atau DirectMusic, filter topologi tidak membuat pin. Dengan demikian, tidak ada objek pin yang tersedia untuk menangani kueri untuk properti pin filter topologi. Filter topologi itu sendiri menangani semua kueri mengenai koneksi fisik di pin-nya. Untuk informasi selengkapnya, lihat KSPROPSETID_Pin.

Mirip dengan jenis filter audio lainnya, filter topologi menggunakan array struktur PCCONNECTION_DESCRIPTOR untuk menggambarkan topologi internalnya. Driver miniport mengekspos array ini dalam struktur PCFILTER_DESCRIPTOR yang dihasilkannya dari metode IMiniport::GetDescription . Array menentukan topologi sebagai daftar koneksi antara simpul dan pin filter topologi (lihat Simpul dan Koneksi). Driver sistem WDMAud menerjemahkan koneksi dan simpul ini ke dalam garis mixer dan kontrol yang diekspos api mixer ke aplikasi. Seperti yang dibahas dalam Filter Audio, pin input pada peta filter KS ke garis mixer SRC, dan pin output pada peta filter ke garis mixer DST.

Adaptor audio yang khas dapat memutar file gelombang dan MIDI melalui speaker, dan dapat menangkap sinyal audio dari mikrofon dan synthesizer MIDI. Contoh kode di bawah ini berisi array PCCONNECTION_DESCRIPTOR untuk filter topologi yang mengekspos kemampuan ini:

    // topology pins
    enum
    {
        KSPIN_TOPO_WAVEOUT_SRC = 0,
        KSPIN_TOPO_SYNTHOUT_SRC,
        KSPIN_TOPO_SYNTHIN_SRC,
        KSPIN_TOPO_MIC_SRC,
        KSPIN_TOPO_LINEOUT_DST,
        KSPIN_TOPO_WAVEIN_DST
    };
 
    // topology nodes
    enum
    {
        KSNODE_TOPO_WAVEOUT_VOLUME = 0,
        KSNODE_TOPO_WAVEOUT_MUTE,
        KSNODE_TOPO_SYNTHOUT_VOLUME,
        KSNODE_TOPO_SYNTHOUT_MUTE,
        KSNODE_TOPO_MIC_VOLUME,
        KSNODE_TOPO_SYNTHIN_VOLUME,
        KSNODE_TOPO_LINEOUT_MIX,
        KSNODE_TOPO_LINEOUT_VOLUME,
        KSNODE_TOPO_WAVEIN_MUX
    };
 
    static PCCONNECTION_DESCRIPTOR MiniportConnections[] =
    {
       // FromNode---------------------FromPin------------------ToNode-----------------------ToPin
 
        { PCFILTER_NODE,               KSPIN_TOPO_WAVEOUT_SRC,  KSNODE_TOPO_WAVEOUT_VOLUME,  1 },
        { KSNODE_TOPO_WAVEOUT_VOLUME,  0,                       KSNODE_TOPO_WAVEOUT_MUTE,    1 },
        { KSNODE_TOPO_WAVEOUT_MUTE,    0,                       KSNODE_TOPO_LINEOUT_MIX,     1 },
 
        { PCFILTER_NODE,               KSPIN_TOPO_SYNTHOUT_SRC, KSNODE_TOPO_SYNTHOUT_VOLUME, 1 },
        { KSNODE_TOPO_SYNTHOUT_VOLUME, 0,                       KSNODE_TOPO_SYNTHOUT_MUTE,   1 },
        { KSNODE_TOPO_SYNTHOUT_MUTE,   0,                       KSNODE_TOPO_LINEOUT_MIX,     2 },
 
        { PCFILTER_NODE,               KSPIN_TOPO_SYNTHIN_SRC,  KSNODE_TOPO_SYNTHIN_VOLUME,  1 },
        { KSNODE_TOPO_SYNTHIN_VOLUME,  0,                       KSNODE_TOPO_WAVEIN_MUX,      1 },
 
        { PCFILTER_NODE,               KSPIN_TOPO_MIC_SRC,      KSNODE_TOPO_MIC_VOLUME,      1 },
        { KSNODE_TOPO_MIC_VOLUME,      0,                       KSNODE_TOPO_WAVEIN_MUX,      2 },
 
        { KSNODE_TOPO_LINEOUT_MIX,     0,                       KSNODE_TOPO_LINEOUT_VOLUME,  1 },
        { KSNODE_TOPO_LINEOUT_VOLUME,  0,                 PCFILTER_NODE,  KSPIN_TOPO_LINEOUT_DST },
 
        { KSNODE_TOPO_WAVEIN_MUX,      0,                 PCFILTER_NODE,  KSPIN_TOPO_WAVEIN_DST }
    };

PCFILTER_NODE konstanta dalam contoh kode sebelumnya adalah ID simpul null dan didefinisikan dalam file header Portcls.h. Untuk deskripsi tentang bagaimana konstanta ini digunakan untuk membedakan pin eksternal pada filter dari pin logis pada simpul, lihat PCCONNECTION_DESCRIPTOR.

Setiap nama pin dalam contoh kode sebelumnya berakhir dengan "SRC" atau "DST" tergantung pada apakah API mixer memetakan pin ke garis mixer sumber atau tujuan. Untuk menghindari kebingungan, ingatlah bahwa garis mixer sumber dan tujuan masing-masing memetakan sink (input) dan sumber (output) pin filter KS. Untuk informasi selengkapnya, lihat Filter Audio.

Array PCCONNECTION_DESCRIPTOR dalam contoh kode sebelumnya menjelaskan filter topologi dalam gambar berikut.

Diagram yang mengilustrasikan koneksi filter topologi yang dijelaskan oleh array PCCONNECTION_DESCRIPTOR.

Filter topologi dalam gambar memiliki empat pin input (sink) di sebelah kiri dan dua pin output (sumber) di sebelah kanan. Jalur data yang menghubungkan dua pin input teratas dan pin output atas mencampur dua sinyal analog yang telah dirender dari gelombang dan aliran MIDI yang sedang diputar kembali. Jalur data yang menghubungkan dua pin input bawah dan multipleks pin output bawah sinyal analog yang ditangkap yang sedang direkam.

Empat pin input beroperasi sebagai berikut:

  • Pin KSPIN_TOPO_WAVEOUT_SRC secara fisik terhubung ke pin output filter gelombang, yang merender aliran gelombang dari sumber seperti file .wav untuk menghasilkan sinyal analog di pin.

  • Pin KSPIN_TOPO_SYNTHOUT_SRC secara fisik terhubung ke pin output filter synth, yang mungkin merender, misalnya, aliran MIDI dari sumber seperti file .mid untuk menghasilkan sinyal analog di pin.

  • Pin KSPIN_TOPO_SYNTHIN_SRC terhubung secara fisik ke synthesizer yang menghasilkan sinyal analog. (Perhatikan bahwa desain perangkat keras yang lebih praktis mungkin mengambil aliran input MIDI dari antarmuka MIDI MPU-401 dan mengonversinya langsung ke format gelombang, melewati filter topologi sama sekali.)

  • Pin KSPIN_TOPO_MIC_SRC terhubung secara fisik ke jack input yang mengambil sinyal analog dari mikrofon.

Dua pin output beroperasi sebagai berikut:

  • Pin KSPIN_TOPO_LINEOUT_DST terhubung secara fisik ke jack lineout analog yang biasanya mendorong satu set speaker.

  • Pin KSPIN_TOPO_WAVEIN_DST secara fisik terhubung ke pin input filter gelombang, yang mengonversi sinyal analog ke aliran gelombang dan menulisnya ke tujuan seperti file .wav.

Volume dan simpul bisukan (lihat KSNODETYPE_VOLUME dan KSNODETYPE_MUTE) digunakan untuk mengontrol tingkat volume berbagai aliran. Simpul SUM (lihat KSNODETYPE_SUM) mencampur aliran audio dari gelombang dan input MIDI. Simpul MUX (lihat KSNODETYPE_MUX) memilih di antara dua aliran input.

Gambar menggunakan panah putus-putus untuk menunjukkan koneksi antara dua simpul atau antara pin dan simpul. Panah menunjuk ke arah aliran data. Diagram menunjukkan total 13 koneksi, yang masing-masing sesuai dengan salah satu dari 13 elemen dalam array PCCONNECTION_DESCRIPTOR dalam contoh kode sebelumnya.

Selain filter topologi, driver adaptor membuat filter lain--gelombang, FM synth, tabel gelombang, dan sebagainya--yang terhubung ke pin pada filter topologi.

Misalnya, filter gelombang yang terhubung secara fisik ke pin KSPIN_TOPO_WAVEOUT_SRC filter topologi berisi DAC (diwakili oleh simpul KSNODETYPE_DAC ) yang mengonversi data PCM ke sinyal analog yang dihasilkannya ke pin filter topologi. Filter sinth FM-synth atau wavetable yang terhubung secara fisik ke pin KSPIN_TOPO_SYNTHOUT_SRC filter topologi juga mengonversi data MIDI menjadi sinyal analog yang dihasilkannya ke pin filter topologi. Filter topologi mencampur sinyal analog dari dua pin ini dan menghasilkan sinyal campuran ke speaker.

Koneksi fisik filter topologi ke filter lain yang mewakili perangkat keras lain pada kartu adaptor yang sama perlu dibedakan dari jenis koneksi lain ke filter. Misalnya, pin tertentu pada filter gelombang, MIDI, dan DirectMusic dapat terhubung atau terputus di bawah kontrol perangkat lunak.

Selama startup perangkat, driver adaptor mendaftarkan koneksi fisik filter topologi dengan memanggil PcRegisterPhysicalConnection sekali per koneksi. Driver port memerlukan informasi ini untuk merespons permintaan get-property KSPROPERTY_PIN_PHYSICALCONNECTION .