CMP4使用手册 - ActionScript3接口

### CMP4 ActionScript3 API接口说明

通过AS3的API接口通讯，我们可以在插件或皮肤中，直接获取CMP数据并进行控制，下面是所以支持的属性，方法，事件

属性attributes：
cmp:Object; | 返回cmp对象
config:Object; | 取得cmp全局配置，包含所有可读写的全局配置，以及其他一些配置的只读属性，比如当前播放状态state，具体有哪些可用for in语句查询
item:Object; | 取得当前播放项，包含所有列表项属性，以及其他一些播放项的只读属性，具体有哪些可用for in语句查询
list_xml:XML; | 取得列表xml的引用
models:Object; | 返回CMP当前所有支持的模块集，可用for in查询
skin_xml:XMLList; | 取得当前皮肤配置的引用
tools:Object; | 返回cmp的工具箱，主要有：base64, effects, graphics, netclient, output, states, strings, types, zoom, zip 具体每个工具的方法可以用for in查询，特别的output方法是输出调试信息，支持cmp跟踪器进行输出
win_list:Object; | 取得5个窗口的引用，有如下5个属性: option/list/media/console/lrc 当然还可以访问下一级对象，如要访问播放按钮bt_play则可： var bt_play = api.win_list.console.bt_play; 结构和名称同皮肤包里面的skin.xml皮肤配置的结构和名称
方法methods：
addEventListener():void; | addEventListener(key:String, type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = true):void 添加一个事件侦听器，如侦听皮肤加载完成事件： api.addEventListener(api.key, 'skin_loaded', skinHandler); 特别不同，这里第一个参数需传入api.key，它是一个唯一key值，用于第三方flash移除时，销毁其key所在所有注册的事件

addModel():String;

addModel(model:Object, type:String, exts:Array = null):String

添加一个自定义模块，CMP4默认有4个播放模块，这个方法用来支持自定义其他模块

其中model模块对象必须要有这些public方法："load", "play", "pause", "seek", "volume", "stop", "finish"

type为模块的类型名称，exts为模块自动识别的后缀名数组列表

将返回一些成功或错误信息

一些添加自定义模块的例子：打开

addProxy():void; | addProxy(n:String, f:Function):void 添加一个代理函数，用于src="proxy:函数名,函数参数"这样的协议，如： api.addProxy("youku", yk_callback); 这样就可以用自定义的yk_callback(函数参数)方法来解析协议：src="proxy:youku,函数参数" 应用例子可见：http://bbs.cenfun.com/thread-13590-1-1.html
cookie():String | 读取(cookie("name"))和写入(cookie("name", "data"))本地存储，类似于浏览器cookie，但无时间过期限制
removeEventListener():void; | removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void 移除一个事件侦听器，如：api.removeEventListener('skin_loaded', skinHandler);
sendEvent():void; | sendEvent(type:String, data:Object = null):void 发送一个事件，如：api.sendEvent("view_play"); 如果有参数data要传递就是：api.sendEvent("view_play", data);
sendState():void; | sendState(state:String):void 发送一个新的播放状态，如将播放状态改为正连接： api.sendState("connecting");
setSoundFilter():void; | setSoundFilter(fn:Function):void 设置声音过滤函数，以实现声音变调等效果。必须启用声音取样sound_sample
showMedia():Sprite; | showMedia(clip:DisplayObject):Sprite 显示一个媒体到媒体窗口，clip可以是一个Video对象，或者一个其他显示对象 将返回添加媒体所在的容器对象
showMixer():Sprite; | showMixer(sound:Boolean = true):Sprite 是否显示频谱，sound表示如果是声音则显示，否则不显示 将返回mixer对象
toString():String; | 打印api所有属性，方法，事件类型，方便查阅所有支持的api
事件类型events：按字母顺序
api | 发送api共享事件时调度
api_remove | api插件移除时调用
control_fullscreen | 全屏状态改变时调度
control_load | 音乐开始加载时调度
control_max | 最大化改变时调度，事件的data将传递是lrc_max还是video_max
control_mute | 静音状态改变时调度
control_next | 播放下一个时调度
control_pause | 暂停时调度
control_play | 播放时调度
control_playmode | 播放模式改变时调度
control_prev | 播放上一个时调度
control_progress | 进度改变时调度
control_stop | 停止时调度
control_volume | 音量改变时调度
control_win | 窗口打开关闭时调度
control_winbt | 窗口对应按钮状态改变时调度
item_closed | 列表项关闭时调度 事件的data将返回关闭项对象
item_deleted | 列表项删除时调度 事件的data将返回删除项对象
item_loaded | 列表项是子列表时，加载完成时调度 事件的data将返回需要加载子列表的项
item_opened | 列表项打开时调度 事件的data将返回打开项对象
list_change | 列表已经改变时调度，表示新的列表已经刷新，可用于播放等操作
list_load | 使列表开始加载时调度 事件的data可以传入新指定的配置lists进行加载
list_loaded | 列表内容加载完时调度，多个列表会调度多个，每次会将加载的列表数据进行解析，然后附加到总列表，再刷新列表 事件的data可以传入新指定的xml列表内容字符进行解析，此功能便于外载调用，直接输入列表内容
lrc_complete | 歌词成功加载完成时调度 事件data返回当前加载成功的歌词类型：lrc或kmc
lrc_error | 歌词加载或解析错误时调度 事件data将返回错误信息
lrc_load | 使当前音乐的歌词开始加载时调度 事件data可以传入指定当前音乐的歌词地址，支持lrc和kmc地址
lrc_loaded | 歌词加载完成时调度 事件data可以传入指定的歌词内容，支持lrc和kmc格式内容
lrc_max | 对歌词最大化状态进行切换
lrc_resize | 歌词尺寸改变时调度，包括对歌词进行缩放调整
lrc_rowchange | 当前歌词行内容改变时调度，仅支持lrc和kmc格式 事件data将传递返回当前行的歌词内容 有了这个事件可以很方便的调用js api在浏览器标题栏或状态栏打印当前位置的歌词
mixer_color | 对混音器颜色进行变更时调度 事件data可以传入新的颜色值
mixer_displace | 对混音器的置换效果状态进行切换时调度 事件data可传入true或false
mixer_filter | 对混音器的滤镜效果状态进行切换时调度 事件data可传入true或false
mixer_next | 使用下一个混音器效果时调度 事件data可以传入下一个频谱效果的id
mixer_prev | 使用上一个混音器效果时调度 事件data可以传入下一个频谱效果的id
model_change | 模块改变时调度 事件data可以传入要使用的新模块类型type
model_complete | 模块播放完成时调度
model_error | 当前项发生错误时调度 事件data将返回错误信息
model_load | 模块开始加载时调度 事件data可以传入即将要播放媒体url
model_loaded | 当前项下载完成时调度
model_loading | 当前项正在下载时调度
model_meta | 当前项取得meta信息时调度 事件data将返回meta数据对象
model_start | 当前项第一次开始播放时调度，一般此时才开始加载歌词或开始显示频谱

model_state

当前项状态改变时调度
事件data将返回当前状态，所有支持状态码为：

undefined 未定义
connecting 连接中
buffering 缓冲
playing 正在播放
paused 已暂停
stopped 已停止
completed 播放完成
reconnecting 重试连接

状态改变时，将在皮肤的状态栏显示当前状态对应的说明，说明可以在皮肤配置的languages多语言里自定义

model_time | 当前项播放时间改变时调度
plugins_load | 插件和背景开始加载时调度 事件data可传入新指定的配置plugins(不支持backgrounds)进行加载
plugins_loaded | plugins参数指定的插件全部加载完成时调度(此时将第一次加载列表lists指定的文件)
plugins_remove | 插件和背景移除时调度
resize | 播放器舞台改变尺寸时调度
skin_change | 针对皮肤id对皮肤进行改变时调度 事件data可以直接传入新的皮肤id
skin_complete | 皮肤显示完成时调度
skin_load | 皮肤开始加载时调度 事件data可以传入新指定的配置skins参数进行加载
skin_loaded | 皮肤加载完成时调度
video_blackwhite | 对视频是否启用黑白效果滤镜 事件data可传入true或false
video_effect | 对视频进行颜色滤镜(ColorMatrixFilter)改变时调度 事件data可以传入一个英文逗号隔开的数组值，用来新建颜色矩阵滤镜ColorMatrixFilter
video_highlight | 对视频是否启用高亮效果滤镜 事件data可传入true或false
video_max | 对视频最大化进行切换时调度
video_resize | 视频尺寸改变时调度
video_rotation | 对视频进行旋转时调度 事件data可以传入旋转的角度值，如90
video_scalemode | 对视频进行缩放模式改变时调度 事件data可以传入支持缩放模式的id，支持0,1,2,3
video_smoothing | 对视频是否启用平滑效果时调度 事件data可以传入true或false
view_console | 对控制窗口状态进行改变时调度
view_forward | 点击快进按钮时调度
view_fullscreen | 对全屏状态进行改变时调度
view_item | 对播放项进行改变时调度
view_link | 点击链接按钮时调度 事件data可以传入新指定的链接进行打开
view_list | 对列表窗口进行改变时调度
view_lrc | 对歌词窗口进行改变时调度
view_more | 点击更多按钮时调度 事件data可以传入新指定的链接进行打开
view_mute | 点击静音按钮时调度
view_next | 点击下一个按钮时调度
view_option | 对设置窗口进行改变时调度
view_play | 点击播放或暂停按钮时调度 事件的data可以传递列表id位置，表示播放第几个
view_prev | 点击上一个按钮时调度
view_progress | 拖动播放进度条时调度 事件data可以传入指定的进度百分值
view_random | 点击随机播放模式按钮时调度
view_repeat | 点击重复播放模式按钮时调度
view_rewind | 点击快退按钮时调度
view_single | 点击单遍播放模式按钮时播放
view_stop | 点击停止按钮时调度
view_video | 对视频窗口状态进行改变时调度
view_volume | 拖动音量条时调度 事件data可以传入指定的volume音量值和panning平移值，用英文逗号隔开，如：1,0

具体API接口应用的例子可以见安装包的示例：plugins/ApiExample.as 或者直接到官方插件库查看，全部附源文件：
http://cenfunmusicplayer.googlecode.com/svn/trunk/cmp4/plugins/