Paket | flash.media |
Klass | public class Sound |
Arv | Sound EventDispatcher Object |
Underklasser | SoundAsset |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
I Flash Player 10 och senare och AIR 1.5 och senare kan du också använda denna klass för att arbeta med ljud som skapas dynamiskt. I detta fall använder Sound-objektet den funktion du tilldelar till en sampleData
-händelsehanterare för att hämta ljuddata. Ljudet spelas upp under det att det hämtas från ett ByteArray-objekt som du fyller på med ljuddata. Du kan använda Sound.extract()
för att extrahera ljuddata från ett Sound-objekt. Sedan kan du bearbeta det innan du skriver tillbaka det till strömmen för uppspelning.
Om du vill kontrollera ljud som är inbäddade i en SWF-fil använder du egenskaperna i SoundMixer-klassen.
Obs: ActionScript 3.0 Sound API skiljer sig från ActionScript 2.0. I ActionScript 3.0 kan du inte kontrollera egenskaper för sound-objekt genom att ordna dem hierarkiskt.
Överväg följande säkerhetsmodell när du använder den här klassen:
- Inläsning och uppspelning av ett ljud tillåts inte om den anropande filen finns i en nätverkssandlåda och ljudfilen som ska läsas in är lokal.
- Som standard är det inte tillåtet att läsa in och spela upp ett ljud om den anropade filen är lokal och försöker läsa in och spela upp ett fjärrljud. En användare måste ge särskild behörighet som tillåter den här typen av åtkomst.
- Vissa åtgärder som har med ljud att göra är begränsade. Det går inte att få åtkomst till data i ett inläst ljud med en fil i en annan domän om du inte implementerar en korsdomänprincipfil. Ljudrelaterade API:er som faller under denna begränsning är
Sound.id3
,SoundMixer.computeSpectrum()
,SoundMixer.bufferTime
och klassenSoundTransform
.
I Adobe AIR begränsas emellertid inte innehåll i säkerhetssandlådan application
(innehåll som installeras med AIR-programmet) av de här säkerhetsbegränsningarna.
Mer information om säkerhet finns i avsnittet Security på Flash Player Developer Center.
Relaterade API-element
Egenskap | Definieras med | ||
---|---|---|---|
bytesLoaded : uint [skrivskyddad]
Returnerar det tillgängliga antalet byte i det här ljudobjektet. | Sound | ||
bytesTotal : int [skrivskyddad]
Returnerar det totala antalet byte i det här ljudobjektet. | Sound | ||
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
id3 : ID3Info [skrivskyddad]
Ger tillgång till metadata som ingår i en MP3-fil. | Sound | ||
isBuffering : Boolean [skrivskyddad]
Returnerar buffringsläget för externa MP3-filer. | Sound | ||
isURLInaccessible : Boolean [skrivskyddad]
Anger om egenskapen Sound.url har trunkerats. | Sound | ||
length : Number [skrivskyddad]
Det aktuella ljudets varaktighet i millisekunder. | Sound | ||
url : String [skrivskyddad]
URL:en som ljudet lästes in från. | Sound |
Metod | Definieras med | ||
---|---|---|---|
Skapar ett nytt Sound-objekt. | Sound | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Registrerar ett händelseavlyssnarobjekt för ett EventDispatcher-objekt så att avlyssnaren får meddelanden om händelser. | EventDispatcher | ||
Stänger flödet så att eventuell datanedladdning avbryts. | Sound | ||
Skickar en händelse till händelseflödet. | EventDispatcher | ||
Extraherar ljuddata i raw-format från ett Sound-objekt. | Sound | ||
Kontrollerar om EventDispatcher-objektet har några avlyssnare registrerade för en viss typ av händelse. | EventDispatcher | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Initierar inläsning av en extern MP3-fil från den angivna URL:en. | Sound | ||
läs in MP3-ljudinformation från ett ByteArray-objekt till ett Sound-objekt. | Sound | ||
loadPCMFromByteArray(bytes:ByteArray, samples:uint, format:String = "float", stereo:Boolean = true, sampleRate:Number = 44100.0):void
Läs in PCM 32-bitars flyttalsljudinformation för ett ByteArray-objekt till ett Sound-objekt. | Sound | ||
play(startTime:Number = 0, loops:int = 0, sndTransform:flash.media:SoundTransform = null):SoundChannel
Skapar ett nytt SoundChannel-objekt som ska spela upp ljudet. | Sound | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Tar bort en avlyssnare från EventDispatcher-objektet. | EventDispatcher | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Returnerar det angivna objektets primitiva värde. | Object | ||
Kontrollerar om en händelseavlyssnare är registrerad för det här EventDispatcher-objektet eller något av dess överordnade objekt för den angivna händelsetypen. | EventDispatcher |
Händelse | Sammanfattning | Definieras med | ||
---|---|---|---|---|
[utsändningshändelse] Skickas när Flash Player eller AIR får operativsystemfokus och blir aktivt. | EventDispatcher | |||
Skickas när alla data är inlästa. | Sound | |||
[utsändningshändelse] Skickas när Flash Player eller AIR förlorar operativsystemfokus och blir inaktivt. | EventDispatcher | |||
Skickas av ett Sound-objekt när ID3-data finns tillgängligt för ett MP3-ljud. | Sound | |||
Skickas om ett in- eller utdatafel orsakar en misslyckad inläsningsåtgärd. | Sound | |||
Skickas när en inläsning initieras. | Sound | |||
Skickas när data tas emot som ett inläsningsförlopp. | Sound | |||
Skickas när miljön begär nya ljuddata. | Sound |
bytesLoaded | egenskap |
bytesLoaded:uint
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Returnerar det tillgängliga antalet byte i det här ljudobjektet. Den här egenskapen är vanligtvis endast användbar för externt inlästa filer.
Implementering
public function get bytesLoaded():uint
bytesTotal | egenskap |
id3 | egenskap |
id3:ID3Info
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Ger tillgång till metadata som ingår i en MP3-fil.
MP3-ljudfiler kan innehålla ID3-taggar som innehåller metadata för filen. Om ett MP3-ljud du läser in med metoden Sound.load()
eller innehåller ID3-taggar kan du avfråga dessa egenskaper. Bara ID3-taggar med teckenuppsättningen UTF-8 stöds.
Flash Player 9 och senare versioner samt AIR har stöd för ID3 2.0-taggar, närmare bestämt 2.3 och 2.4. I följande tabell visas standardtaggarna för ID3 2.0 och den typ av innehåll som taggarna representerar. Egenskapen Sound.id3
ger tillgång till dessa taggar via formatet my_sound.id3.COMM
, my_sound.id3.TIME
och så vidare. Den första tabellen innehåller en beskrivning av taggar som går att få åtkomst till antingen via ID3 2.0-egenskapsnamnet eller via ActionScript-egenskapsnamnet. Den andra tabellen innehåller en beskrivning av ID3-taggar som stöds med som inte har fördefinierade egenskaper i ActionScript.
ID3 2.0-tagg | Motsvarande egenskap i klassen Sound |
COMM | Sound.id3.comment |
TALB | Sound.id3.album |
TCON | Sound.id3.genre |
TIT2 | Sound.id3.songName |
TPE1 | Sound.id3.artist |
TRCK | Sound.id3.track |
TYER | Sound.id3.year |
Följande tabell innehåller en beskrivning av ID3-taggar som stöds men som inte har fördefinierade egenskaper i klassen Sound. Du får tillgång till dem genom att anropa mySound.id3.TFLT
, mySound.id3.TIME
och så vidare. Obs! Ingen av dessa taggar stöds i Flash Lite 4.
Egenskap | Beskrivning |
TFLT | Filtyp |
TIME | Tidpunkt |
TIT1 | Beskrivning av innehållsgrupp |
TIT2 | Beskrivning av titel/låtnamn/innehåll |
TIT3 | Textnings-/beskrivningsutveckling |
TKEY | Initialnyckel |
TLAN | Språk |
TLEN | Längd |
TMED | Medietyp |
TOAL | Albumets/filmens/showens originaltitel |
TOFN | Originalfilnamn |
TOLY | Originalets textförfattare |
TOPE | Originalartister |
TORY | Ursprungligt utgivningsår |
TOWN | Filens ägare/licenstagare |
TPE1 | Huvudartister/solister |
TPE2 | Band/orkester/ackompanjemang |
TPE3 | Dirigent-/artistutveckling |
TPE4 | Tolkad, remixad eller på annat sätt ändrad av |
TPOS | Del av en serie |
TPUB | Utgivare |
TRCK | Spårnummer/plats i en serie |
TRDA | Inspelningsdatum |
TRSN | Namn på Internet-radiostation |
TRSO | Internet-radiostationens ägare |
TSIZ | Storlek |
TSRC | ISRC (International Standard Recording Code) |
TSSE | Programvara/maskinvara och inställningar som används för kodning |
TYER | År |
WXXX | URL-länkram |
Tänk på Flash Players säkerhetsmodell när du använder den här egenskapen:
- Egenskapen
id3
för ett Sound-objekt tillåts alltid för SWF-filer som finns i samma säkerhetssandlåda som ljudfilen. För filer i andra sandlådor finns det säkerhetskontroller. - Om du läser in ljudet med metoden
load()
i Sound-klassen kan du ange encontext
-parameter som är ett SoundLoaderContext-objekt. Om du ställer in egenskapencheckPolicyFile
för SoundLoaderContext-objektet påtrue
söker Flash Player efter en URL-principfil på den server från vilken ljudet lästes in. Om det finns en principfil och om filen godkänner åtkomst från domänen för den inlästa SWF-filen, får filen åtkomst tillid3
-egenskapen i Sound-objekt. Annars får den inte åtkomst.
I Adobe AIR begränsas emellertid inte innehåll i säkerhetssandlådan application
(innehåll som installeras med AIR-programmet) av de här säkerhetsbegränsningarna.
Mer information om säkerhet finns i avsnittet Security på Flash Player Developer Center.
Implementering
public function get id3():ID3Info
Relaterade API-element
Exempel ( Så här använder du exemplet )
I konstruktorn läses ljudfilen in men den ställs inte in på uppspelning. Här antas filen finnas i SWF-katalogen. Datorn måste ha behörighet för att kunna läsa ID3-taggar i en inläst ljudfil. Om det fins ID3-information i filen och programmet får läsa den aktiveras en Event.ID3
-händelse och egenskapen id3
i ljudfilen fylls i. Egenskapen id3
innehåller ett ID3Info
-objekt med all ID3-information.
I metoden id3Handler()
sparas filens ID3-taggar i id3
, ett objekt av klassen ID3Info. En textfältsinstans skapas för att visa listan med ID3-taggar. for-slingan itererar genom alla ID3 2.0-taggar och lägger till deras namn och värden i textfältets innehåll. Med hjälp av egenskaper för ID3-info (ID3Info
) läggs även artist, låttitel och album till. ActionScript 3.0 och Flash Player 9 och senare har stöd för ID3 2.0-taggar, specifikt 2.3 och 2.4. Om du itererar genom egenskaper som i for-slingan visas bara ID3 2.0-taggar. Data från tidigare versioner lagras också i låtens id3
-egenskap och kan visas med hjälp av egenskaperna i klassen ID3Info. Taggarna för ID3 1.0 finns i slutet av filen medan ID3 2.0-taggar finns i början av filen. (Ibland kan filerna ha både tidigare och senare versioner av taggarna på samma ställe.) Om en fil som är kodad med både version 1.0- och version 2.0-taggar i början och slutet av filen anropas metoden id3Handler()
två gånger. Först läses version 2.0 och sedan version 1.0. Om det bara finns ID3 1.0-taggar är informationen tillgänglig via ID3-egenskaperna, till exempel id3.songname
. För ID3 2.0 hämtar egenskapen id3.TITS
låttiteln med den nya taggen (TITS).
Observera att ingen felhantering har skrivits för det här exemplet och om ID3-innehållet är långt kanske inte resultatet får plats i det synliga området.
package { import flash.display.Sprite; import flash.media.Sound; import flash.net.URLRequest; import flash.media.ID3Info; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.Event; public class Sound_id3Example extends Sprite { private var snd:Sound = new Sound(); private var myTextField:TextField = new TextField(); public function Sound_id3Example() { snd.addEventListener(Event.ID3, id3Handler); snd.load(new URLRequest("mySound.mp3")); } private function id3Handler(event:Event):void { var id3:ID3Info = snd.id3; myTextField.autoSize = TextFieldAutoSize.LEFT; myTextField.border = true; myTextField.appendText("Received ID3 Info: \n"); for (var propName:String in id3) { myTextField.appendText(propName + " = " + id3[propName] + "\n"); } myTextField.appendText("\n" + "Artist: " + id3.artist + "\n"); myTextField.appendText("Song name: " + id3.songName + "\n"); myTextField.appendText("Album: " + id3.album + "\n\n"); this.addChild(myTextField); } } }
isBuffering | egenskap |
isBuffering:Boolean
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Returnerar buffringsläget för externa MP3-filer. Om värdet är true
är eventuell uppspelning för tillfället inaktiverad medan objektet väntar på mer data.
Implementering
public function get isBuffering():Boolean
isURLInaccessible | egenskap |
isURLInaccessible:Boolean
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10.1, AIR 2 |
Anger om egenskapen Sound.url
har trunkerats. När värdet isURLInaccessible
är true
är värdet Sound.url
bara domänen för den slutliga webbadress varifrån ljudet lästes in. Egenskapen är till exempel trunkerad om ljudet läses in från http://www.adobe.com/assets/hello.mp3
och egenskapen Sound.url
har värdet http://www.adobe.com
. Värdet för isURLInaccessible
är bara true
om alla följande påståenden stämmer:
- En HTTP-omdirigering inträffade när ljudfilen lästes in.
- Den SWF-fil som anropar
Sound.load()
är från en annan domän än ljudets slutliga webbadress. - Den SWF-fil som anropar
Sound.load()
har inte behörighet att komma åt ljudfilen. Behörighet för ljudfilen ges på samma sätt som för egenskapenSound.id3
: skapa en principfil och använd egenskapenSoundLoaderContext.checkPolicyFile
.
Obs! Egenskapen isURLInaccessible
har lagts till i Flash Player 10.1 och AIR 2.0, men den här egenskapen är tillgänglig för alla SWF-filer oavsett version när Flash-miljön stöder den. Om du använder vissa utvecklingsverktyg i s.k. strikt läge kan det därför orsaka ett kompileringsfel. Du kan undvika felet genom att använda den indirekta syntaxen mySound["isURLInaccessible"]
eller inaktivera strikt läge. Om du använder Flash Professional CS5 eller Flex SDK 4.1 kan du använda och kompilera detta API för körningsmiljöer som släpptes före Flash Player 10.1 och AIR 2.
För programinnehåll i AIR är värdet på den här egenskapen alltid false
.
Implementering
public function get isURLInaccessible():Boolean
Relaterade API-element
length | egenskap |
url | egenskap |
url:String
[skrivskyddad] Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
URL:en som ljudet lästes in från. Den här egenskapen används bara på Sound-objekt som lästs in med metoden Sound.load()
. För Sound-objekt som associeras med en ljudresurs från en SWF-fils bibliotek är värdet för egenskapen url
null
.
Fösta gången du anropar Sound.load()
har url
-egenskapen till en början ett värde på null
eftersom man inte känner till den slutliga URL:en än. Egenskapen url
kommer att ha ett värde som inte är null så fort en open
-händelse skickas från Sound-objektet.
Egenskapen url
innehåller den slutliga, absoluta URL:en som ett ljud läses in från. Värdet för url
är oftast samma som värdet som skickas till parametern stream
för Sound.load()
. Om du skickade en relativ URL till Sound.load()
representerar värdet för url
-egenskapen den absoluta URL:en. Om den ursprungliga URL-begäran dessutom omdirigeras av en HTTP-server, återspeglar värdet för url
-egenskapen den slutliga URL:en som ljudfilen i själva verket har lästs in från. Denna rapportering av en absolut, slutlig URL motsvarar beteendet för LoaderInfo.url
.
I vissa fall trunkeras värdet på egenskapen url
. Läs mer om detta i avsnittet om egenskapen isURLInaccessible
.
Implementering
public function get url():String
Relaterade API-element
Sound | () | Konstruktor |
public function Sound(stream:URLRequest = null, context:SoundLoaderContext = null)
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Skapar ett nytt Sound-objekt. Om du skickar ett giltigt URLRequest-objekt till Sound-konstruktorn anropas funktionen load()
för Sound-objektet automatiskt. Om du skickar ett giltigt URLRequest-objekt till Sound-konstruktorn måste du anropa funktionen load()
för Sound-objektet, annars läses flödet inte in.
Om load()
har anropats för ett Sound-objekt går det inte att senare läsa in en annan ljudfil till det Sound-objektet. Om du vill läsa in en annan ljudfil skapar du ett nytt Sound-objekt.
load()
använda händelsehanteraren sampleData
för att läsa in ljud dynamiskt till Sound-objektet.
Parametrar stream:URLRequest (default = null ) — URL:en som pekar på en extern MP3-fil.
| |
context:SoundLoaderContext (default = null ) — Ett valfritt SoundLoader-kontextobjekt som kan definiera bufferttiden (det minsta antal millisekunder med MP3-data som ska lagras i Sound-objektets buffert) och ange huruvida programmet ska söka efter en korsdomänprincipfil före inläsningen av ljudet.
|
close | () | metod |
public function close():void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Stänger flödet så att eventuell datanedladdning avbryts. Det går inte att läsa några data från flödet efter att close()
-metoden har anropats.
Utlöser
IOError — Dataflödet kunde inte stängas eller så var det inte öppet.
|
Exempel ( Så här använder du exemplet )
Sound.close()
och direktuppspelningen av ljudet stoppas.
I konstruktorn skapas ett textfält för start- och stoppknappen. När användaren klickar på textfältet anropas metoden clickHandler()
. Den hanterar start och stopp för ljudfilen. Beroende på nätverksanslutningen och på när användaren klickar på stoppknappen kan en stor del av filen redan ha lästs in och det kan ta en stund innan ljuduppspelningen avbryts. Ett try...catch
-block används för att hantera eventuella IO-fel som kan uppstå när flödet stängs. Om ljudet till exempel läses in från en lokal katalog och inte direktuppspelas uppstår fel 2029, vilket innebär "URLStream-objektet har inget öppet dataflöde".
package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.errors.IOError; import flash.events.IOErrorEvent; public class Sound_closeExample extends Sprite { private var snd:Sound = new Sound(); private var button:TextField = new TextField(); private var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); public function Sound_closeExample() { button.x = 10; button.y = 10; button.text = "START"; button.border = true; button.background = true; button.selectable = false; button.autoSize = TextFieldAutoSize.LEFT; button.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(button); } private function clickHandler(e:MouseEvent):void { if(button.text == "START") { snd.load(req); snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); button.text = "STOP"; } else if(button.text == "STOP") { try { snd.close(); button.text = "Wait for loaded stream to finish."; } catch (error:IOError) { button.text = "Couldn't close stream " + error.message; } } } private function errorHandler(event:IOErrorEvent):void { button.text = "Couldn't load the file " + event.text; } } }
extract | () | metod |
public function extract(target:ByteArray, length:Number, startPosition:Number = -1):Number
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
Extraherar ljuddata i raw-format från ett Sound-objekt.
Denna metod är utformad för att användas när du arbetar med dynamiskt skapade ljud. Den använder en funktion som du tilldelar till sampleData
-händelsen för ett annat Sound-objekt. Det innebär att du kan använda den här metoden för att extrahera ljuddata från ett Sound-objekt. Sedan kan du skriva dessa data till den bytearray som ett annat Sound-objekt använder för att strömma dynamiskt ljud.
Ljuddata placeras i byte-arrayen med början från den aktuella positionen i byte-arrayen. Ljuddata visas alltid som 44 100 Hz Stereo. Samplingstypen är ett 32-bitars flyttalsvärde som kan konverteras till ett Number-objekt med hjälp av ByteArray.readFloat()
.
Parametrar
target:ByteArray — Ett ByteArray-objekt i vilket de extraherade ljudsamplingarna placeras.
| |
length:Number — Antal ljudsamplingar som ska extraheras. En sampling innehåller både vänster och höger kanal, vilket innebär två 32-bitars flyttalsvärden.
| |
startPosition:Number (default = -1 ) — Samplingen där extraheringen börjar. Om du inte anger ett värde startar det första anropet till Sound.extract() vid början av ljudet. Påföljande anrop utan värde för startPosition angivet går sekventiellt genom filen.
|
Number — Det antal samplingar som skrivs till den ByteArray som anges i parametern target .
|
Relaterade API-element
Exempel ( Så här använder du exemplet )
extract()
från klassen Sound för att komma åt ljuddata.
Dessa mp3-data läses in i Sound-objektet sourceSnd
. När programmet läser in mp3-data, anropar det funktionen loaded()
(händelsehanteraren för complete
-händelsen för sourceSnd
-objektet). Ett andra Sound-objekt, outputSound
, används för att spela upp det ändrade ljudet. Objektet outputSound
har en sampleData
-händelseavlyssnare. Objektet skickar därför periodiskt sampleData
-händelser när du anropar dess play()
-metod. Metoden upOctave()
returnerar en bytearray med ändrade ljuddata som baseras på dina källjuddata. Den returnerar ljud som är en oktav högre genom att hoppa över varannan ljudsampling i dess källdata. Händelsehanteraren för sampleData
-händelsen skriver den returnerade bytearrayen till data
-egenskapen för outputSound
-objektet. data
-bytearrayen läggs till utdataljuddata för outputSound
-objektet.
Testa det här exemplet genom att lägga till en test.mp3-fil i samma katalog som SWF-filen.
var sourceSnd:Sound = new Sound(); var outputSnd:Sound = new Sound(); var urlReq:URLRequest = new URLRequest("test.mp3"); sourceSnd.load(urlReq); sourceSnd.addEventListener(Event.COMPLETE, loaded); function loaded(event:Event):void { outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound); outputSnd.play(); } function processSound(event:SampleDataEvent):void { var bytes:ByteArray = new ByteArray(); sourceSnd.extract(bytes, 4096); event.data.writeBytes(upOctave(bytes)); } function upOctave(bytes:ByteArray):ByteArray { var returnBytes:ByteArray = new ByteArray(); bytes.position = 0; while(bytes.bytesAvailable > 0) { returnBytes.writeFloat(bytes.readFloat()); returnBytes.writeFloat(bytes.readFloat()); if (bytes.bytesAvailable > 0) { bytes.position += 8; } } return returnBytes; }
load | () | metod |
public function load(stream:URLRequest, context:SoundLoaderContext = null):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Initierar inläsning av en extern MP3-fil från den angivna URL:en. Om du skickar ett giltigt URLRequest-objekt till Sound-konstruktorn anropas funktionen Sound.load()
. Du behöver bara anropa Sound.load()
om du inte skickar ett giltigt URLRequest-objekt till Sound-konstruktorn eller om du skickar ett null
-värde.
Om load()
har anropats för ett Sound-objekt går det inte att senare läsa in en annan ljudfil till det Sound-objektet. Om du vill läsa in en annan ljudfil skapar du ett nytt Sound-objekt.
Överväg följande säkerhetsmodell när du använder den här metoden:
- Det är inte tillåtet att anropa
Sound.load()
om den anropande filen finns i filsystemets lokala sandlåda och ljudet kommer från en sandlåda i ett nätverk. - Åtkomst från sandlådan lokal-tillförlitlig eller sandlådan lokal-med-nätverk kräver tillstånd från en webbplats i en URL-principfil.
- Du kan inte ansluta till vanligtvis reserverade portar. Du hittar en fullständig lista över spärrade portar i avsnittet ”Begränsa nätverks-API:er” i Utvecklarhandbok för Adobe ActionScript 3.0.
- Du kan förhindra att den här metoden används av en SWF-fil genom att ställa in parametern
allowNetworking
iobject
- ochembed
-taggarna på den HTML-sida där SWF-innehållet finns.
Om du i Flash Player 10 eller senare använder en multipart-innehållstyp (till exempel ”multipart/form-data”) som innehåller en överföring (vilket indikeras av en ”filename”-parameter i ett ”content-disposition”-huvud inuti POST), gäller de säkerhetsregler som används för överföringar också för POST-åtgärden.
- POST-åtgärden måste utföras som ett svar på en användarinitierad åtgärd som exempelvis en musklickning eller en tangenttryckning.
- Om POST-åtgärden är för korsdomän (POST-målet ligger inte på samma server som SWF-filen som skickar POST-begäran), måste målservern ha en URL-policyfil som tillåter korsdomänåtkomst.
För en multipart-innehållstyp måste också syntaxen vara giltig (enligt RFC2046-standarderna). Om syntaxen verkar vara ogiltig, gäller samma regler för POST-åtgärden som för överföringar.
I Adobe AIR begränsas inte innehåll i säkerhetssandlådan application
(innehåll som installeras med AIR-programmet) av de här säkerhetsbegränsningarna.
Mer information om säkerhet finns i avsnittet Security på Flash Player Developer Center.
Parametrar
stream:URLRequest — En URL som pekar på en extern MP3-fil.
| |
context:SoundLoaderContext (default = null ) — Ett valfritt SoundLoader-kontextobjekt som kan definiera bufferttiden (det minsta antal millisekunder med MP3-data som ska lagras i Sound-objektets buffert) och ange huruvida programmet ska söka efter en korsdomänprincipfil före inläsningen av ljudet.
|
Utlöser
IOError — Inläsningen misslyckades på grund av ett nätverksfel.
| |
SecurityError — Lokala otillförlitliga filer kanske inte kan kommunicera med Internet. Du kan undvika problemet genom att klassificera om filen som lokal med nätverkstjänst eller tillförlitlig.
| |
SecurityError — Du kan inte ansluta till vanligtvis reserverade portar. Du hittar en fullständig lista över spärrade portar i avsnittet ”Begränsa nätverks-API:er” i Utvecklarhandbok för Adobe ActionScript 3.0.
| |
IOError — Egenskapen digest för objektet stream är inte null . Du bör endast ange egenskapen digest för ett URLRequest-objekt när du anropar metoden URLLoader.load() när du läser in en SWZ-fil (en plattformskomponent för Adobe).
|
Exempel ( Så här använder du exemplet )
I konstruktorn skapas ett URLRequest
-objekt för att identifiera platsen för ljudfilen, som är en poddsändning från Adobe. Filen läses in i ett try...catch
-block för att eventuella fel som kan uppstå i filinläsningen ska kunna hanteras. Om ett IO-fel skulle uppstå anropas även metoden errorHandler()
och felmeddelandet skrivs i textfältet som är avsett för förloppsrapporten. När en inläsning pågår skickas en ProgressEvent.PROGRESS
-händelse och metoden progressHandler()
anropas. Här används ProgressEvent.PROGRESS
-händelsen som en timer för att beräkna inläsningens förlopp.
Metoden progressHandler()
delar bytesLoaded
-värdet som skickas med ProgressEvent
-objektet med bytesTotal
-värdet för beräkna hur många procent av ljuddata som har lästs in. Sedan visas värdena i textfältet. (Observera att om filen är liten, chachad eller finns i en lokal katalog kanske förloppet går för fort för att märkas.)
package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; public class Sound_loadExample extends Sprite { private var snd:Sound = new Sound(); private var statusTextField:TextField = new TextField(); public function Sound_loadExample(){ statusTextField.autoSize = TextFieldAutoSize.LEFT; var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); try { snd.load(req); snd.play(); } catch (err:Error) { trace(err.message); } snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); snd.addEventListener(ProgressEvent.PROGRESS, progressHandler); this.addChild(statusTextField); } private function progressHandler(event:ProgressEvent):void { var loadTime:Number = event.bytesLoaded / event.bytesTotal; var LoadPercent:uint = Math.round(100 * loadTime); statusTextField.text = "Sound file's size in bytes: " + event.bytesTotal + "\n" + "Bytes being loaded: " + event.bytesLoaded + "\n" + "Percentage of sound file that is loaded " + LoadPercent + "%.\n"; } private function errorHandler(errorEvent:IOErrorEvent):void { statusTextField.text = "The sound could not be loaded: " + errorEvent.text; } } }
loadCompressedDataFromByteArray | () | metod |
public function loadCompressedDataFromByteArray(bytes:ByteArray, bytesLength:uint):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 3, Flash Player 11 |
läs in MP3-ljudinformation från ett ByteArray-objekt till ett Sound-objekt. Informationen kommer att läsas från den aktuella ByteArray-positionen och kommer att lämna ByteArray-positionen i slutet av den angivna bytelängden när allt är klart. Om MP3-ljudinformationen innehåller ID3-data, kommer ID3-händelser att skickas under detta funktionsanrop. Den här funktionen kommer att generera ett undantag om ByteArray-objektet inte innehåller tillräckligt med data.
Parametrar
bytes:ByteArray | |
bytesLength:uint |
loadPCMFromByteArray | () | metod |
public function loadPCMFromByteArray(bytes:ByteArray, samples:uint, format:String = "float", stereo:Boolean = true, sampleRate:Number = 44100.0):void
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 3, Flash Player 11 |
Läs in PCM 32-bitars flyttalsljudinformation för ett ByteArray-objekt till ett Sound-objekt. Informationen kommer att läsas från den aktuella ByteArray-positionen och lämna ByteArray-positionen i slutet av den angivna sampellängden fördelad på antingen en kanal eller två kanaler om stereoflaggan är inställd när allt är klart.
Från och med Flash Player 11.8 är mängden ljuddata som kan skickas till den här funktionen begränsad. För SWF-versioner från och med 21 genererar den här funktionen ett undantagsfel om mängden ljuddata som skickas till den är mer än 1 800 sekunder. Det betyder att samples/sampleRate bör vara mindre än eller lika med 1 800. För SWF-versioner tidigare än 21 uppstår ett tyst fel i körningen om mängden ljuddata är mer än 12 000 sekunder. Detta är endast för bakåtkompatibilitet.
Den här funktionen kommer att generera ett undantag om ByteArray-objektet inte innehåller tillräckligt med data.
Parametrar
bytes:ByteArray | |
samples:uint | |
format:String (default = "float ")
| |
stereo:Boolean (default = true )
| |
sampleRate:Number (default = 44100.0 )
|
play | () | metod |
public function play(startTime:Number = 0, loops:int = 0, sndTransform:flash.media:SoundTransform = null):SoundChannel
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Skapar ett nytt SoundChannel-objekt som ska spela upp ljudet. Den här metoden returnerar ett SoundChannel-objekt, vilket du får åtkomst när du vill stoppa ljudet och justera volymen. (Om du vill kontrollera volymen, panoreringen och balansen går du till SoundTransform-objektet som tilldelats ljudkanalen.)
Parametrar
startTime:Number (default = 0 ) — Den ursprungliga positionen (i millisekunder) som uppspelningen ska starta på.
| |
loops:int (default = 0 ) — Anger hur många gånger ett ljud går tillbaka i en slinga till startTime -värdet innan uppspelningen stoppas av ljudkanalen.
| |
sndTransform:flash.media:SoundTransform (default = null ) — Det ursprungliga SoundTransform-objekt som är tilldelat ljudkanalen.
|
SoundChannel — Ett SoundChannel-objekt som du använder för att kontrollera ljudet. Den här metoden returnerar null om du inte har något ljudkort eller om du inte har några ljudkanaler kvar. Högsta antal ljudkort som finns tillgängliga samtidigt är 32.
|
Relaterade API-element
Exempel ( Så här använder du exemplet )
Konstruktorn anropar metoden Sound.load()
för att börja läsa in ljuddata. Sedan anropas metoden Sound.play()
, som börjar spela upp ljudet så snart tillräckligt med data har lästs in. Metoden Sound.play()
returnerar ett SoundChannel-objekt som kan användas för att styra ljuduppspelningen. I textfältet visas instruktionerna. För att det innehåll användaren vill börja spela upp vid säkert ska ha lästs in, skapas och visas Sprite-objektet bar
efter att hela filen har lästs in. En Event.COMPLETE
-händelse skickas när filen har lästs in, vilket aktiverar metoden completeHandler()
. Metoden completeHandler()
skapar sedan stapeln och lägger till den i visningslistan. (Ett Sprite-objekt används i stället för ett Shape-objekt för interaktivitetens skull.) När användaren klickar på stapeln anropas metoden clickHandler()
.
I metoden clickHandler()
avgör x-koordinaten för användarens klick, event.localX
, var användaren vill att filen ska börja spelas upp. Eftersom stapeln är 100 pixlar och börjar vid x-koordinaten 100 pixlar är det lätt att avgöra en positionens procentvärde. Eftersom filen har lästs in är ljudfilens length
-egenskap lika med hela filens längd i millisekunder. Med hjälp av ljudfilens längd och positionen på linjen beräknas en startposition för ljudfilen. När ljuduppspelningen har stoppats, startar den om från den valda startpositionen, som skickas som startTime
-parameter till metoden play()
.
package { import flash.display.Sprite; import flash.display.Graphics; import flash.events.MouseEvent; import flash.media.Sound;; import flash.net.URLRequest; import flash.media.SoundChannel; import flash.events.ProgressEvent; import flash.events.Event; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.IOErrorEvent; public class Sound_playExample1 extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel = new SoundChannel(); private var infoTextField:TextField = new TextField(); public function Sound_playExample1() { var req:URLRequest = new URLRequest("MySound.mp3"); infoTextField.autoSize = TextFieldAutoSize.LEFT; infoTextField.text = "Please wait for the file to be loaded.\n" + "Then select from the bar to decide where the file should start."; snd.load(req); channel = snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); snd.addEventListener(Event.COMPLETE, completeHandler); this.addChild(infoTextField); } private function completeHandler(event:Event):void { infoTextField.text = "File is ready."; var bar:Sprite = new Sprite(); bar.graphics.lineStyle(5, 0xFF0000); bar.graphics.moveTo(100, 100); bar.graphics.lineTo(200, 100); bar.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(bar); } private function clickHandler(event:MouseEvent):void { var position:uint = event.localX; var percent:uint = Math.round(position) - 100; var cue:uint = (percent / 100) * snd.length; channel.stop(); channel = snd.play(cue); } private function errorHandler(errorEvent:IOErrorEvent):void { infoTextField.text = "The sound could not be loaded: " + errorEvent.text; } } }
I konstruktorn läses ljudet in och det enkla rektangulära Sprite-objektet button
skapas. (Ett Sprite-objekt används i stället för ett Shape-objekt för interaktivitetens skull.) Här antas ljudfilen finnas i samma katalog som SWF-filen. (Det finns ingen felhantering för det här exemplet.)
Två händelseavlyssnare skapas för att reagera på enstaka musklick och dubbelklick. Om användaren klickar en gång anropas metoden clickHandler()
och ljudet spelas upp. Om användaren dubbelklickar på knappen anropas metoden doubleClickHandler()
och ljudfilen spelas upp två gånger. Det andra argumentet i metoden play()
ställs in på 1
, vilket innebär att ljudet kommer att gå tillbaka till starttiden en gång för att spelas upp igen. Starttiden (det första argumentet) ställs in på 0
, vilket innebär att filen ska spelas upp från början.
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.media.Sound; import flash.net.URLRequest; public class Sound_playExample2 extends Sprite { private var button:Sprite = new Sprite(); private var snd:Sound = new Sound(); public function Sound_playExample2() { var req:URLRequest = new URLRequest("click.mp3"); snd.load(req); button.graphics.beginFill(0x00FF00); button.graphics.drawRect(10, 10, 50, 30); button.graphics.endFill(); button.addEventListener(MouseEvent.CLICK, clickHandler); button.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler); this.addChild(button); } private function clickHandler(event:MouseEvent):void { snd.play(); } private function doubleClickHandler(event:MouseEvent):void { snd.play(0, 2); } } }
I konstruktorn läses filen in i ett try...catch
-block för att eventuella fel som kan uppstå i filinläsningen ska kunna hanteras. En avlyssnare läggs till i ljudobjektet för att svara på en IOErrorEvent
-händelse genom att anropa metoden errorHandler()
. En annan avlyssnare läggs till för huvudprogrammet. Den ska svara på en Event.ENTER_FRAME
-händelse, vilket används som tidsmekanism för att visa uppspelningsförloppet. Slutligen läggs en tredje avlyssnare till för ljudkanalen. Den ska svara på en Event.SOUND_COMPLETE
-händelse (när hela ljudet har spelats upp) genom att anropa metoden soundCompleteHandler()
. Metoden soundCompleteHandler()
tar också bort händelseavlyssnaren för händelsen Event.ENTER_FRAME
.
Metoden enterFrameHandler()
delar bytesLoaded
-värdet som skickas med ProgressEvent
-objektet med bytesTotal
-värdet för beräkna hur många procent av ljuddata som har lästs in. Procentandelen ljuddata som spelas upp kan beräknas genom att värdet för ljudkanalens position
-egenskap delas med ljudfilens totala längd. Men om ljudet inte har lästs in helt visar ljudobjektets length
-egenskap bara den del av ljudfilen som har lästs in. En uppskattning av hela ljudfilens längd beräknas genom att värdet för det aktuella ljudobjektets length
delas med värdet för bytesLoaded
-egenskapen delat med egenskapen bytesTotal
.
Observera att om filen är liten, chachad eller finns i en lokal katalog kanske inläsningsförloppet går för fort för att märkas. Fördröjningen från att ljudfilen börjar läsas in till att inlästa data börjar spelas upp avgörs av värdet för egenskapen SoundLoaderContext.buffertime
. Standardvärdet är 1000 millisekunder och kan ändras.
package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundChannel; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.Event; import flash.events.IOErrorEvent; public class Sound_playExample3 extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel; private var statusTextField:TextField = new TextField(); public function Sound_playExample3(){ statusTextField.autoSize = TextFieldAutoSize.LEFT; var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); try { snd.load(req); channel = snd.play(); } catch (err:Error) { trace(err.message); } snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); addEventListener(Event.ENTER_FRAME, enterFrameHandler); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); this.addChild(statusTextField); } private function enterFrameHandler(event:Event):void { var loadTime:Number = snd.bytesLoaded / snd.bytesTotal; var loadPercent:uint = Math.round(100 * loadTime); var estimatedLength:int = Math.ceil(snd.length / (loadTime)); var playbackPercent:uint = Math.round(100 * (channel.position / estimatedLength)); statusTextField.text = "Sound file's size is " + snd.bytesTotal + " bytes.\n" + "Bytes being loaded: " + snd.bytesLoaded + "\n" + "Percentage of sound file that is loaded " + loadPercent + "%.\n" + "Sound playback is " + playbackPercent + "% complete."; } private function errorHandler(errorEvent:IOErrorEvent):void { statusTextField.text = "The sound could not be loaded: " + errorEvent.text; } private function soundCompleteHandler(event:Event):void { statusTextField.text = "The sound has finished playing."; removeEventListener(Event.ENTER_FRAME, enterFrameHandler); } } }
complete | Händelse |
flash.events.Event
egenskap Event.type =
flash.events.Event.COMPLETE
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Skickas när alla data är inlästa.
Event.COMPLETE
-konstanten definierar värdet på type
-egenskapen i ett complete
-händelseobjekt.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
cancelable | false ; det finns inget standardbeteende att avbryta. |
currentTarget | Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. |
target | Det nätverksobjekt som har lästs in. |
Relaterade API-element
id3 | Händelse |
flash.events.Event
egenskap Event.type =
flash.events.Event.ID3
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Skickas av ett Sound-objekt när ID3-data finns tillgängligt för ett MP3-ljud.
Event.ID3
-konstanten definierar värdet på type
-egenskapen i ett id3
-händelseobjekt.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
cancelable | false ; det finns inget standardbeteende att avbryta. |
currentTarget | Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. |
target | Sound-objektet som läser in den MP3 som ID3-data nu är tillgänglig för. target är inte alltid det objekt i visningslistan som har registrerat händelseavlyssnaren. Använd egenskapen currentTarget om du vill komma åt det objekt i visningslistan som bearbetar händelsen. |
Relaterade API-element
ioError | Händelse |
flash.events.IOErrorEvent
egenskap IOErrorEvent.type =
flash.events.IOErrorEvent.IO_ERROR
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Skickas om ett in- eller utdatafel orsakar en misslyckad inläsningsåtgärd.
Definierar värdet för ettioError
-händelseobjekts type
-egenskap.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
cancelable | false ; det finns inget standardbeteende att avbryta. |
currentTarget | Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. |
errorID | Ett referensnummer som associeras med det specifika felet (enbart AIR). |
target | Objektet är med om ett in-/utdatafel. |
text | Text som visas som felmeddelande. |
Relaterade API-element
open | Händelse |
flash.events.Event
egenskap Event.type =
flash.events.Event.OPEN
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Skickas när en inläsning initieras.
Event.OPEN
-konstanten definierar värdet på type
-egenskapen i ett open
-händelseobjekt.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
cancelable | false ; det finns inget standardbeteende att avbryta. |
currentTarget | Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. |
target | Det nätverksobjekt som har öppnat en anslutning. |
Relaterade API-element
progress | Händelse |
flash.events.ProgressEvent
egenskap ProgressEvent.type =
flash.events.ProgressEvent.PROGRESS
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Skickas när data tas emot som ett inläsningsförlopp.
Definierar värdet för ettprogress
-händelseobjekts type
-egenskap.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
bytesLoaded | Antalet objekt eller byte som har lästs in när avlyssnaren bearbetar händelsen. |
bytesTotal | Det totala antalet objekt eller byte som kommer att ha lästs in om inläsningen lyckas. |
cancelable | false ; det finns inget standardbeteende att avbryta. |
currentTarget | Det objekt som aktivt behandlar Event-objektet med en händelseavlyssnare. |
target | Objektet rapporterar förlopp. |
Relaterade API-element
sampleData | Händelse |
flash.events.SampleDataEvent
egenskap SampleDataEvent.type =
flash.events.SampleDataEvent.SAMPLE_DATA
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | Flash Player 10, AIR 1.5 |
Skickas när miljön begär nya ljuddata.
Definierar värdet för ettSampleDataEvent
-händelseobjekts type
-egenskap.
Den här händelsen har följande egenskaper:
Egenskap | Värde |
---|---|
bubbles | false |
cancelable | false ; det finns inget standardbeteende att avbryta. |
position | Platsen som ljuddata kommer ifrån. |
Exempel ( Så här använder du exemplet )
var mySound:Sound = new Sound(); function sineWaveGenerator(event:SampleDataEvent):void { for ( var c:int=0; c<8192; c++ ) { event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); } } mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); mySound.play();
Relaterade API-element
package { import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; public class SoundExample extends Sprite { private var url:String = "MySound.mp3"; private var song:SoundChannel; public function SoundExample() { var request:URLRequest = new URLRequest(url); var soundFactory:Sound = new Sound(); soundFactory.addEventListener(Event.COMPLETE, completeHandler); soundFactory.addEventListener(Event.ID3, id3Handler); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler); soundFactory.load(request); song = soundFactory.play(); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function id3Handler(event:Event):void { trace("id3Handler: " + event); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: " + event); } } }
Tue Jun 12 2018, 01:40 PM Z