Her Sound sınıfı örneği, belirli bir ses kaynağını yüklemek ve bu ses kaynağının oynatılmasını tetiklemek için bulunur. Bir uygulama, Sound nesnesini birden çok ses yüklemek için yeniden kullanamaz. Yeni bir ses kaynağını yüklemek isterse, yeni bir Sound nesnesi oluşturması gerekir.
Bir düğmeye eklenecek tıklatma sesi gibi küçük bir ses dosyası yüklüyorsanız, aşağıda gösterildiği gibi uygulamanız yeni bir Sound oluşturup bunun otomatik olarak ses dosyasını yüklemesini sağlayabilir:
var req:URLRequest = new URLRequest("click.mp3");
var s:Sound = new Sound(req);
Sound() yapıcısı, bir URLRequest nesnesini birinci parametresi olarak kabul eder. URLRequest parametresi için bir değer verilirse, yeni Sound nesnesi, belirtilen ses kaynağını otomatik olarak yüklemeye başlar.
En basit bir durumda uygulamanızın, sesin yükleme ilerlemesine dikkat etmesi ve yükleme sırasında hata olup olmadığını izlemesi gerekir. Örneğin, tıklatma sesinin boyutu büyük olursa, kullanıcı sesi tetikleyen düğmeyi tıklattığında ses tamamen yüklenmeyebilir. Yüklenmeyen bir sesin çalınmaya çalışılması da çalışma zamanı hatasına neden olabilir. Kullanıcıların ses çalmasını başlatacak eylemleri uygulamasına izin vermeden önce, sesin tamamen yüklenmesini beklemek daha güvenli olacaktır.
Sound nesnesi, ses yükleme işlemi sırasında birçok farklı olay dağıtır. Uygulamanız, yükleme ilerlemesini izlemek ve çalınmadan önce sesin tamamen yüklendiğinden emin olmak için bu olayları dinleyebilir. Aşağıdaki tabloda, Sound nesnesi tarafından gönderilebilen olaylar listelenmektedir.
Olay
|
Açıklama
|
open (Event.OPEN)
|
Ses yükleme işlemi başlamadan hemen önce gönderilir.
|
progress (ProgressEvent.PROGRESS)
|
Dosyadan veya akıştan veri alındığında ses yükleme işlemi sırasında düzenli aralıklarla gönderilir.
|
id3 (Event.ID3)
|
Bir mp3 sesi için ID3 verisi kullanılabilir olduğunda gönderilir.
|
complete (Event.COMPLETE)
|
Tüm ses kaynağının verisi yüklendiğinde gönderilir.
|
ioError (IOErrorEvent.IO_ERROR)
|
Ses dosyasının yeri bulunamadığında veya tüm ses verisi alınmadan önce yükleme işlemi kesintiye uğradığında gönderilir.
|
Aşağıdaki kod, ses yüklemesi sona erince sesin nasıl çalındığını gösterir:
import flash.events.Event;
import flash.media.Sound;
import flash.net.URLRequest;
var s:Sound = new Sound();
s.addEventListener(Event.COMPLETE, onSoundLoaded);
var req:URLRequest = new URLRequest("bigSound.mp3");
s.load(req);
function onSoundLoaded(event:Event):void
{
var localSound:Sound = event.target as Sound;
localSound.play();
}
İlk olarak, kod örneği, URLRequest parametresi için başlangıç değeri vermeden yeni bir Sound nesnesi oluşturur. Daha sonra, Sound nesnesinden Event.COMPLETE olayını dinler ve böylece tüm ses verileri yüklendiğinde onSoundLoaded() yönteminin çalıştırılmasını sağlar. Ardından, ses dosyası için yeni bir URLRequest değeriyle Sound.load() yöntemini çağırır.
Ses yüklemesi tamamlandığında onSoundLoaded() yöntemi çalıştırılır. Event nesnesinin target özelliği, Sound nesnesine bir başvurudur. Sound nesnesinin play() yönteminin çağrılması daha sonra ses çalınmasını başlatır.
Ses yükleme işlemini izleme
Ses dosyaları çok büyük olabilir ve bu dosyaların yüklenmesi uzun zaman alabilir. Flash Player ve AIR, sesler tamamen yüklenmeden uygulamanızın sesleri çalmasına olanak sağlarken, kullanıcılara ses verisinin ne kadarının yüklendiğine ve ne kadarının çalındığına dair gösterge sağlamak isteyebilirsiniz.
Sound sınıfı, ses yüklemesinin ilerlemesinin görüntülenmesini nispeten kolaylaştıran iki olay gönderir: ProgressEvent.PROGRESS ve Event.COMPLETE. Aşağıdaki örnek, yüklenmekte olan seslerle ilgili ilerleme bilgilerinin görüntülenmesi için bu olayların nasıl kullanıldığını gösterir:
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.media.Sound;
import flash.net.URLRequest;
var s:Sound = new Sound();
s.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
s.addEventListener(Event.COMPLETE, onLoadComplete);
s.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
var req:URLRequest = new URLRequest("bigSound.mp3");
s.load(req);
function onLoadProgress(event:ProgressEvent):void
{
var loadedPct:uint = Math.round(100 * (event.bytesLoaded / event.bytesTotal));
trace("The sound is " + loadedPct + "% loaded.");
}
function onLoadComplete(event:Event):void
{
var localSound:Sound = event.target as Sound;
localSound.play();
}
function onIOError(event:IOErrorEvent)
{
trace("The sound could not be loaded: " + event.text);
}
Bu kod ilk olarak bir Sound nesnesi oluşturur ve daha sonra ProgressEvent.PROGRESS ve Event.COMPLETE olayları için bu nesneye dinleyiciler ekler. Sound.load() yöntemi çağrılıp ses dosyasından ilk veriler alındıktan sonra, bir ProgressEvent.PROGRESS olayı gerçekleşerek onSoundLoadProgress() yöntemini tetikler.
Yüklenen ses verisinin yüzdesi, ProgressEvent nesnesinin bytesLoaded özelliğinin bytesTotal özelliğine bölümüne eşittir. Aynı bytesLoaded ve bytesTotal özellikleri, Sound nesnesinde de kullanılabilir. Yukarıdaki örnek, ses yükleme ilerlemesiyle ilgili mesajları gösterir ancak Adobe Flex çerçevesiyle veya Adobe Flash geliştirme aracıyla gelen bileşenler gibi ilerleme çubuğu bileşenlerini güncellemek için bytesLoaded ve bytesTotal değerlerini kullanabilirsiniz.
Bu örnek ayrıca bir uygulamanın ses dosyaları yüklenirken bir hatayı nasıl tanıyıp yanıtlayabildiğini gösterir. Örneğin, belirli bir ada sahip ses dosyası bulunamazsa, Sound nesnesi tarafından Event.IO_ERROR olayı gönderilir. Önceki kodda, onIOError() yöntemi çalıştırılır ve hata oluştuğunda kısaca hata mesajını görüntüler.