do (root = this, factory = () ->
    root = this

    return $.extend({
        namespace: root._mu
        debug: false
        version: '0.9.0'

        # XXX: timerResolution = 25ms是最小的计时粒度,
        # 这个不经测试调优就尽量不要改, 会影响部分统计数据和性能。
        timerResolution: 25

        emptyMP3: '../dist/mp3/empty.mp3'
        expressInstaller: './dist/expressInstall.swf'
        engine:
            TYPES:
                FLASH_MP3: 'FlashMP3Core'
                FLASH_MP4: 'FlashMP4Core'
                AUDIO: 'AudioCore'
            EVENTS:
                STATECHANGE: 'engine:statechange'       # 播放状态改变事件(STATES)
                POSITIONCHANGE: 'engine:postionchange'  # 播放时播放进度改变事件
                PROGRESS: 'engine:progress'             # 加载时加载进度改变事件
                ERROR: 'engine:error'                   # 播放过程中出错时的事件
                INIT: 'engine:init'                     # 播放器初始化成功时的事件
                INIT_FAIL: 'engine:init_fail'           # 播放器初始化失败时的事件

            # 状态影响EVENTS.STATECHANGE派发的事件，原则上派发的事件应保持和HTML5 Audio规范一致。
            # 但也有些biao'z标注播放器状态的特殊事件，如NOT_INIT等。
            # HTML5 Audio相关事件可参考: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#mediaevents
            STATES:
                NOT_INIT: 'not_init'
                PREBUFFER: 'prebuffer'
                BUFFERING: 'buffering'
                PLAYING: 'playing'
                PAUSE: 'pause'
                STOP: 'stop'
                END: 'ended'

            # 内核错误码, 参考HTML5 Audio错误状态:
            # http://dev.w3.org/html5/spec-author-view/video.html#error-codes
            ERRCODE:
                MEDIA_ERR_ABORTED: '1'
                MEDIA_ERR_NETWORK: '2'
                MEDIA_ERR_DECODE: '3'
                MEDIA_ERR_SRC_NOT_SUPPORTED: '4'
    }, if typeof root._mu is 'undefined' then {} else root._mu.cfg)
) ->
    # _mu是muplayer约定的namespace,
    # 放到这个前置配置中初始化比较合适。
    if typeof root._mu is 'undefined'
        root._mu = {}

    if typeof exports is 'object'
        module.exports = factory()
    else if typeof define is 'function' and define.amd
        define(factory)
    else
        root._mu.cfg = factory()
