Sound
Evet, bu yazıda Sound sınıfına şöyle bir göz kırpacaz. Şimdi önce bir fla açalım ve onu masaüstüne kaydedelim daha sonra sarki adında bir mp3 dosyasını da fla dosyasının yanın koyalım, sonra flash’a şu kodları yazalım;
var adres:URLRequest = new URLRequest("sarki.mp3");
var ses:Sound = new Sound(adres);
ses.play()
Bunu daha kısa yapmak istersek şunu yazabiliriz;
var ses:Sound = new Sound(new URLRequest("sarki.mp3"));
ses.play()
Bu kodu test edince şarkı çalacaktır. Kodda önce dışardan çağıracağımız şarki.mp3 için bir URLRequest belirttik sonra yeni bir sound oluşturduk ve sonra da sesimizi play komutu ile ile çaldık. Eğer dışardan değilde kütüphaneden bir sesi çalmak istiyorsak kütüphaneye eklediğimiz sesi muzik diye linkage edip kodları şu şekilde değiştirmeliyiz;
var ses:muzik = new muzik();
ses.play();
Burada da ses değişkeninin yeni bir muzik olduğunu belirttik ve sonra oynattık. Eğer sesi belirli bir saniyesinden sonra oynatmak istiyorsak ve belirli bir sayı defa oynatmak istiyorsak son kısmı şöyle değiştirmeliyiz;
ses.play(10000,3)
Parantez içindeki ilk kısım başlama zamanını, virgülden sonraki kısım ise loop’u yani tekrarı belirtir. Bu kodla ses 10. saniyeden sonra başlar ve üç kere çalar. Şimdi sesin çalma anındaki konumunu öğrenmeye çalışalım. Bunun için önce sahneye denetle_btn isminde bir buton koyalım ve sonra şöyle bir kod yazalım;
var ses:Sound = new Sound(new URLRequest("sarki.mp3"));
var kanal:SoundChannel=ses.play()
denetle_btn.addEventListener(MouseEvent.CLICK,denetle)
function denetle(e:MouseEvent){
trace("ses şimdi "+Math.round(kanal.position/1000)+"."+" saniyede" )
}
Bu kodla şarkı çalarken denetle_btn butonuna bastıkça şarkının kaçıncı saniyede olduğunu görebiliyoruz. Burada daha önceden de yaptığımız gibi yeni bir ses değişkeni oluşturduk daha sonra bir SoundChannel değişkeni olarak kanal’ı ekledik ve bunla sesi oynattık sonra denetle_btn butonuna tıkladığımızda position ile SoundChannel’in konumunu/pozisyonunu aldık. Şimdi madem şarkı çalınca konumunu öğrenebiliyoruz o zaman şarkıyı stop ettirirken alacağımız konum noktasını daha sonra play ederken başlangıç noktası yaparsak ses için bir play-pause aktivitesi yapabiliriz, aksi taktirde pause işlemini direkt olarak yapacağımız bir komut yok, o halde dediğimizi yapalım; Sahneye basla_btn ve durakla_btn isminde iki buton ekleyelim ve şu kodları yazalım;
var ses:Sound = new Sound(new URLRequest("sarki.mp3"));
var kanal:SoundChannel=new SoundChannel();
basla_btn.addEventListener(MouseEvent.CLICK,basla)
durakla_btn.addEventListener(MouseEvent.CLICK,durakla)
var durmaPozisyonu:int = kanal.position;
function durakla(e:MouseEvent){
durmaPozisyonu = kanal.position;
kanal.stop();}
function basla(e:MouseEvent){
kanal = ses.play(durmaPozisyonu);}
Test edince göreceğiz ki basla_btn’ye basınca başlıyor, dur_btn’ye basınca duruyor ve daha sonra yine basla_btn’ye basınca kaldığı yerden oynamaya devam ediyor. Kodları açıklayacak olursak başta yine ses kanalı oluşturduk ve farklı olarak =new SoundChannel(); dedik, bunu açılır açılmaz çalmasın diye yaptık, eğer açılır açılmaz çalmasını istiyorsak bunu ilki gibi yani =ses.play() diye değiştirmeliyiz. Daha sonra farklı olarak durmaPozisyonu diye bir değişken atadık ve bunun ses kanalının o anki pozisyonu olduğunu bildirdik. Daha sonra ise durakla_btn’ye tıklama durumunda o anki durmaPozisyonu’nu kanal.position’a eşitledik, basla_btn’ye tıklama durumunda ise sesi durmaPozisyonu’nda kanala eşitleyerek başlattık. Şimdi bir kaç değişiklikle tam bir ses kontrol sistemi yapalım; sahneye dur_btn isminde bir buton daha ekleyin ve kodları şu şekilde değiştirin;
var ses:Sound = new Sound(new URLRequest("sarki.mp3"));
var kanal:SoundChannel=new SoundChannel();
var calmaVarmı:Boolean=false
basla_btn.addEventListener(MouseEvent.CLICK,basla)
durakla_btn.addEventListener(MouseEvent.CLICK,durakla)
dur_btn.addEventListener(MouseEvent.CLICK,dur)
var durmaPozisyonu:int = kanal.position;
function basla(e:MouseEvent){
if(!calmaVarmı){
calmaVarmı=true
kanal = ses.play(durmaPozisyonu)}
}
function durakla(e:MouseEvent){
if(calmaVarmı==true){
calmaVarmı=false
durmaPozisyonu = kanal.position;
kanal.stop();}
}
function dur(e:MouseEvent){
calmaVarmı=false
durmaPozisyonu = 0
kanal.stop();
}
Bundan önceki kodda basla_btn’ye iki kere basınca iki kere çalıyordu bunu engellemek için bir mantık sorgulayıcı olarak calmaVarmı diye bir boolean oluşturduk ve bunu başta çalma olmadığı için false’e eşitledik. Daha sonra da butonları çalma durumuna göre çalıştırmak için kodlar yazdık ve dur_btn için stop kodu ekledik ve durma pozisyonunu sıfır yaptık ki en başa dönsün… Ayrıca bir kaç yabancı işlemi de açıklayalım Fransız kalmayın; if(!calmaVarmı) bu kod if(calmaVarmı==false) ile aynı manadadır yani durum false ise demektir. int ise Number’dan farklı olarak sadece tam sayılar anlamındadır, Number tüm sayıları belirtir yani aslında Number da yazılabilirdi… Ayrıca uint de vardır bu da doğal sayılar anlamındadır… Ne güzel bir ses kontrol sistemimiz oldu…
Bir sonraki yazıda kaldığımız yerden devam edeceğiz inşallah…
Funda Altaş demiş ki,
Eylül 24, 2010 9:01 am
Gerçekten çok yararlı ve açıklayıcı bir yazı olmuş. as3 e tam geçişe karar verdiğim bugünlerde şu kodları görünce resmen mutlu oldum
Teşekkürler bilgileriniz için…