闪光 - 声音 - 在swf中嵌入外部声音

时间:2011-04-29 14:07:42

标签: flash actionscript-3

您好我正在创建一个拥有超过200种声音的游戏,所以我不能将声音放在我的图像中闪存然后将它们作为类进行实例化并播放它们。因为单击一个对象时播放的声音并不总是相同的。

我有这个功能来播放背景声音,输入我想要播放的歌曲的名称:

public function startMusicBack(music:String):void {

        var musicback:Sound = new Sound();
        var bgChannel:SoundChannel;
        var bgTransform:SoundTransform = new SoundTransform(1); 

        var req:URLRequest = new URLRequest(music); 



        try {

            musicback.load(req);

            //parar todos os sons
            SoundMixer.stopAll();
            // vou transformar o som para ele ficar mais baixo
            bgTransform.volume = .05;
            //faço o play do som mas meto num soun
            bgChannel= musicback.play(0,999,bgTransform);
        }
        catch (err:Error) {
            trace(err.message);
        }

}

好的,这个工作正常,直到我尝试导出swf文件,然后我收到错误消息,因为音乐的路径不正确。

好的我的问题是,我怎样才能将过去与swf中的声音嵌入或者如何在运行时调用flash库中的音乐?

1 个答案:

答案 0 :(得分:2)

您可以使用Embed标记将声音直接嵌入SWF:

// the path here is relative to the *File*, not the SWF
[Embed(source = "../../../../../assets/someSound.mp3", mimeType = "audio/mpeg")]
public var mySound:Class;

然后你可以创建一个新的声音:

var s:Sound = new mySound;

虽然有200个声音,但这可能会让你的SWF变得非常庞大,并使你的编译时间变得很麻烦。对于您遇到的问题,它看起来就像您的音乐文件的路径是错误的。如果您有这样的项目布局:

parentFolder
    - assets
        - mySound.mp3
    - bin
        - output.swf
    - src
        - subFolder
            - Main.as

然后在您的主课程中,您将路径传递给相对于 * SWF * 文件(即output.swf)的声音,因此请调用您的函数:

this.startMusicBack( "../mySound.mp3" );