Volkan Atasever | All posts tagged 'sound'
VB.NET ile Ses İşlemleri
Kasım 17, 2006 07:55 by Volkan Atasever
VB.NET’in biz programcılar için yapabilecekleri gerçekten neredeyse sınırsıza yakın. .NET ortamını, Visual Basic’in kolaylığıyla ve .NET’in kompleks içeriğiyle birleştirdiğimiz zaman inanılmaz özelliklere imza atan bir ortam görüyoruz.
Programlarımızı zenginleştirmek için görsel öğeleri bolca kullanmaktayız. Ses unsuru da unutulmaması gereken başlıca özelliklerden. Ses bildiğimiz gibi kulağımıza gelen ve beynimizin uyarılmasını sağlayan dış unsurlarla duyumsamamızı etkileyen bir titreşim topluluğudur.
Biz ise sıradan ses den değil ses sinyallerinden bahsedeceğiz İngilizce terimi ile ifade edersek: “audio”.
Fazla derinlemesine girmeden standart ve standart dışı olarak VB.NET projelerimizde bu sesi nasıl kullanabileceğimizi örneklendireceğiz. Gerek Directx Sound gerekse apilerle veya directx audioplayback ile bunları nasıl elde edeceğimizi inceleyeceğiz.
Bir oyun yazıyorsanız sizin için çok yararlı olacaktır veya kullanıcı ile etkileşime giren bir program.
Başlangıç olarak makalemin teknik kısmına directx sound ile başlamak istiyorum. Başlamadan önce directx sdk nın bilgisayarınıza yüklü olduğuna emin olmalısınız ben şubat 2006 dağıtımını kullandım.
Yukarıdaki bağlantının download kısmında sdk yı indirebilirsiniz.
Projenize ileriki adımlarda da kullanmak için bazı referanslar eklemek zorundayız. Aşağıdaki resimde görebilirsiniz.
Projemize sağ tıklayıp add reference kısmına basıyoruz.
Microsoft.DirectX.DirectSound , Microsoft.DirectX.AudioVideoPlayBack ve Microsoft.DirectX referanslarını projenize ekleyin.
Not: Burada projenin bütün kodlarını değil de can alıcı noktalarını açıklayacağım. Uygulamanın tam kodlarını örnek kodlar bölümünden indirebilirsiniz.
ile namespacelerimizi projemize dahil ediyoruz.
İlk başta bize gereken bilgisayarımızdaki herhangi bir yoldan ses dosyamızı çağırmaktır. Bunun için bir textbox ve bir browse butonuna ihtiyacımız var. Textbox bileşenimizde de ses dosyamızın yolunu görebileceğiz bunun için gerekli olan toolbox’ımızdan OpenFileDİalog isimli bileşinimizi projememize eklememizdir.
TextBox1.Text = filename
Filename ise bir string olarak tanımlanmıştır.
Temel kodumuz ise aşağıdaki gibidir:
Dim dev As New Device()
Dim dsc As New BufferDescription()
dsc.ControlVolume = True
dsc.ControlFrequency = True
Dim snd As New SecondaryBuffer(filenamedxsound, dev)
snd.Volume = volume
snd.Frequency = frekans
Device nesnemizi ses kartınız olarak düşenebilirsiniz sesimizi çalmamız için gereken en temel bileşendir. Yani ilk önce ses aygıtımızı oluşturduk. Ardından aygıtımızın üzerinden setcooperativelevel’i çağırmamız gerekir. Burada Normal’i kullandık çoğunluklada bu seçenek yeterli olacaktır. Ayrıca bir BufferDescription nesnesini canlandırdık bunun sebebi bu nesne üzerinde dahil olan ses yüksekliğini ve ses frekansının değerlerini aktif hale getirmek için kullanılmıştır. Ardından SecondaryBuffer’ımızı oluşturup filenamdxsound adını verdiğimiz dosya ismimizi çağırıyor ve ikinci parametre olarakda aygıtımızız gösteriyoruz. Snd.Volume e ses yüksekliği değerimizi Frequency’e ise bizim seçtiğimiz frekansı aktarıp . snd.Play’e 0 değerini veriyoruz ve varsayılan değer olarak çalmasını yani bir kere çalıp durmasını söylüyoruz.
Örnek uygulamamızda kullandığımız gibi bir trackbar kullanmak isterseniz maximum ve minimum değerlerini doğru seçmeniz gerekecektir. Bunun içinde volume trackbar’ımızın maximumunu 0 ve minimumunu ise -3000 olarak ayarlamalısınız.
Frekans’ımızın minimumumu ise 100 maksimumuda 10000’dir.
Sesi ve frekansı trackbarla ayarlamamıza yarayacak örnek kodumuz:
If TrackBar1.Value = TrackBar1.Minimum Then
volume = TrackBar1.Value
If TrackBar2.Value = TrackBar2.Minimum Then
frekans = TrackBar2.Value
Directx sound ile ses çaldırırken daha bir çok özellik yer almaktadır. Bunlardan bazıları,
Sağ ve sol balansı kontrol etmek için gereken özellik:
Yukarıdaki kodumuzda aşağıdaki modifikasyonları yapabilirsiniz.
dsc.ControlPan = True
snd.Pan = 3000
Speaker seçiminide kolay bir şekilde projenize ekelmeniz olası:
‘ Yeni Speaker Nesnesi yarat
Dim spk As New Speakers();
spk.Mono = false ‘ mono speaker
spk.Headphone = false ‘ headphones
spk.Stereo = false ‘ stereo speakers
spk.Quad = true ‘ quad system (iki ön, iki arka)
spk.FiveDotOne = false ‘ 5.1 surround system
spk.SevenDotOne = false ‘ 7.1 surround system
spk.Surround = false ‘ surround system
dev.SpeakerConfig = spk;
Directx.AudioVideoPlayback ile ses çaldırmak ise Directxsound’dan daha kolay ve birkaç kod satırı ile sesi çaldırabiliyoruz.
Namespace’imizi import etmemiz gerekecek.
Dim audio As New Audio(filenameaudiopb)
audio.Volume = volume
Burada filenameaudiopb ses dosyamızın ismi ve Audio nesnemizde ses dosyasını çalmamızı yarayan nesnemiz. audio.Volume ve audio.Play() ile default olarak sesimizi çaldırabiliriz.
Ses dosyalarını çaldırmak için diğer bir yöntemimiz ise DLL import ile API’ler kullanılarak eskiden kalma yöntemlerle oluşturacağımız bir sistemdir.
Projemize yukarıdaki namespace’i ekleyelim.
Public Const SND_SYNC = &H0 ' Senkron
Public Const SND_ASYNC = &H1 ' Asenkron
ile DLL dosyamızı import edelim ve sabitlerimizi belirleyelim SND_SYNC müzik dosyamızı Senkron bir şekilde çalmamızı SND_ASYNC ise asenkron şekilde çalmamızı gerçekleyecektir. SND_FILENAME ise adından anlayacağınız gibi dosyamızın ismi.
Tanımlamalarımız biraz karmaşık olmasına rağmen çalma işlemimiz çok daha basittir. Bunun için yapacağınız tek şey PlaySound metodunu kullanmanız olacaktır.
Senkron veya asenkron çaldırmak için ise
PlaySound(filename,0,SND_FILENAME or SND_SYNC)
PlaySound(filename,0,SND_FILENAME or SND_ASYNC)
Şeklinde kodumuza ekleme yapabiliriz.
Diğer sabitlerimiz ise aşağıdaki gibidir:
Not: Directx Sound ve API’lerle wav dosyalarını çalıp üstünde işlem yapabilirken Directx audio playback ile mp3 dosyalarını da çaldırabilirsiniz.
Tags: vb.net, ses işlemleri, sound, audio, directx, dll, api