Arbeta med inbäddade ljud

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Inbäddade ljud i stället för ljud som lästs in från en extern fil är mycket användbara när det gäller små ljud som används som indikatorer i programmets användargränssnitt, t.ex. ljud som spelas upp när du klickar på en knapp.

När du bäddar in en ljudfil i programmet, ökar storleken på den slutliga SWF-filen med storleken på ljudfilen. M.a.o. kan SWF-filen växa till oönskad storlek när du bäddar in stora ljudfiler i programmet.

Den exakta metoden att bädda in en ljudfil i programmets SWF-fil varierar beroende på utvecklingsmiljön.

Använda en inbäddad fil i Flash

Med Flash-utvecklingsverktyget kan du importera ljud i ett antal ljudformat och lagra dem som symboler i biblioteket. Sedan kan du koppla dem till bildrutor på tidslinjen eller till bildrutorna för ett knappläge, använda dem med beteenden eller använda dem direkt i ActionScript-koden. I det här avsnittet beskrivs hur du använder inbäddade ljud i ActionScript-kod med Flash-utvecklingsverktyget. Mer information om andra sätt att använda inbäddade ljud i Flash finns i ”Importera ljud” i Använda Flash.

Så här bäddar du in en ljudfil med Flash-utvecklingsverktyget:

  1. Välj Arkiv > Importera > Importera till bibliotek, välj en ljudfil och importera den.

  2. Högerklicka på namnet för den importerade filen i bibliotekspanelen och välj Egenskaper. Klicka på kryssrutan Exportera för ActionScript.

  3. I fältet Klass anger du namnet som du vill använda när du refererar till det inbäddade ljudet i ActionScript. Som standard används ljudfilsnamnet i det här fältet. Om filnamnet innehåller en punkt som i namnet ”DrumSound.mp3” måste du ändra det till någonting liknande ”DrumSound”; det är inte tillåtet att använda punkter i klassnamn i ActionScript. I fältet Basklass ska det fortfarande stå flash.media.Sound.

  4. Klicka på OK. Eventuellt visas en dialogruta som anger att ingen definition för basklassen hittades i klassökvägen. Klicka på OK och fortsätt. Om du anger ett klassnamn som inte överensstämmer med namnet i någon av klasserna i programmets klassökväg, genereras automatiskt en ny klass som ärver från flash.media.klassen Sound.

  5. När du vill använda det inbäddade ljudet refererar du till klassnamnet för ljudet i ActionScript. Följande kod börjar med att skapa en ny instans av den automatiskt genererade klassen DrumSound:

    var drum:DrumSound = new DrumSound(); 
    var channel:SoundChannel = drum.play();

    DrumSound är en underklass av flash.media.klassen Sound så den ärver klassen Sounds metoder och egenskaper inklusive play()-metoden som visas ovan.

Använda en inbäddad fil i Flex

Det finns flera olika sätt att bädda in ljud i ett Flex-program:

  • Använda metadatataggen [Embed]i ett skript

  • Använda direktivet @Embed i MXML för att tilldela en inbäddad resurs som en egenskap för en komponent som Button eller SoundEffect.

  • Använda direktivet @Embed i en CSS-fil

I det här avsnittet beskrivs det första alternativet: att bädda in ljud i ActionScript-kod i ett Flex-program med hjälp av [Embed]-metadatataggen.

Om du vill bädda in en resurs i ActionScript-kod använder du metadatataggen [Embed].

Placera ljudfilen i huvudkällmappen eller i en annan mapp som finns i projektets byggsökväg. När kompilatorn påträffar en Embed-metadatatagg skapas den inbäddade resursklassen. Du får tillgång till klassen via en variabel av datatypen Class som du deklarerar omedelbart efter [Embed]-metadatataggen.

I följande kod bäddas ett ljud med namnet smallSound.mp3 in och en variabel med namnet soundClass används för att lagra en referens till den inbäddade resursklassen som hör till ljudet. Koden skapar sedan en instans av den inbäddade resursklassen, byter ut den mot en instans av klassen Sound och anropar metoden play() för den instansen:

package 
{ 
    import flash.display.Sprite; 
    import flash.media.Sound; 
    import flash.media.SoundChannel; 
 
    public class EmbeddedSoundExample extends Sprite 
    { 
        [Embed(source="smallSound.mp3")] 
        public var soundClass:Class; 
         
        public function EmbeddedSoundExample() 
        { 
            var smallSound:Sound = new soundClass() as Sound; 
            smallSound.play(); 
        } 
    } 
}

Om du vill använda det inbäddade ljudet för att ställa in en egenskap för en Flex-komponent, bör det bytas ut mot en instans av mx.core.klassen SoundAsset i stället för en instans av klassen Sound. Ett liknande exempel som använder klassen SoundAsset finns i ”Inbäddade resursklasser” i Learning ActionScript 3.0.