之前用的1.2.2beta2,用到了cc.audioengine,播放音乐和声效,现在更新到了1.3.0rc1,怎么很多方法都不能用了呢,而且控制台也不提示,对照最新的api文档上看到很多方法都没有了,同样功能的方法还重命名了,官方可以提供这方面的资料或者在帖子里指点说明下么?
1.3.0的api,怎么好多方法都没有了呢,官方可以说明下么?
audioEngine static
模块: cc
cc.audioengine是单例对象。
主要用来播放音频,播放的时候会返回一个 audioID,之后都可以通过这个 audioID 来操作这个音频对象。
不使用的时候,请使用 cc.audioEngine.uncache(filePath); 进行资源释放
注意:
在 Android 系统浏览器上,不同浏览器,不同版本的效果不尽相同。
比如说:大多数浏览器都需要用户物理交互才可以开始播放音效,有一些不支持 WebAudio,
有一些不支持多音轨播放。总之如果对音乐依赖比较强,请做尽可能多的测试。
方法
play ( filePath loop volume ) Number
播放音频
名称 类型 描述
filePath String
The path of the audio file without filename extension.
loop Boolean
Whether the music loop or not.
volume Number
Volume size.
返回:
类型: Number
audioId
示例:
//example
var audioID = cc.audioEngine.play(path, false, 0.5);
setLoop ( audioID loop )
设置音频是否循环。
名称 类型 描述
audioID Number
audio id.
loop Boolean
Whether cycle.
示例:
//example
cc.audioEngine.setLoop(id, true);
isLoop ( audioID ) Boolean
获取音频的循环状态。
名称 类型 描述
audioID Number
audio id.
返回:
类型: Boolean
Whether cycle.
示例:
//example
cc.audioEngine.isLoop(id);
setVolume ( audioID volume )
设置音量(0.0 ~ 1.0)。
名称 类型 描述
audioID Number
audio id.
volume Number
Volume must be in 0.0~1.0 .
示例:
//example
cc.audioEngine.setVolume(0.5);
getVolume ( audioID ) Boolean
获取音量(0.0 ~ 1.0)。
名称 类型 描述
audioID Number
audio id.
返回:
类型: Boolean
示例:
//example
var volume = cc.audioEngine.getVolume(id);
setCurrentTime ( audioID sec ) Boolean
设置当前的音频时间。
名称 类型 描述
audioID Number
audio id.
sec Number
current time.
返回:
类型: Boolean
示例:
//example
cc.audioEngine.setCurrentTime(id, 2);
getCurrentTime ( audioID ) Number
获取当前的音频播放时间。
名称 类型 描述
audioID Number
audio id.
返回:
类型: Number
audio current time.
示例:
//example
var time = cc.audioEngine.getCurrentTime(id);
getDuration ( audioID ) Number
获取音频总时长。
名称 类型 描述
audioID Number
audio id.
返回:
类型: Number
audio duration.
示例:
//example
var time = cc.audioEngine.getDuration(id);
getState ( audioID ) audioEngine.AudioState
获取音频状态。
名称 类型 描述
audioID Number
audio id.
返回:
类型: audioEngine.AudioState
audio duration.
示例:
//example
var state = cc.audioEngine.getState(id);
getState ( audioID callback )
获取音频状态。
名称 类型 描述
audioID Number
audio id.
callback Function
loaded callback.
示例:
//example
cc.audioEngine.setFinishCallback(id, function () {});
pause ( audioID )
暂停正在播放音频。
名称 类型 描述
audioID Number
The return value of function play.
示例:
//example
cc.audioEngine.pause(audioID);
pauseAll ( )
暂停现在正在播放的所有音频。
示例:
//example
cc.audioEngine.pauseAll();
resume ( audioID )
恢复播放指定的音频。
名称 类型 描述
audioID Number
The return value of function play. //example cc.audioEngine.resume(audioID);
resumeAll ( )
恢复播放所有之前暂停的所有音频。
示例:
//example
cc.audioEngine.resumeAll();
stop ( audioID )
停止播放指定音频。
名称 类型 描述
audioID Number
The return value of function play.
示例:
//example
cc.audioEngine.stop(audioID);
stopAll ( )
停止正在播放的所有音频。
示例:
//example
cc.audioEngine.stopAll();
setMaxAudioInstance ( num )
设置一个音频可以设置几个实例
名称 类型 描述
num Number
a number of instances to be created from within an audio
示例:
//example
cc.audioEngine.setMaxAudioInstance(20);
getMaxAudioInstance ( ) Number
获取一个音频可以设置几个实例
返回:
类型: Number
a number of instances to be created from within an audio
示例:
//example
cc.audioEngine.getMaxAudioInstance();
uncache ( filePath )
卸载预加载的音频。
名称 类型 描述
filePath String
示例:
//example
cc.audioEngine.uncache(filePath);
uncacheAll ( )
卸载所有音频。
示例:
//example
cc.audioEngine.uncacheAll();
preload ( filePath callback )
预加载一个音频
名称 类型 描述
filePath Unknown
The file path of an audio.
callback Unknown
The callback of an audio.
示例:
//example
cc.audioEngine.preload(path);
setMaxWebAudioSize ( kb )
设置一个以kb为单位的尺寸,大于这个尺寸的音频在加载的时候会强制使用 dom 方式加载
名称 类型 描述
kb Unknown
The file path of an audio.
示例:
//example
cc.audioEngine.setMaxWebAudioSize(300);
audioEngine static
模块: cc
cc.audioengine是单例对象。
主要用来播放背景音乐和音效,背景音乐同一时间只能播放一个,而音效则可以同时播放多个。
注意:
在 Android 系统浏览器上,不同浏览器,不同版本的效果不尽相同。
比如说:大多数浏览器都需要用户物理交互才可以开始播放音效,有一些不支持 WebAudio,
有一些不支持多音轨播放。总之如果对音乐依赖比较强,请做尽可能多的测试。
方法
playMusic ( url loop )
播放指定音乐,并可以设置是否循环播放。
注意:音乐播放接口不支持多音轨,同一时间只能播放一个音乐。
名称 类型 描述
url String
The path of the music file without filename extension.
loop Boolean
Whether the music loop or not.
示例:
//example
cc.audioEngine.playMusic(path, false);
stopMusic ( [releaseData ] )
停止当前音乐。
名称 类型 描述
releaseData optional Boolean
If release the music data or not.As default value is false.
示例:
//example
cc.audioEngine.stopMusic();
pauseMusic ( )
暂停正在播放音乐。
示例:
//example
cc.audioEngine.pauseMusic();
resumeMusic ( )
恢复音乐播放。
示例:
//example
cc.audioEngine.resumeMusic();
rewindMusic ( )
从头开始重新播放当前音乐。
示例:
//example
cc.audioEngine.rewindMusic();
getMusicVolume ( ) Number
获取音量(0.0 ~ 1.0)。
返回:
类型: Number
示例:
//example
var volume = cc.audioEngine.getMusicVolume();
setMusicVolume ( volume )
设置音量(0.0 ~ 1.0)。
名称 类型 描述
volume Number
Volume must be in 0.0~1.0 .
示例:
//example
cc.audioEngine.setMusicVolume(0.5);
isMusicPlaying ( ) Boolean
音乐是否正在播放。
返回:
类型: Boolean
If is playing return true,or return false.
示例:
//example
if (cc.audioEngine.isMusicPlaying()) {
cc.log(“music is playing”);
}
else {
cc.log(“music is not playing”);
}
playEffect ( url loop volume ) Number | Null
播放指定音效,并可以设置是否循环播放。
注意:在部分不支持多音轨的浏览器上,这个接口会失效,请使用 playMusic
名称 类型 描述
url String
The path of the sound effect with filename extension.
loop Boolean
Whether to loop the effect playing, default value is false
volume Boolean
返回:
类型: Number | Null
the audio id
示例:
//example
var soundId = cc.audioEngine.playEffect(path);
setEffectsVolume ( volume )
设置音效音量(0.0 ~ 1.0)。
名称 类型 描述
volume Number
Volume must be in 0.0~1.0 .
示例:
//example
cc.audioEngine.setEffectsVolume(0.5);
getEffectsVolume ( ) Number
获取音效音量(0.0 ~ 1.0)。
返回:
类型: Number
示例:
//example
var effectVolume = cc.audioEngine.getEffectsVolume();
pauseEffect ( audio )
暂停指定的音效。
名称 类型 描述
audio Number
The return value of function playEffect.
示例:
//example
cc.audioEngine.pauseEffect(audioID);
pauseAllEffects ( )
暂停现在正在播放的所有音效。
示例:
//example
cc.audioEngine.pauseAllEffects();
resumeEffect ( audioID )
恢复播放指定的音效。
名称 类型 描述
audioID Number
The return value of function playEffect.
resumeAllEffects ( )
恢复播放所有之前暂停的所有音效。
示例:
//example
cc.audioEngine.resumeAllEffects();
stopEffect ( audioID )
停止播放指定音效。
名称 类型 描述
audioID Number
The return value of function playEffect.
示例:
//example
cc.audioEngine.stopEffect(audioID);
stopAllEffects ( )
停止正在播放的所有音效。
示例:
//example
cc.audioEngine.stopAllEffects();
unloadEffect ( url )
卸载预加载的音效。
名称 类型 描述
url String
示例:
//example
cc.audioEngine.unloadEffect(EFFECT_FILE);
end ( )
停止所有音乐和音效的播放。
我应该一个一个试,还是依据api呢,playMusic貌似api里没有了,但是确可以用,怎么弄呢?在自己的项目里一个一个找么?
play和playEffect都可用。
end不可用
。。。
之前旧的 api 可以继续使用。
文档是同步了 -x 的新 audioEngine 而来的。最近一次 audioEngine 修改也是同步了 -x 新的 audioEngine 所有的接口。
关于旧的 api 只移除了 end 接口。其余接口都能够继续使用,只是文档上没有再提示了。建议是使用 play 自己去控制所有音频,和 -x 同步。但是使用起来确实没有 playMusic 和 playEffect 方法好用~
所以我们也不知道该如何取舍,暂时同时支持除了 end 之外的全部接口。(end 接口现在可以使用 stopAll 或者 uncacheAll 来替代)
如果有相关的想法或者建议,可以发上来大家讨论一下哇。
非常感谢您的关注,使用过程中如有疑问,再麻烦您:)
(1)setVolume(audioID,volume)
(2)setMusicVolume(volume)
(3)setEffectsVolume(volume)
关闭音量应该可以不用传递id也可以才合理吧,(1),(2),(3)会一直共存吧?
另:1.3.0的api上没有体现的历史方法应该都保留吧,因为把音乐和声效同时处理,在有些场景是不合适的,应该可以区分处理,至少我的项目中是如此。而且相关方法有替代方法了,不打算让新入门的用户用这些方法的话,也不至于删除掉,加个删除线标记上就可以把,否则不够合理。
(1)先:
cc.director.pause();
cc.audioEngine.pauseMusic();//此行可注释
cc.audioEngine.pauseAll();//pauseAllEffects也一样
cc.audioEngine.setMusicVolume(0);
cc.audioEngine.setEffectsVolume(0);
(2)然后:
cc.director.resume();
cc.audioEngine.resumeMusic();/此行可注释
cc.audioEngine.resumeAll();//resumeAllEffects也一样
这样恢复后为什么背景音乐正常:是没有音量的,但是声效却不正常:有音量。
难道resume还负责设置了一个默认的声效音量大小么?
ios native
帮忙看下啊:)
setVolume()能不能不要填id,让全部音乐音量为0?这个填id让我很为难。。。辣么多音频,要一个一个的设置音量为0喽?!
安卓真机闪退:
10-27 12
21.125: A/libc(12411): stack corruption detected
10-27 12
21.125: A/libc(12411): Fatal signal 6 (SIGABRT) at 0x0000307b (code=-6), thread 12427 (Thread-5562)
10-27 12
34.275: W/AudioTrack(12411): releaseBuffer() track 0x7a635a78 name=s:246;n:3;f:5 disabled due to previous underrun, restarting
您是官方技术人员吧,方便回复下这些问题么?谢谢
这个其他平台不会出现么?
嗯嗯,这个稍后考虑加回去,因为没确定是否需要删除或者是怎么修改,所以暂时只是完全同步 -x 接口。
之后会考虑论坛上大家的反馈信息,然后整合一个大家用的舒服的接口集合。
谢谢提出这么宝贵的意见哇。
我想问的是,为什么暂停后,我设置了音量为零,恢复后自动就给声效了一个默认音量值呢?
原因是这样的:
因为 -x 没有一个统一设置所有音量的接口,每个音频都是单独设置音量的。
而旧接口都是在 js 层上进行兼容的。这就造成了无法控制已经播放的 effect 音量,因为如果需要对旧的进行操作的话,必须在 js 层上记录所有的音效 id,然后在每个音效播放结束后去删除js层索引,这个开销无形中就多了很多。。。
所以现在建议是不要去动态改 effect 的音量。。。
之后会提个需求,看看在 -x 可能会加一个控制所有音频音量的接口,这样就只需要记录 music 的 id~~
如果是这样的话,api文档上应该对这个方法有个使用限制说明
所以,要怎么避免呢?