博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sound.loadCompressedDataFromByteArray
阅读量:6617 次
发布时间:2019-06-25

本文共 5484 字,大约阅读时间需要 18 分钟。

前不久Adobe发布了Flash Player 11的release版本, Flash Player 11 带来了很多新特性, 最最红火的就是Stage3D了,但是这里讲的是这个版本的另一个新特性, 直接播放MP3数据 Sound.loadCompressedDataFromByteArray.

以往我们要播放一个mp3,必须要有一个路径才能播放, 每次想要将声音文件缓存起来,就不方便.现在Flash 提供了直接播放bytearray的API,那么就方便多了。

Sound.loadCompressedDataFromByteArray带来的便利

  • 直接播放bytearray,而不再需要url地址.
  • 可以方便的播放音频片段,而不必加载完整的mp3文件.
  • 结合URLStream类,可以方便的实现边听边存功能.
  • 可以对保存的音乐进行加密,从而保护版权. 目前只想到以上几点,不过结合这个API肯定能做更多的事。

使用FlahsPlayer11的新特性注意事项

一定要在编译器选项里添加 -swf-version=13 . 否则会运行时报错,找不到相关的API。

在FlashDevelop里设置:
Project菜单 => Properties..子菜单, 打开 Properties面板。
Compiler Options选项卡 => Additional Compiler Options。
输入 -swf-version=13 , 一路确定着出来就行了。

FlashDevelop里设置Flashplayer11编译器选项

fd-setting-flashplayer11.jpg

在FlashBuilder里设置:

Project菜单 => Properties..子菜单, 打开 Properties面板。
Flex编译器选项 => 附加的编译器参数。
添加 -swf-version=13 ,一路确定着出来就行了。

FlashBuilder里设置Flashplayer11编译器选项

fb-setting-flashplayer11.jpg

示例

请确保声卡驱动已经安装好,并且能播放声音。

 

源代码

package {    import fl.controls.TextInput;    import fl.events.ComponentEvent;    import flash.display.Sprite;    import flash.events.Event;    import flash.events.IOErrorEvent;    import flash.events.ProgressEvent;    import flash.events.SecurityErrorEvent;    import flash.media.Sound;    import flash.media.SoundChannel;    import flash.net.URLRequest;    import flash.net.URLStream;    import flash.text.TextField;    import flash.utils.ByteArray;    import flash.utils.setTimeout;    /**     * Sound.loadCompressedDataFromByteArray     * @author lite3     * @link http://www.litefeel.com     */    [SWF(width = 600, height = 170)]    public class Main extends Sprite     {        private const SOUND_URL:String = "http://www.sqcbbs.net/data/attachment/forum/music/suyan.mp3";        private var sound:Sound;        private var stream:URLStream;        private var isPlaying:Boolean;        private var sc:SoundChannel;        private var txt:TextField;        private var input:TextInput;        public function Main():void         {            initUI();            sound = new Sound();            stream = new URLStream();            stream.addEventListener(Event.COMPLETE, streamHandler);            stream.addEventListener(ProgressEvent.PROGRESS, streamHandler);            stream.addEventListener(IOErrorEvent.IO_ERROR, streamHandler);            stream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, streamHandler);            var url:String = loaderInfo.parameters.soundURL ? loaderInfo.parameters.soundURL : SOUND_URL;            input.text = url;            loadSound(null);            input.addEventListener(ComponentEvent.ENTER, loadSound);        }        private function loadSound(e:ComponentEvent):void         {            if (!input.text) return;            if (sc != null)            {                sc.removeEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);                sc.stop();                sc = null;            }            try {                stream.close();            }catch (e:Error) { }            stream.load(new URLRequest(input.text));            showText("开始加载");        }        private function streamHandler(e:Event):void         {            switch(e.type)            {                case Event.COMPLETE :                    showText("加载完成,播放中...");                    var byte:ByteArray = new ByteArray();                    stream.readBytes(byte, 4000, stream.bytesAvailable/10);                    sound.loadCompressedDataFromByteArray(byte, byte.length/2);                    playSound();                    break;                case ProgressEvent.PROGRESS :                    showText("加载进度:" + ProgressEvent(e).bytesLoaded + "/" + ProgressEvent(e).bytesTotal);                    break;                case IOErrorEvent.IO_ERROR :                    showText("加载失败");                    break;                case SecurityErrorEvent.SECURITY_ERROR :                    showText("安全沙箱限制,不能从目标网站加载数据");                    break;            }        }        private function playSound():void         {            isPlaying = true;            showText("isPlaying: " +isPlaying);            sc = sound.play();            sc.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);        }        private function soundCompleteHandler(e:Event):void        {            isPlaying = false;            showText("isPlaying: " +isPlaying);            setTimeout(playSound, 1000);        }        private function showText(text:String):void        {            txt.text = text;        }        private function initUI():void         {            txt = new TextField();            txt.mouseEnabled = false;            txt.text = "Sound.loadCompressedDataFromByteArray For Flash Player 11";            txt.width = 600;            txt.height = txt.textHeight + 4;            txt.mouseEnabled = false;            txt.autoSize = "center";            txt.y = 10;            addChild(txt);            txt = new TextField();            txt.text = "请输入MP3地址并回车,以更换MP3.";            txt.mouseEnabled = false;            txt.width = txt.textWidth + 4;            txt.height = txt.textHeight + 4;            txt.x = 10;            txt.y = 100;            addChild(txt);            input = new TextInput();            input.width = 550;            input.x = 10;            input.y = 120;            addChild(input);            txt = new TextField();            txt.mouseEnabled = false;            txt.width = 300;            txt.height = 40;            txt.x = 100;            txt.y = 50;            addChild(txt);        }    }}

转载于:https://www.cnblogs.com/lancidie/p/5104253.html

你可能感兴趣的文章
InnoDB数据页结构
查看>>
Sql日期时间格式转换大全
查看>>
WPF学习之依赖项属性
查看>>
科大讯飞平台接口的基本使用流程
查看>>
关于“结对编程”
查看>>
Ubuntu16.04下用Anaconda 安装Theano配置CUDA
查看>>
权限及权限管理
查看>>
Linux-基础一
查看>>
bzoj千题计划154:bzoj3343: 教主的魔法
查看>>
spring boot学习(2) SpringBoot 项目属性配置
查看>>
R语言 关联规则
查看>>
性能优化工具---iostat
查看>>
c++学习之路:函数重载
查看>>
TS和C#的差异
查看>>
$noip2018$游记+考后总结
查看>>
CSS选择器
查看>>
线程、进程 概念理解
查看>>
jquery 数字转大写金额
查看>>
剑指offer:两个链表的第一个公共结点
查看>>
Winform中的TextBox的小技巧
查看>>