SoundJSSoundJS库管理网络上的音频播放。它通过 '抽象出实际音频实现' 的插件来工作,所以可能在任何平台上播放的,而不必了解声音播放的机制。使用SoundJS,可以使用 'Sound' 类的公共API。该API是:安装音频播放插件注册(和预加载)声音创建和播放声音主音量、静音以及一次性停止对所有声音的控制控制声音播放声音,会创建 'AbstractSoundInstance' 实例,该实例可以单独进行控制。暂停、恢复、搜索、停止声音控制声音的音量、静音、声像监听声音实例的事件,播放完成、循环、失败时触发通知示例:  createjs.Sound.alternateExtensions = ['mp3'];createjs.Sound.on('fileload', this.loadHandler, this);createjs.Sound.resisterSound('path/sound/声音.ogg', 'sound1');function loadHandler(event){// 每个注册的声音都会触发var instance = createjs.Sound.play('sound1');  // 播放指定id的声音(这里是上面注册的 'sound1'),也可以使用 '声音的全路径' 或 'event.src'instance.on('complete', this.handleComplete, this);instance.volume = 0.5;}浏览器支持:音频可以在支持 'Web Audio'(http://caniuse.com/audio-api) 或 'HTMLAudioElement'(http://caniuse.com/audio) 的浏览器上使用。Flash fallback可用于任何支持Flash播放器的浏览器,Cordova插件可用于任何支持 Cordova.Media 的web视图。不支持IE8和更早版本,及时是 Flash fallback 也不支持。要支持以前的浏览器,可使用旧版本的SoundJS(0.5.2之前)大致看了下提供的类文件,有分类特性:// Sound库其他SoundJSSoundAudioSpritePlayPropsConfig// 2个基类AbstractPluginAbstractSoundInstance// 上面提到的4个不同的插件WebAudioLoaderWebAudioPluginWebAudioSoundInstanceHTMLAudioPluginHTMLAudioSoundInstanceHTMLAudioTagPoolFlashAudioLoaderFlashAudioPluginFlashAudioSoundInstanceCordovaAudioLoaderCordovaAudioPluginCordovaAudioSoundInstance// 额外的事件对象ErrorEvent// CreateJS 套件里公共部分EventEventDispatcherUtility Methods1.SoundJSSoundJS 是一个静态类,可获取类库的具体信息,例如:库的版本、构建日期等。SoundJS类已经被重命名为 Sound。查看 'Sound' 获取更多信息2.SoundSound类是公共API,用于创建声音,控制整体声音级别,以及管理插件。该类上所有的声音API都是静态的。注册和预加载播放声音前,必须先进行注册。可以使用 'registerSound' 方法,注册多个声音使用 'registerSounds' 方法。如果在 使用 'play' 方法来尝试播放它,或使用 'createInstance' 来创建它 之前,没有注册声音,将会自动注册声音源,但是播放将会失败,因为声音源还未准备好。如果使用 'PreloadJS',则会在预加载声音时,自动处理声音注册。建议预先加载声音,不管是通过内部的注册函数还是外部的 'PreloadJS',以便在使用声音时准备就绪。播放在声音注册和预加载后,立即播放声音,使用 'play' 方法。该方法返回一个 'AbstractSoundInstance' 实例,可以用来暂停、恢复、静音等操作。可以查看 'AbstractSoundInstance' 获取更多信息。插件默认情况下,使用 'WebAudioPlugin' 或 'HTMLAudioPlugin' 插件(当可用时),但开发人员可以更改插件优先级,或添加新的插件(例如:提供的 'FlashAudioPlugin' 插件)。安装插件,或指定不同的插件顺序,查看 'Sound/intallPlugins'。示例:createjs.FlashAudioPlugin.swfPath = '../src/flashaudio';createjs.Sound.registerPlugins([createjs.WebAudioPlugin, createjs.FlashAudioPlugin]);createjs.Sound.alternateExtensions(['mp3']);createjs.Sound.on('fileload', this.loadHandler, this);createjs.Sound.registerSound('path/sound/声音.ogg', 'sound1');function loadHandler(event){// 每个注册的声音都会触发var instance = createjs.Sound.play('sound1');   // 播放指定id的声音(这里是上面注册的 'sound1'),也可以使用 '声音的全路径' 或 'event.src'instance.on('complete', this.handleComplete, this);instance.volume = 0.5;}可以在 'registerSound' 的 'data' 参数中,指定 '同一声音同时播放的最大实例数'。注意:如果未置顶,则会使用默认的最大限制数。目前 'HTMLAudioPlugin' 默认限制为2,而 'WebAudioPlugin' 和 'FlashAudioPlugin' 默认限制为100。createjs.Sound.registerSound('声音.mp3', 'sound1', 4);'Sound' 可以作为 'PreloadJS' 插件使用,以帮助正确预加载音频。通过 'PreloadJS' 预加载的音频,会自动注册到 'Sound' 类。当音频未预加载时,'Sound' 将自动执行内部加载。因此,如果音频未完成加载,可能会在第一次播放时,播放失败。使用 'fileload' 事件可以确定,声音什么时候完成的预加载。建议在播放所有声音前,预先加载。var queue = new createjs.LoadQueue();queue.installPlugin(createjs.Sound);音频精灵(audio sprites - 音频雪碧图)从0.6.0版本后,'SoundJS' 增加了对 'AudioSprite' 的支持。对不熟悉 '音频精灵' 的人来说,'音频精灵' 类似 'CSS精灵' 或 '精灵表单':多个音频资源分组合并到单个文件中。示例:var assetsPath = './assets/';var sounds = [{src: 'MyAudioSprite.ogg', data: {audioSprite: [{id: 'sound1', startTime: 0, duration: 500},{id: 'sound2', startTime: 1000, duration: 400},{id: 'sound3', startTime: 1700, duration: 1000}]}}];createjs.Sound.alternateExtensions = ['mp3'];createjs.Sound.on('fileload', loadSound);createjs.Sound.registerSounds(sounds, assetsPath);// 加载完成后播放createjs.Sound.play('sound2');手机播放运行iOS的设备需要通过在用户发起的事件(例如触摸/点击)中播放至少一个声音来“解锁”WebAudio上下文。 早期版本的SoundJS包含了一个“MobileSafe”示例,但SoundJS 0.6.2不再需要这个示例。1.在SoundJS 0.4.1及以上版本中,您可以初始化插件,也可以在用户输入事件的调用堆栈中使用playEmptySound方法手动解锁音频上下文2.在SoundJS 0.6.2及以上版本中,SoundJS将自动侦听第一个文档级别的“mousedown”和“touchend”事件,并解锁WebAudio。这将继续检查这些事件,直到WebAudio上下文变为“解锁”(从“暂停”变为“正在运行”)3.“mousedown”和“touchend”事件都可以用来在iOS9 +中解锁音频,“touchstart”事件可以在iOS8及更低版本中使用。当手势被解释为“点击”时,“touchend”事件将仅在iOS9中起作用,所以如果用户长按按钮,它将不再起作用。4.当使用EaselJS Touch类时,由于MouseEvents被阻止,单击画布时,“mousedown”事件不会触发,以确保只有触摸事件触发。为了解决这个问题,你可以依靠“touchend”,或者:1.将Touch类构造函数的allowDefault属性设置为true(默认为false)。2.将EaselJS Stage上的preventSelection属性设置为false。这些设置可能会改变您的应用程序的行为,不建议。加载备用路径和无扩展文件'SoundJS' 支持加载备用路径和无扩展文件,通过给 'src' 属性,传递一个对象来代替字符串,该属性是使用hash格式:{extension: 'path', extension2: 'path2'}。'SoundJS' 通过extension名,来判断是否支持该格式的文件。可以将不同格式的文件,存放到不同的目录下,或CDN上。按顺序依次尝试是否支持该格式,一旦支持则停止检测。对于 'SoundJS' 内部加载或通过 'PreloadJS' 加载,都有效。注意:播放需要一个 'id'示例:var sounds = {path: './audioPath/',manifest: [{id: 'cool', src: {mp3: 'mp3/声音.mp3', ogg: 'ogg/声音.ogg'}}]};已知的浏览器和操作系统问题不翻译了,看文档3.AudioSprite注意:AudioSprite不是一个类,但是它的用法很容易在文档中被忽略,所以单独提出来,可称为快速参考。'音频精灵' 很像 'CSS精灵' 或 图像 '精灵表单':将多个音频资源分组合并为一个文件。'音频精灵' 可以解决某些浏览器的一次只能加载和播放一个声音的限制。建议在音频剪辑之间至少保持300ms的静音,来处理HTML音频标签不准确的情况,以防止意外播放相邻剪辑的音频。音频精灵的优点1.对于仅允许单个音频实例的旧版浏览器和设备提供更强大的支持(如:iOS 5)。2.为IE9 audio标签限制提供了解决方法,IE9 audio 标签严格限制了一次可以加载多种不同的声音。3.加载更快,将多次请求合并为一次。特别是在移动设备上,每个文件的网络往返行程会有明显延迟。音频精灵的缺点1.使用HTML或Flash音频时不能保证平滑的循环。如果需要平滑的循环,并且要支持非网络音频的浏览器,尽量避免使用 '音频精灵'2.不能保证HTML音频会立即播放,特别是第一次播放。在某些浏览器(chrome!),HTML音频只能以当前下载速度加载,所以我们依靠 'canplaythrough' 事件,来确定音频是否已加载。因为 '音频精灵' 必须跳到前方,来播放特定的声音,音频可能还没有完全下载下来。3.'音频精灵' 共享同样的核心资源,因此,如果有一个包含5个声音的 '音频精灵',并且被限制只能同时播放2个实例,就只能同时播放2个声音。示例:createjs.Sound.initializeDefaultPlugins();var assetsPath = './assets/';var sounds = [{src: 'MyAudioSprite.ogg', data: {audioSprite: [{id: 'sound1', startTime: 0, duration: 500},{id: 'sound2', startTime: 1000, duration: 400},{id: 'sound3', startTime: 1700, duration: 1000}]}}];createjs.Sound.alternateExtensions = ['mp3'];createjs.Sound.on('fileload', loadSound);createjs.Sound.registerSounds(sounds, assetsPath);// 加载完成后播放createjs.Sound.play('sound2');当创建新的 'AbstractSoundInstance' 时,也可以通过设置 'startTime' 和 'duration' 来在线创建 '音频精灵'createjs.Sound.play('MyAudioSprite', {startTime: 1000, duration: 400});优秀的 CreateJS社区 已经创建了一个工具来创建 '音频精灵',在https://github.com/tonistiigi/audiosprite 查看源码,以及 'jsfiddle'(http://jsfiddle.net/bharat_battu/g8fFP/12/) 将输出转换为 SoundJS 格式。4.PlayPropsConfigPlayPropsConfig 类,是一个存储可选的播放属性的类,以传递给 'Sound:play' 和 'AbstractSoundInstance:play' 调用。可选的播放属性包括:interrupt - 如果已经播放了最大个数的声音实例,如何中断正在播放的具有相同资源的任意的音频实例。可选值定义在 'Sound' 类的 'INTERRUPT_TYPE' 常量,默认由 'defaultInterruptBehavior' 定义。delay - 音频开始播放的延迟时间,单位 'ms'offset - 音频开始播放的偏移时间量,单位 'ms'loop - 音频循环播放次数。默认是 '0-不循环', -1 - 无限循环volume - 声音的音量,0-1之间。注意:主音量应用于单个音量pan - 声音的左-右声部(如果支持),在-1(左)和1(右)之间。startTime - 创建 '音频精灵'(和 duration 一起使用) 开始播放和循环时的初始偏移量,单位 'ms' duration - 创建 '音频精灵'(和 startTime 一起使用) 播放剪辑的时间量,单位 'ms' 示例:var props = new createjs.PlayPropsConfig().set({interrupt: createjs.Sound.INTERRUPT_ANY, loop: -1, volume: 0.5});createjs.Sound.play('声音.mp3', props);    // Sound:playmySoundInstance.play(props);           // AbstractSoundInstance:play5.AbstractPlugin所有其他插件类的基类6.AbstractSoundInstance当调用 'Sound API' 的 'play' 或 'createInstance' 方法时,都会创建 'AbstractSoundInstance' 实例。根据当前活动插件(4种不同插件类型),返回 'AbstractSoundInstance' 实例,以供用户后续控制示例:var myInstance = createjs.Sound.play('声音.mp3');额外的附加参数,提供了一个快速方法,来决定如何播放声音。请参阅 'Sound API' 的 'play' 方法,查看播放参数列表一旦创建了 'AbstractSoundInstance',就可以存储一个直接通过 'AbstractSoundInstance' 控制音频的引用。如果未存储引用,'AbstractSoundInstance' 将播放它的音频(和任何循环),然后从 'Sound' 类取消引用,标记为可清除,之后被垃圾回收清除。如果音频播放已完成,简单的调用 'play' 方法,将重建引用,来控制声音。var myInstance = createjs.Sound.play('声音.mp3', {loop: 2});myInstance.on('loop', handleLoop);function handleLoop(event){myInstance.volume = myInstance.volume * 0.5;}当声音播放完成、循环播放或播放失败,事件分发会通知事件监听器var myInstance = createjs.Sound.play('声音.mp3', {loop: 2});myInstance.on('complete', handleComplete);myInstance.on('loop', handleLoop);myInstance.on('failed', handleFailed);7.WebAudioLoader8.WebAudioPlugin9.WebAudioSoundInstance10.HTMLAudioPlugin11.HTMLAudioSoundInstance12.HTMLAudioTagPool13.FlashAudioLoader14.FlashAudioPlugin15.FlashAudioSoundInstance16.CordovaAudioLoader17.CordovaAudioPlugin18.CordovaAudioSoundInstance19.ErrorEvent通用错误事件,描述发生的错误,以及任何细节// 下面几个,在 CreateJS 套件里是公共的
20.Event21.EventDispatcher22.Utility Methods

CreateJS-SoundJS翻译相关推荐

  1. 移动端H5混合开发设置复盘与总结

    此篇接上一篇: 移动端H5混合开发,Touch触控,拖拽,长按, 滑屏 实现方案 https://www.cnblogs.com/buoge/p/9346699.html app 场布设置已经上线了, ...

  2. Html5游戏框架createJS组件--EaselJS

    CreateJS库是一款HTML5游戏开发的引擎,是一套可以构建丰富交互体验的HTML5游戏的开源工具包,旨在降低HTML5项目的开发难度和成本,让开发者以熟悉的方式打造更具现代感的网络交互体验. 掌 ...

  3. createjs开发h5游戏: 指尖大冒险

    之前看到一个指尖冒险游戏,觉得挺有意思,就想学习一下怎么实现,毕竟当产经提出类似的需求时,问我等开发可不可以实现的时候,不至于回答不知道. 本文的主要思路,参考的是凹凸实验室的这篇文章:H5游戏开发: ...

  4. CreateJs入门必知必会

    CreateJS介绍 CreateJS是基于HTML5开发的一套模块化的库和工具. 基于这些库,可以非常快捷地开发出基于HTML5的游戏.动画和交互应用. CreateJS主要包含如下四个类库: Ea ...

  5. CreateJS基础 学习笔记(上)

    1.CreateJS介绍 了解CreateJS 1.CreateJS:     一款HTML5游戏开发的引擎     CreateJS是一套可以构建丰富交互体验的HTML5游戏的开源工具包,旨在降低H ...

  6. createjs入门

    createjs是一个轻量级的框架,稍微有点时间和耐心,就可以把全部源代码都看一遍,毕竟只有三十几个js文件.地址:http://www.createjs.com/ 开发createjs的动画或游戏, ...

  7. CreateJS 指南

    https://zhuanlan.zhihu.com/p/40799542 简介 CreateJS是基于HTML5开发的一套模块化的库和工具,基于这些库,可以非常快捷地开发出基于HTML5的游戏.动画 ...

  8. CreateJS入门 -- 注释详细到爆炸(My Style)

    写在前面 首先,还是谢谢大家的支持,谢谢!记得在之前的文章中我说过自己算是一个半文艺程序员,也一直想着写一写技术性和其他偏文学性的文章.虽然自己的底子没有多么优秀,但总是觉得这个过程中可以督促自己去思 ...

  9. createjs打飞机

    此文章代码来源于createjs打飞机 我只是将他教程代码,一步步写出来了而已 下面给出完整代码,其中有一张雪碧图和音效资源,包含在源文章中,这里没有 <!DOCTYPE html> &l ...

最新文章

  1. jq取第一个子元素为select_jquery如何获取第一个或最后一个子元素?
  2. React Native 项目简单整理-组件优化
  3. Spring AOP中pointcut expression表达式解析
  4. C++BOOL,int,float,指针类型的变量a 与“零”比较语句
  5. CentOS7 64位下MySQL5.7安装与配置(YUM)
  6. 使用docker镜像搭建svn+Apache环境
  7. 【动态规划】 多米诺骨牌 (ssl 1632/luogu 1282)
  8. 前端 网络安全 前端优化 代码架构 笔记
  9. PHP 中和 HTTP 相关的函数及使用
  10. asp.net mvc源码分析-Action篇 ParameterDescriptor
  11. 直播APP开发如何得到用户青睐?
  12. Premiere 视频基本调色
  13. 动手学深度学习:6.3 语言模型数据集(周杰伦专辑歌词)
  14. 自学python从字符串开始吧
  15. Superset系列8- 制作饼图
  16. 我为什么而活着 [英]罗素
  17. Python下载文件的方式
  18. NO.25-SAP S4 HANA Cloud EX版本介绍
  19. SpringSecurity整合springBoot、redis——实现登录互踢
  20. html无法复制粘贴,无法复制粘贴

热门文章

  1. Invalid drive错误的解决方案
  2. 前端学习笔记(this)
  3. Win7-64 重装 Anaconda3
  4. 一款基于jQuery仿淘宝红色分类导航
  5. 解决,微信网页开发,网页授权域名数量不足问题
  6. 你应该了解的 MySQL 细节
  7. 2.5单星和双星运算符的作用
  8. Explaining Deep Neural Networks
  9. Innovus/Encounter Floorplan命令合集(二)
  10. Oauth2.0搭建开放平台接口