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.