DirectX Direct.Sound Kütüphanesi
Bu makalemizde DirectX içerisinde olan Direct.Sound kütüphanesi incelemeye çalışacağız. DirectX içerisinde bulunan diğer kütüphaneler gibi Direct.Sound kütüphanesi çok gelişmiş ve içerisinde kendine has sınıflar, yapılar, hatalar bulunan bir kütüphanedir. Bu makale ile anlatacağım Direct.Sound kütüphanesini elimden geldiğince size tanıtmaya çalışacağım. Kütüphaneyi ayrıntılı olarak inceledikten sonra bir küçük uygulama ile (bir ses dosyasını çalmak ) bu bilgileri kısmende olsa uygulayacağız.
Ses Teknolojisi
2000'li yıllardan önce ses kartları ve ses cihazları bugünlerdeki gibi popüler değildi. Fakat hızlı bir biçimde teknoloji geliştikçe ses kartları ve özellikleri gittikçe önem kazanmaya başladı. 2000'li yıllardan beri multimedia sistemler yaygınlaşmakta ve ses kartları ve ses aygıtları bu paralelde gelişmektedir. Ses aygıtları bilgisayarın dışarıya ses vermesi ya da dışarıdan ses alıp bilgisayara ilgili veriyi ileten aygıtlardır. Ses ortamdaki basınç değişimi ile ortaya çıkar. Ses kartları ortamdaki basınç değişimlerini algılayarak bu değişimleri sayısal veriye çevirir(ses kaydı) ya da hoparlör yardımıyla dış ortama bilgisayarın içerisindeki sayısal veriyi alarak analog veri haline getirir ve bunu yaparken yine basınçtan yararlanır. Ses kartı üzerinde verileri almak için birden fazla yöntem kullanılır (sampling, synthesis, wavetable) ve bu alınan veriler işlenerek birçok formatta kayıt yapılabilir. Alınan sesin üzerinde filtreleme ya da gürültülerin giderilmesi için ise bir çok yapı vardır. Ses verilerinin büyüklüklerini ayarlamak içinde değişik sıkıştırma algoritmaları (Digital Signal Processor) kullanılmaktadır.Ses kartları 8 bit,16 bit ve 32 bit gibi örnekleme özelliğine sahiptirler bit sayısı artarak sesin kalitesi ve ses dosyasının boyutu artmaktadır. İnsan kulağı gerçekte sesleri her yönde ve doğrultuda algılayabilmektedir. Bilgisayar ortamında bu türlü bir ses oluşturmaya ya da bu tür bir ses yapısına üç boyutlu ses denir. 3D ses sisteminde yukarıdan, aşağıdan, arkadan, ileriden gelen sesler mesafe ayırımı ile hissedilebilir. Stereo ses ise en az iki hoparlör kullanılarak yapılan ses tipidir. Bu ses tipinde bas ve tiz farklı hopörlerlerden verilerek akustik ses(stereo) oluşturulabilmektedir. Surround ses ise Dolby Sound,Dolby Digital (AC-3) ve DTS olmak formatlarıdır. Bu yapılar ikiden fazla kanal içermekte ve sese değişik etkiler katmaktadır. Bu yapılardan farklı olarak Surround, EAX , A3D ,Sensaura, Q3D ,I3DL2 HRTF ve Direct Sound 3D standartları vardır. Direct Sound 3D, oyunlarda doğrudan bilgisayar donanımını adreslemesini sağlayan DirectX'in bir yapısıdır.Oyun programcıları DS3D kullanarak oyunlarındaki ses kaynaklarının ve kullanıcının konumlarını x,y ve z koordinatlarında belirlerler. Kullanıcının oyunda ne yöne baktığı,ses kaynaklarının hızları,sesin yayılma yöntemi gibi faktörler de programcılar tarafından tanımlanabilir.
Direct.Sound kütüphanesi içerisinde programcıların kullanabileceği ve yakalayabileceği hatalar aşağıdaki gibidir.
Direct.Sound Exception'lar
SoundException AccessDeniedException AllocatedException BadFormatException BadSendBufferGuidException BufferLostException BufferTooSmallException ControlUnavailableException EffectsUnavailableException InvalidCallException NoAggregationException NoDriverException ObjectNotFoundException OtherApplicationHasPriorityException PriorityLevelNeededException SendLoopException UnsupportedException
SoundException DirectXException'dan türer ve DirectSound exceptionlarına miraslık yapar. Tüm DirectSound exceptionlar miras olarak SoundException alır. AccessDeniedException ses aygıtına erişim engellendiğinde fırlatılır, AllocatedException ses aygıtı başka bir yapı tarafından kullanılıyorsa ve bu yapının aygıtı kullanım önceliği(Priority Level)'i sizin isteğinizden daha yüksekse fırlatılır, BadFormatException ses aygıtının okuması ya da vermesi gereken (DAC(Sayısal Analog Çevirisi) ve ADC(Analog Sayısal Çevirici) içerisinde) formatın uygun olmaması durumunda fırlatılır.BadSendBufferGuidException buffera gönderilecek ses dosyası uygun formatta değilse fırlatılır. BufferLostException bellekte tutulan buffer alanının kaybolması durumunda fırlatılır. BufferTooSmallException yapılan işlem için kullanılan buffer alanının yeterli büyüklükte olmaması durumunda fırlatılır. ControlUnavailableException, buffer yaratılmadan buffer üzerinde yapılacak kontrollerin(ses şiddeti, kanalı, formatı) tanımlanması gerekmektedir eğer ilgili kontrol tanımlanmayıp ilgili kontrol ile bir işlem yapılmak istenirse bu hata fırlatılır. EffectsUnavailableException yapılmak istenen etki sistem üzerinde tanımlı olmadığında, yanlış sırada ya da yanlış biçimde olduğunda oluşur. Örnek olarak donanımsal olarak beklenen bir etkinin yazılımsal olarak yapılmak istenmesinde fırlatılır. InvalidCallException istenilen fonksiyonun şu an kullanılmasının uygun olmadığı durumlarda fırlatılır. NoAggregationException ses nesnenin başka ses nesneleri ile birleştirilmeyeceğini(mix) belirten hatadır. NoDriverException verilen Id numarası ile kullanılabilir ses aygıtın olmaması durumunda fırlatılır. ObjectNotFoundException istenilen nesne şu an bulunamıyorsa fırlatılır.OtherApplicationHasPriorityException aygıta sizin isteğinizden daha üst seviyeli bir istek geldiğinde sizin aygıt erişiminiz engellenir bu durumda hata fırlatılır, SendLoopException ses dosyası üzerinde devresel döngü tespit edildiğinde fırlatılır en son olarak UnsupportedException ilgili nesnenin fonksiyonunu çağırmak şu an mümkün değilse fırlatılır.
Direct.Sound Enumeration'lar
BufferDescriptionFlags: Buffer kapasitesini tanımlamak için kullanılan bayraklardır. Aşağıdaki değerleri alırlar .