I figured it out. I don't need getDefinitionByName at all since I already
have the class references in the variables. This works:
[Embed(source="beep-1.mp3")]private var beep1:Class;
public function playSound(sSoundName:String):void
{
var classRef:Class;
classRef = this[sSoundName];
var s:Sound = new classRef as Sound;
s.play();
}//playSound
Tracy Spratt,
Lariat Services, development services available
_____
From: [email protected] [mailto:[email protected]] On
Behalf Of Tracy Spratt
Sent: Saturday, July 11, 2009 11:35 AM
To: [email protected]
Subject: RE: [flexcoders] Re: Trying to make SoundManager class using
getDefinitionByName
Thanks, Steve, I may need to go that way.
I am trying to do it with embedded sounds, because the files are tiny, and
it is an AIR app so bandwidth is not an issue.
Worst case is I make a switch function, but I am striving for something a
bit easier to maintain.
Tracy Spratt,
Lariat Services, development services available
_____
From: [email protected] [mailto:[email protected]] On
Behalf Of valdhor
Sent: Friday, July 10, 2009 9:47 AM
To: [email protected]
Subject: [flexcoders] Re: Trying to make SoundManager class using
getDefinitionByName
Hmmm... You got me.
This is what I came up with...
package assets.sounds
{
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
public class SoundManager
{
private var sound:Sound;
private var channel:SoundChannel;
public function playSound(sSoundName:String):void
{
if(channel != null)
{
channel.stop();
}
sound = new Sound();
var req:URLRequest = new URLRequest("assets/sounds/" +
sSoundName + ".mp3");
sound.load(req);
channel = sound.play();
}//playSound
}//class SoundManager
}//package assets.sounds
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="horizontal"
creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import assets.sounds.SoundManager;
private var soundManager:SoundManager
private function onCreationComplete():void
{
soundManager = new SoundManager();
}
]]>
</mx:Script>
<mx:Button label="Play Beep-1"
click="soundManager.playSound('beep-1')"/>
<mx:Button label="Play Beep-2"
click="soundManager.playSound('beep-2')"/>
<mx:Button label="Play Beep-3"
click="soundManager.playSound('beep-3')"/>
</mx:Application>
--- In [email protected], "Tracy Spratt" <tr...@...> wrote:
>
> I am trying to make a sound manager class that will simplify playing a
sound by using an id string. I have embedded the sound files, but am havign
trouble getting the Sound object initialized. I get an error, "Variable
beep1 is not defined" though cllearly it is.
>
> I suspect I am misusing getDefinitionByName. If there is an easier/better
way, I am open to that as well. The full class code is below.
>
> Tracy
>
> package assets.sounds
> {
> import flash.utils.getDefinitionByName;
> import flash.media.Sound;
>
> public class SoundManager
> {
> [Embed(source="beep-1.mp3")]private var beep1:Class;
> [Embed(source="beep-2.mp3")]private var beep2:Class;
> [Embed(source="beep-3.mp3")]private var beep3:Class;
>
>
> public function playSound(sSoundName:String):void
> {
> var classRef:Class = getDefinitionByName(sSoundName) as Class; //Variable
beep1 is not defined.
> var s:Sound = new classRef as Sound;
> s.play();
> }//playSound
> }//class SoundManager
> }//package assets.sounds
>