Elke instantie van de klasse Sound bestaat om een specifieke geluidsbron te laden en het afspelen ervan te starten. Een toepassing kan een object Sound niet hergebruiken om meer dan één geluid te laden. Als er een nieuwe geluidsbron moet worden geladen, moet er een nieuw object Sound worden gemaakt.
Als u een klein geluidsbestand laadt, bijvoorbeeld een klikgeluid dat aan een knop moet worden gekoppeld, kan uw toepassing een nieuw object Sound maken en het geluidsbestand automatisch laten laden, zoals hieronder wordt weergegeven:
var req:URLRequest = new URLRequest("click.mp3");
var s:Sound = new Sound(req);
De constructor
Sound()
accepteert een object URLRequest als eerste parameter. Wanneer er een waarde voor de parameter URLRequest wordt opgegeven, begint het nieuwe object Sound automatisch met het afspelen van de opgegeven geluidsbron.
Uw toepassing moet altijd, behalve in de allersimpelste gevallen, de voortgang van het laden van het geluid in de gaten houden en op fouten tijdens het laden letten. Als het klikgeluid bijvoorbeeld redelijk groot is, is dit wellicht nog niet helemaal geladen wanneer de gebruiker klikt op de knop waarmee het geluid wordt geactiveerd. Als er wordt geprobeerd een geluid af te spelen dat niet is geladen, wordt er mogelijk een runtimefout gegenereerd. Het is beter om te wachten tot het geluid volledig is geladen voordat gebruikers handelingen kunnen uitvoeren waardoor er zou kunnen worden gestart met het afspelen van geluiden.
Een object Sound verzendt een aantal gebeurtenissen tijdens het proces van het laden van een geluid. Uw toepassing kan naar deze gebeurtenissen luisteren om de voortgang van het laden te volgen en ervoor te zorgen dat het geluid volledig is geladen voordat dit wordt afgespeeld. In de volgende tabel worden de gebeurtenissen weergegeven die door een object Sound kunnen worden verzonden.
Gebeurtenis
|
Beschrijving
|
open (
Event.OPEN
)
|
Verzonden vlak voordat het laden van geluid wordt gestart.
|
progress (
ProgressEvent.PROGRESS
)
|
Periodiek verzonden tijdens het laden van geluid wanneer gegevens van een bestand of stream worden ontvangen.
|
id3 (
Event.ID3
)
|
Verzonden wanneer ID3-gegevens beschikbaar zijn voor een MP3-geluid.
|
complete (
Event.COMPLETE
)
|
Verzonden wanneer alle gegevens van de geluidsbron zijn geladen.
|
ioError (
IOErrorEvent.IO_ERROR
)
|
Verzonden wanneer een geluidsbestand niet is gevonden of wanneer het laadproces wordt onderbroken voordat alle geluidsgegevens zijn ontvangen.
|
De volgende code laat zien hoe een geluid kan worden afgespeeld nadat het volledig is geladen:
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();
}
Om te beginnen wordt er in het codevoorbeeld een nieuw object Sound gemaakt, zonder dat er een beginwaarde voor de parameter URLRequest wordt toegewezen. Vervolgens wordt er geluisterd naar de gebeurtenis
Event.COMPLETE
uit het object Sound, die ervoor zorgt dat de methode
onSoundLoaded()
wordt uitgevoerd zodra alle geluidsgegevens zijn geladen. Daarna wordt de methode
Sound.load()
aangeroepen met een nieuwe URLRequest-waarde voor het geluidsbestand.
De methode
onSoundLoaded()
wordt uitgevoerd zodra het geluid volledig is geladen. De eigenschap
target
van het object Event is een verwijzing naar het object Sound. Door het aanroepen van de methode
play()
van het object Sound wordt vervolgens het afspelen van het geluid gestart.
Het proces van het laden van geluiden volgen
Geluidsbestanden kunnen zeer groot zijn en het laden ervan kan veel tijd kosten. Hoewel Flash Player en AIR toestaan dat uw toepassing geluiden afspeelt voordat deze volledig zijn geladen, kan het nuttig zijn om de gebruiker te laten weten hoeveel er al van de geluidsgegevens is geladen en hoeveel van het geluid al is afgespeeld.
De klasse Sound verzendt twee gebeurtenissen die ervoor zorgen dat u de voortgang van het laden van een geluid redelijk gemakkelijk kunt weergeven:
ProgressEvent.PROGRESS
en
Event.COMPLETE
. In het volgende voorbeeld ziet u hoe u deze gebeurtenissen kunt gebruiken om voortgangsgegevens weer te geven over het geluid dat wordt geladen:
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);
}
In deze code wordt eerst een object Sound gemaakt, waarna er listeners voor de gebeurtenissen
ProgressEvent.PROGRESS
en
Event.COMPLETE
aan dat object worden toegevoegd. Nadat de methode
Sound.load()
is aangeroepen en de eerste gegevens van het geluidsbestand zijn ontvangen, treedt de gebeurtenis
ProgressEvent.PROGRESS
op en wordt de methode
onSoundLoadProgress()
geactiveerd.
Het percentage geladen geluidsgegevens is gelijk aan de waarde van de eigenschap
bytesLoaded
van het object ProgressEvent gedeeld door de waarde van de eigenschap
bytesTotal
. De eigenschappen
bytesLoaded
en
bytesTotal
zijn ook beschikbaar voor het object Sound. In het bovenstaande voorbeeld worden alleen berichten over de voortgang van het laden van geluid weergegeven, maar u kunt de waarden
bytesLoaded
en
bytesTotal
ook heel gemakkelijk gebruiken om voortgangsbalken bij te werken, die bijvoorbeeld bij het framework van Adobe Flex of het Adobe Flash-programma voor het schrijven van programmacode worden geleverd.
In dit voorbeeld ziet u ook hoe een toepassing bij het laden van geluidsbestanden een fout kan detecteren en erop kan reageren. Als een geluidsbestand met een opgegeven bestandsnaam niet wordt gevonden, wordt bijvoorbeeld de gebeurtenis
Event.IO_ERROR
door het object Sound verzonden. In bovenstaande code wordt de methode
onIOError()
uitgevoerd en wordt een kort foutbericht weergegeven wanneer een fout optreedt.