Dalga Filtreleri

Dalga filtreleri, dalga biçimli dijital ses verilerini işleyen ve/veya yakalayan cihazları temsil eder. Uygulamalar genellikle DirectSound API'si veya Microsoft Windows multimedya waveOutXxx ve waveInXxx işlevleri aracılığıyla bu cihazların özelliklerine erişmektedir. WDM ses sürücülerinin destekleyebilecekleri dalga biçimleri hakkında bilgi için bkz. WAVEFORMATEX ve WAVEFORMATEXTENSIBLE.

Dalga işleme filtresi giriş olarak bir dalga dijital ses akışı alır ve analog ses sinyali (bir hoparlör veya harici mikser kümesine) veya dijital ses akışı (örneğin, bir S/PDIF bağlayıcısına) çıkarır.

Dalga yakalama filtresi giriş olarak analog ses sinyali (mikrofon veya giriş jakı) veya dijital akış (örneğin S/PDIF bağlayıcısından) alır. Aynı filtre, dijital ses verilerini içeren bir dalga akışı oluşturur.

Tek bir dalga filtresi aynı anda hem işleme hem de yakalama gerçekleştirebilir. Bu filtre türü, örneğin, bir dizi hoparlör aracılığıyla ses yürütebilen ve aynı anda bir mikrofon aracılığıyla ses kaydedebilen bir ses cihazını temsil edebilir. Alternatif olarak, dalga işleme ve dalga yakalama donanımı, Dinamik Ses Alt Hizmetleri'nde açıklandığı gibi ayrı dalga filtreleri olarak temsil edilebilir.

Ses bağdaştırıcısı sürücüsü, donanım satıcısının bağdaştırıcı sürücüsünün bir parçası olarak uyguladığı bir dalga miniport sürücüsünü sistemin uyguladığı bir dalga bağlantı noktası sürücüsüyle bağlayarak bir dalga filtresi oluşturur. Miniport sürücüsü, dalga filtresi için donanıma özgü tüm işlemleri işler ve bağlantı noktası sürücüsü tüm genel dalga filtresi işlevlerini yönetir.

PortCls sistem sürücüsü (Portcls.sys) üç dalga bağlantı noktası sürücüsü uygular: WaveRT, WavePci ve WaveCyclic.

Üç dalga filtresi türü aşağıdaki gibi çalışır:

  • WaveRT filtresi, dalga verileri için bir arabellek ayırır ve bu arabelleği kullanıcı modu istemcisi için doğrudan erişilebilir hale getirir. Arabellek, dalga cihazının donanım özelliklerine bağlı olarak bitişik veya bitişik olmayan bellek bloklarından oluşabilir. İstemci arabelleğe sanal belleğin bitişik bir bloğu olarak erişir. Arabellek döngüseldir; başka bir deyişle cihazın okuma (render etme için) veya yazma (yakalama için) işaretçisi arabelleğin sonuna ulaştığında otomatik olarak arabelleğin başına döner.

  • WavePci filtresi istemcinin arabelleğine doğrudan erişir. İstemci arabelleğe tek, bitişik bir sanal bellek bloğu olarak erişse de WavePci filtresinin arabelleğe bir dizi büyük olasılıkla bitişik olmayan bellek bloğu olarak erişmesi gerekir. İşleme veya yakalama akışının ardışık bölümlerini içeren bloklar cihazda kuyruğa alınır. Cihazın okuma veya yazma işaretçisi bir bloğun sonuna ulaştığında kuyruktaki bir sonraki bloğun başına geçer.

  • WaveCyclic filtresi, çıkış (işleme için) veya giriş (yakalama için) arabelleği olarak kullanılmak üzere tek bir bitişik bellek bloğundan oluşan bir arabellek ayırır. Bu arabellek döngüseldir. Arabellek istemci tarafından doğrudan erişilebilir olmadığından, sürücünün döngüsel arabelleği ile istemcinin kullanıcı modu arabelleği arasında veri kopyalaması gerekir.

WaveRT, WavePci ve WaveCyclic yerine tercih edilir. WavePci ve WaveCyclic, Windows'un önceki sürümleriyle kullanılmıştır.

WaveRT filtresi, PCI veya PCI Express gibi bir sistem veri yolu üzerinde bulunan bir ses cihazını temsil edebilir. WaveRT filtresinin WaveCyclic veya WavePci filtresine göre birincil avantajı, WaveRT filtresinin kullanıcı modu istemcisinin ses verilerini doğrudan ses donanımıyla değiştirmesine izin vermesidir. Buna karşılık WaveCyclic ve WavePci filtrelerinin her ikisi de sürücü tarafından düzenli olarak yazılım müdahalesi yapılmasını gerektirir ve bu da ses akışının gecikme süresini artırır. Buna ek olarak, hem dağılım/toplama DMA özelliklerine sahip olan hem de içermeyen ses cihazları WaveRT filtreleri olarak gösterilebilir. Daha fazla bilgi için Real-Time Ses Akışı için A Wave Bağlantı Noktası Sürücüsü adlı teknik incelemeye bakın.

WaveRT Filtreleri

WaveRT filtresi, bir port/miniport sürücü çifti olarak uygulanır. Windows Vista ve sonraki sürümlerde bir WaveRT filtre fabrikası aşağıdaki gibi bir WaveRT filtresi oluşturur:

  • Bir WaveRT miniport sürücü nesnesi oluşturur.

  • CLSID_PortWaveRT GUID değeriylePcNewPort'u çağırarak WaveRT bağlantı noktası sürücüsü nesnesinin örneğini oluşturur.

  • Miniport sürücüsünü bağlantı noktası sürücüsüne bağlamak için bağlantı noktası sürücüsünün IPort::Init yöntemini çağırır.

Alt Hizmet Oluşturma kod örneği bu işlemi gösterir. Bağlantı noktası ve miniport sürücüleri , IPortWaveRT ve IMiniportWaveRT arabirimleri aracılığıyla birbirleriyle iletişim kurar.

Daha fazla bilgi için Real-Time Ses Akışı için A Wave Bağlantı Noktası Sürücüsü adlı teknik incelemeye bakın.

Windows'un önceki sürümleri için bilgiler

Windows'un önceki sürümleri için WaveCyclic Bilgileri

WaveCyclic filtresi ISA, PCI, PCI Express veya PCMCIA gibi bir sistem veri yolu ile bağlantı kuran bir ses cihazını temsil edebilir. "WavePci" adından da anlaşılacağı gibi, WavePci filtresi genellikle BIR PCI veri yolu'na bağlanan bir cihazı temsil eder, ancak ilke olarak bir WavePci cihazı bunun yerine bir ISA veri yolu'na bağlanabilir. WaveCyclic tarafından desteklenen daha basit cihazlardan farklı olarak, WavePci tarafından desteklenen bir cihazın dağılım/toplama DMA özelliklerine sahip olması gerekir. PCI veri yolunda bulunan ancak dağılım/toplama DMA'sı bulunmayan bir ses cihazı WaveCyclic filtresi olarak gösterilebilir ancak WavePci filtresi olarak temsil edilmeyebilir.

Windows'un önceki sürümleri için WavePci Bilgileri

WavePci cihazı, rastgele bellek adreslerinde yer alan ve herhangi bir bayt hizalamasıyla başlayıp biten arabelleklere veya arabelleklerden dağılım/toplanma DMA aktarımları gerçekleştirebilir. Buna karşılık, WaveCyclic cihazının DMA donanımı yalnızca cihazın miniport sürücüsünün ayırmış olduğu tek bir arabelleğe veya arabellekten veri taşıma olanağı gerektirir. WaveCyclic miniport sürücüsü, DMA kanalının sınırlı özelliklerini karşılayan bir döngüsel arabellek ayırmakta serbesttir. Örneğin, tipik bir WaveCyclic cihazının DMA kanalı aşağıdaki kısıtlamaları karşılayan bir arabellek gerektirebilir:

  • Fiziksel adres alanının belirli bir bölgesinde arabellek bulunur.

  • Arabellek hem fiziksel hem de sanal adres alanında bitişiktir.

  • Arabellek, dört veya sekiz baytlık sınırlarda bile başlar ve biter.

Ancak bu basitliğin karşılığında WaveCyclic cihazının döngüsel arabelleğe veya arabellekten veri kopyalama yazılımına güvenmesi gerekirken WavePci cihazı, bu tür kopyalamayı önlemek için DMA donanımının dağılım/toplama özelliklerine dayanır. Bir işleme cihazına dalga sesi verileri teslim eden veya yakalama cihazından veri alan IRP'lere veri arabellekleri eşlik eder ve bu arabelleklerin her biri işlenen veya yakalanan ses akışının bir bölümünü içerir. WavePci cihazı bu arabelleklere doğrudan dağılım/toplama DMA altyapısı üzerinden erişebilirken, WaveCyclic cihazı verilerin IRP'den döngüsel arabelleğe kopyalanması (veya tam tersi) gerektirir.

WavePci Filtreleri

Not: Windows'un önceki sürümleri için WavePci Bilgileri

WavePci filtresi, bir port/miniport sürücü çifti olarak uygulanır. WavePci filtre fabrikası aşağıdaki gibi bir WavePci filtresi oluşturur:

  • Bir WavePci miniport sürücü nesnesinin örneğini oluşturur.

  • Bu, CLSID_PortWavePci GUID değeriyle PcNewPort'u çağırarak WavePci bağlantı noktası sürücüsü nesnesinin bir örneğini oluşturur.

  • Miniport sürücüsünü bağlantı noktası sürücüsüne bağlamak için bağlantı noktası sürücüsünün IPort::Init yöntemini çağırır.

Alt Hizmet Oluşturma kod örneği bu işlemi gösterir. Bağlantı noktası ve miniport sürücüleri , IPortWavePci ve IMiniportWavePci arabirimleri aracılığıyla birbirleriyle iletişim kurar.

Daha fazla bilgi için bkz. WavePci Cihazları için Uygulama Sorunları.

WaveCyclic Filtreleri

Uyarı

Microsoft, farklı ve kapsayıcı bir ortamı destekler. Bu makale, Microsoft'un önyargısız iletişim stil kılavuzunun dışlayıcı olarak tanıdığı terminolojiye başvurular içerir. Bu makaledeki sözcük veya tümcecik, şu anda yazılımda göründüğünden tutarlılık için kullanılır. Yazılım dili kaldıracak şekilde güncelleştirildiğinde, bu makale uyumlu olacak şekilde güncelleştirilecektir.

Not: Windows'un önceki sürümleri için WaveCyclic Bilgisi

WaveCyclic filtresi, port/miniport sürücü ikilisi olarak uygulanır. WaveCyclic filtre fabrikası aşağıdaki gibi bir WaveCyclic filtresi oluşturur:

  • Bir WaveCyclic miniport sürücü nesnesinin örneğini oluşturur.

  • GUID değeri CLSID_PortWaveCyclic ile PcNewPort çağrısı yaparak WaveCyclic bağlantı noktası sürücü nesnesinin bir örneğini oluşturur.

  • Miniport sürücüsünü bağlantı noktası sürücüsüne bağlamak için bağlantı noktası sürücüsünün IPort::Init yöntemini çağırır.

Alt Hizmet Oluşturma kod örneği bu işlemi gösterir. Bağlantı noktası ve miniport sürücüleri , IPortWaveCyclic ve IMiniportWaveCyclic arabirimleri aracılığıyla birbirleriyle iletişim kurar.

WaveCyclic filtresinin döngüsel arabelleği her zaman bitişik bir sanal bellek bloğundan oluşur. Bağlantı noktası sürücüsünün IDmaChannel::AllocateBuffer yöntemini uygulaması her zaman hem fiziksel hem de sanal bellek adres alanında bitişik bir arabellek ayırır. Daha önce belirtildiği gibi WaveCyclic cihazının DMA altyapısı arabellek belleğine ek kısıtlamalar getirirse, miniport sürücüsü bu kısıtlamaları karşılamak için kendi arabellek ayırma yöntemini uygulayabilir.

İşletim sistemi özgün isteği reddederse, büyük bir arabellek isteyen bir WaveCyclic miniport sürücüsü (örneğin, fiziksel olarak bitişik sekiz bellek sayfası) daha küçük bir arabellek boyutuna razı olmaya hazır olmalıdır. Sistem kaynaklarını yeniden dengelemek için ses cihazı bazen kaldırılabilir ve yeniden yüklenebilir (bkz. Kaynakları Yeniden Dengelemek için Bir Cihazı Durdurma).

Yerleşik veri yolu mastering DMA donanımına sahip bir WaveCyclic cihazı, ana cihaz olarak adlandırılır. Alternatif olarak, WaveCyclic cihazı yerleşik DMA donanım özellikleri olmayan bir alt cihaz olabilir. Bir alt cihazın, gerekli tüm veri aktarımlarını gerçekleştirmek için sistem DMA denetleyicisine güvenmesi gerekir. Ana ve alt cihazlar hakkında daha fazla bilgi için bkz. IDmaChannel ve IDmaChannelSlave.

WaveCyclic miniport sürücüsü, bağlantı noktası sürücüsünün YeniXxxDmaChannel yöntemlerinden biri tarafından oluşturulan varsayılan DMA kanal nesnesini kullanmak yerine kendi DMA kanalı nesnesini uygulayabilir:

IPortWaveCyclic::NewMasterDmaChannel

IPortWaveCyclic::NewSlaveDmaChannel

Bağdaştırıcı sürücüsünün özel IDmaChannel uygulaması, özel donanım kısıtlamalarını karşılamak için verilerin özel işlenmesini gerçekleştirebilir. Örneğin, Windows Multimedya işlevleri 16 bit örneklerin her zaman imzalı değerler olduğu dalga biçimlerini kullanır, ancak ses işleme donanımı bunun yerine imzalanmamış 16 bit değerleri kullanacak şekilde tasarlanmış olabilir. Bu durumda, imzalı kaynak değerlerini donanımın gerektirdiği imzasız hedef değerlerine dönüştürmek için sürücünün özel IDmaChannel::CopyTo yöntemi yazılabilir. Bu teknik, donanım tasarımı kusurlarını geçici olarak çözmek için yararlı olsa da, yazılım ek yükünde de önemli bir maliyete neden olabilir.

Kendi DMA kanal nesnesini uygulayan bir sürücü örneği için WDK'nin önceki sürümlerinde Sb16 örnek ses bağdaştırıcısına bakın. Sabit OVERRIDE_DMA_CHANNEL TRUE olarak tanımlanırsa, kaynak koddaki koşullu derleme deyimleri, sürücünün IPortWaveCyclic::NewXxxDmaChannel çağrısından varsayılan IDmaChannel nesnesi yerine kullandığı özel bir IDmaChannel nesnesinin uygulanmasını sağlar.