actionscript3中的嵌入式mp3不会一直播放

时间:2012-01-10 17:14:03

标签: flash actionscript-3 audio air flash-builder

我嵌入了一个mp3文件,用作我的应用程序的背景音乐。虽然它工作正常,问题是它不播放整个音轨,它只播放它的前32秒(mp3文件是1:30分钟)。

有没有人知道为什么?

我读过here声音可能不适合支持的Flash播放器声音格式,但我不认为这是问题所在!文件不是很大,但也许我错了?

有什么想法导致问题吗?或者如何解决?代码很好,我很确定(非常简单。只需嵌入mp3,初始化所需的变量并播放声音。没什么好看的)

编辑:mp3编码为44100 KHz

编辑以下是代码,只是加入

package 
{
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.media.SoundChannel;

    public class BackgroundMusic extends Sprite
    {
        [Embed(source="swfs/bg.mp3")]       
        private var BG:Class;

        public function BackgroundMusic() 
        {   
            var backgroundMusic:Sound = new BG();
            backgroundMusic.play();
        }

    }
}

4 个答案:

答案 0 :(得分:2)

如前面提到的链接所示,问题确实存在于mp3文件本身。基本上它太大了。因此,在将其从44kHz立体声32位降低到44kHz立体声16位后,它工作正常,现在它一直运行。据说有点奇怪,我们无法嵌入更高质量的mp3文件。我认为这个问题不会是加载(而不是嵌入)的问题,但我还没有测试过它。如果这里有人知道如何在不降低mp3质量的情况下解决这个问题请分享

答案 1 :(得分:2)

嗯,自原始问题以来已经过了2年,但我遇到了同样的问题,但只有短(不到2秒)的文件。原来问题在于元数据。如果元数据表示声音长度为1秒,实际上声音为1.5秒,则Flash只会播放1秒的声音,其余声音会关闭。

我在从wav转换为mp3时未将文件中的元数据包含在内,从而解决了这个问题。

希望有人帮助。

答案 2 :(得分:0)

我很确定每次你说它都会重新开始音乐。你有可能告诉它玩几次吗?如果它总是完全是32秒,那么我不知道但是如果它总是在AROUND同一时间可能会注意你在那个时间做的事情,并检查你是否有可能再次调用play()函数。

如果您的应用程序在某处有某种30秒计时器,它绝对可以负责。

编辑:呵呵如果声音是整个应用程序中唯一存在的东西,那么别介意。但无论如何要牢记这一点。

答案 3 :(得分:0)

您的背景声音实例可能正在收集垃圾,因为您没有维护对它的引用。试试这个:

package 
{
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.media.SoundChannel;

    public class BackgroundMusic extends Sprite
    {
        [Embed(source="swfs/bg.mp3")]       
        private var BG:Class;

        private var _backgroundMusic:Sound;

        public function BackgroundMusic() 
        {   
            _backgroundMusic = new BG();
            _backgroundMusic.play();
        }
   }
}