Aracılığıyla paylaş


Cihaz Biçimleri

Bir ses uygulaması için DirectSound veya Windows multimedya waveOutXxx işlevleri gibi daha üst düzey bir ses API'sini kullanmanın avantajı, API'nin uygulama tarafından kullanılan akış biçimleriyle ses cihazı tarafından kullanılan biçimler arasında otomatik olarak dönüştürülmesidir. Buna karşılık, uygulama akışlarının cihaz tarafından kullanılan biçimlerle aynı veya yakından ilişkili biçimleri kullanmasını gerektirdiğinden çekirdek ses API'leri daha kısıtlayıcıdır. Bu nedenle, ses akışlarını yürütmek veya kaydetmek için çekirdek ses API'lerini kullanan uygulamaların akış biçimleri arasındaki dönüştürmelerin bir kısmını veya tümünü yapması gerekebilir.

Paylaşılan mod akışlarını yönetmek için WASAPI kullanan bir uygulama, yalnızca sınırlı biçim dönüştürmeleri gerçekleştirmek için ses altyapısını kullanabilir. Ses altyapısı, uygulama tarafından kullanılan standart bir PCM örnek boyutu ile motorun dahili işleme için kullandığı kayan nokta örnekleri arasında dönüştürme yapabilir. Ancak, bir uygulama akışının biçimi genellikle cihaz tarafından kullanılan akış biçimiyle aynı sayıda kanala ve aynı örnek hızına sahip olmalıdır.

Bir uygulama özel kullanım modunda bir cihaz kullanıyorsa, uygulamanın ses donanımının açıkça desteklediği bir akış biçimi kullanması gerekir. Özel kullanım modunda, uygulama ve cihaz ses altyapısının müdahalesi olmadan ses verilerini doğrudan değiştirir.

Birçok ses cihazı hem PCM hem de PCM olmayan akış biçimlerini destekler. Ancak ses altyapısı yalnızca PCM akışlarını karıştırabilir. Bu nedenle, yalnızca özel mod akışları PCM olmayan biçimlere sahip olabilir. Ayrıca, yalnızca sabit veri hızları olan PCM dışı biçimler özel kullanım modunda desteklenir. Sabit oranlı PCM olmayan bir biçime örnek olarak, şifresi çözülmeden dijital formdaki Sony/Philips dijital arabirim (S/PDIF) bağlantısından geçen 48 kHz Windows Media Audio Professional (WMA Pro) ses akışı gösteriliyor. S/PDIF üzerinden WMA Pro akışlarını kullanma hakkında daha fazla bilgi için bkz. WMA Pro Veri Aralıklarını Belirtme.

WASAPI bir akış biçimi belirtmek için WAVEFORMATEX veya WAVEFORMATEXTENSIBLE yapısı kullanır. WAVEFORMATEXTENSIBLE yapısı, daha geniş bir biçim aralığını açıklamak üzere genişletilmiş bir WAVEFORMATEX yapısıdır. Tek başına WAVEFORMATEX yapısıyla tanımlanabilen herhangi bir biçim, WAVEFORMATEXTENSIBLE yapısıyla da açıklanabilir.

WAVEFORMATEXTENSIBLE yapısının ilk üyesi waveformatex yapısıdır. WAVEFORMATEX yapısının içeriği, tek başına WAVEFORMATEX yapısı mı yoksa WAVEFORMATEXTENSIBLE yapısının bir parçası mı olduğunu gösterir.

Tek başına WAVEFORMATEX yapısı, bir veya iki kanala sahip bir biçimi ve 8 bitin katı olan örnek boyutunu yeterince açıklayabilir. WAVEFORMATEX yapısı, kanalların konuşmacı konumlarına eşleneceğini tek başına belirtemez. Buna ek olarak, WAVEFORMATEX her ses örneğinin kapsayıcı boyutunu belirtse de, bir örnekteki duyarlık bitlerinin sayısını (örneğin, 24 bitlik bir kapsayıcıda 20 bit duyarlık) belirtemez. Buna karşılık, WAVEFORMATEXTENSIBLE yapısı hem kanalların hoparlörlere eşleneceğini hem de her örnekteki duyarlık bitlerinin sayısını belirtebilir.

WAVEFORMATEX ve WAVEFORMATEXTENSIBLE hakkında daha fazla bilgi için Windows DDK belgelerine bakın.

Windows 7'den başlayarak, WAVEFORMATEXTENSIBLE, kodlanmış sesi IEC 61937 uyumlu bir arabirim üzerinden iletmek için cihaz biçimlerini temsil etmek üzere genişletilmiştir. Yeni yapı hakkında bilgi için bkz. IEC 61937 İletimleri için Biçimleri Temsil Etme.

Cihaz Biçimini Belirtme

Aşağıdaki WASAPI yöntemleri, akış biçimlerini açıklamak için WAVEFORMATEX ve WAVEFORMATEXTENSIBLE yapılarını kullanır:

GetMixFormat yöntemi, ses altyapısının paylaşılan mod akışlarının iç işlemesi için kullandığı akış biçimini alır. yöntemi, biçimi belirtmek için her zaman tek başına WAVEFORMATEX yapısı yerine WAVEFORMATEXTENSIBLE yapısı kullanır.

IsFormatSupported yöntemi, ses uç noktası cihazının belirli bir akış biçimini destekleyip desteklemediğini gösterir. Çağıran, akış biçiminin paylaşılan modda mı yoksa özel kullanım modunda mı kullanılacağını belirtmelidir. Paylaşılan mod biçimleri için yöntemi, belirtilen biçimi destekleyip desteklemediğini belirlemek için ses altyapısını sorgular. Özel kullanım modu biçimleri için yöntemi cihaz sürücüsünü sorgular. Bazı cihaz sürücüleri, biçim tek başına WAVEFORMATEX yapısı tarafından belirtilirse 1 kanallı veya 2 kanallı PCM biçimini desteklediğini bildirir, ancak WAVEFORMATEXTENSIBLE yapısı tarafından belirtilirse aynı biçimi reddeder. Bu sürücülerden güvenilir sonuçlar elde etmek için, özel modlu uygulamalar her 1 kanallı veya 2 kanallı PCM biçimi için IsFormatSupported iki kez çağırmalıdır; bir çağrı biçimi belirtmek için tek başına bir WAVEFORMATEX yapısı, diğer çağrı ise aynı biçimi belirtmek için WAVEFORMATEXTENSIBLE yapısı kullanmalıdır.

Uygulama, paylaşılan mod veya özel kullanım modu akışı için uygun bir biçim bulmak üzere GetMixFormat veya IsFormatSupported kullandıktan sonra, bir akışı bu biçimle başlatmak için Initialize yöntemini çağırabilir. GetMixFormat yönteminden elde edilen karma biçimiyle aynı olmayan, ancak aynı sayıda kanala ve karma biçimiyle aynı örnek oranına sahip bir biçimle paylaşılan mod akışı başlatmaya çalışan bir uygulama başarılı olabilir. Initializeçağırmadan önce, uygulama IsFormatSupported çağırarak Initialize biçimini kabul ettiğini doğrulayabilir.

Ses altyapısının paylaşılan mod akışlarını iç işlemesi için kullandığı karma biçim, ses uç noktası cihazının paylaşılan modda kullandığı akış biçimiyle yakından ilişkilidir, ancak her zaman aynı değildir. Mmsys.cplWindows multimedya denetim masası aracılığıyla kullanıcı, bir ses uç noktası cihazının paylaşılan modda çalıştığında kullanacağı akış biçimini seçebilir. Adımlar aşağıdaki gibidir:

  1. Mmsys.cplçalıştırmak için bir Komut İstemi penceresi açın ve aşağıdaki komutu girin:

    denetim mmsys.cpl

    Alternatif olarak, görev çubuğunun sağ tarafında yer alan bildirim alanındaki hoparlör simgesine sağ tıklayıp Kayıttan Yürütme Cihazları veya Kayıt Cihazları seçerek Mmsys.cpl çalıştırabilirsiniz.

  2. Mmsys.cpl penceresi açıldıktan sonra kayıttan yürütme cihazları listesinden veya kayıt cihazları listesinden bir cihaz seçin ve Özellikleröğesine tıklayın.

  3. Özellikler penceresi açıldığında Gelişmiş öğesine tıklayın ve Varsayılan Biçimetiketli kutudaki kullanılabilir biçimler listesinden bir biçim seçin.

Örneğin, kullanıcının kayıttan yürütme cihazı için kullanılabilir biçimler listesinden aşağıdaki varsayılan biçimi seçtiğini varsayalım:

2 kanal, 16 bit, 44100 Hz (CD Kalitesi)

Bu, cihazın daha sonra paylaşılan modda çalıştığında kullanacağı biçimdir. Windows Vista'da ses altyapısı, paylaşılan mod akışlarının iç işlemesi için bu biçimin biraz değiştirilmiş bir sürümünü kullanır. Ses altyapısı aynı sayıda kanala (iki) ve aynı örnek hızına (44100 Hz) sahip bir biçim kullanır, ancak bunları işlemeden önce örnekleri kayan noktalı sayılara dönüştürür. Ses altyapısı, çıkış karışımındaki kayan nokta örneklerini cihaz üzerinden yürütmeden önce 16 bit tamsayılara dönüştürür.

Bir uygulama, kullanıcının cihaz için seçtiği paylaşılan mod biçimini almak için bir ses uç noktası cihazının PKEY_AudioEngine_DeviceFormat özelliğini sorgulayabilir. Bir cihazın özelliklerini sorgulama hakkında bilgi için bkz. Cihaz Özellikleri.

Bazı uygulamalar, cihazın PKEY_AudioEngine_DeviceFormat özelliği tarafından belirtilen biçimi cihazda özel kullanım modu akışı açmak için uygun bir biçim olarak bulabilir. Özel kullanım modu akışlarını yöneten diğer uygulamaların, cihazla karmaşık biçim anlaşması gerektiren ek gereksinimleri olabilir. Genellikle, bu uygulamalardan biri, listenin başında tercih edilen biçimlerle uygun biçimlerin listesini oluşturur. Uygulama daha sonra isformatsupported yinelemeli olarak çağırır ve cihazın desteklediği bir biçimi bulana kadar listenin başından başlayarak listedeki her bir biçimi destekler.

Ses Uç Noktası Cihazları