音频
优质
小牛编辑
122浏览
2023-12-01
Audio接口仅适用于780和更高版本的手机QQ,如需在780以下版本使用音频功能,请使用原来的接口
音频播放接口分为普通音频接口(normal)和音效接口(effect)。普通接口和老接口类似,支持play,pause等方法,以及各种属性和事件(详情参考文档末尾的表)。effect接口用于播放短时,高频的音效,建议尽可能复用同一个对象来播放音频。ios只能播放,停止音效。android可以播放,暂停,恢复,停止音效。二者接口不能共用,接口里面说明了适用情况,effect只能使用标注为“effect支持的接口”。另外effect只支持loop,src属性,不支持事件。
BK.createAudioContext(object)
创建音频对象,effect支持
参数 Object object
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
type | string | 否 | 默认为normal,创建普通音频对象。effect为创建音效播放对象。后面会说明音效和普通音频不同之处。 |
src | string | 否 | 音效地址,effect只支持本地路径 |
例子:
var audioContext = BK.createAudioContext();
var audioContextInited = BK.createAudioContext({"src":"GameRes://music.mp3"});
var effectContext = BK.createAudioContext({"type":"effect"});
on(eventName,listener)
监听音频事件
参数
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
eventName | string | 是 | 事件名称 |
listener | function | 是 | 事件回调 |
例子
例子:
var audioContext = BK.createAudioContext();
audioContext.src = "GameRes://music.mp3";
audioContext.on('canplay',function(){
audioContext.play();
})
play(object)
播放音频,播放音频的时候会设置autoplay,不需要监听事件。effect支持
参数object 属性
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
complete | function | 否 | 事件名称,仅在effect模式下有用,用于取得当前播放音频的id,便于后续控制,并且是从头播放音频,每次调用play都会返回Id,如果需要恢复请调用resume。普通音频对象可以用此接口播放或者恢复音频,不需要传递参数。 |
参数 无
例子:
var audioContext = BK.createAudioContext();
audioContext.src = "GameRes://music.mp3";
audioContext.play();
var effectContext = BK.createAudioContext({'type':'effect','src':"GameRes://music.mp3"});
effectContext.play({complete:function(result){
effectContext.pause({id:result.id});
}});
//播放多个音效
effectContext.src = "GameRes://music1.mp3";
effectContext.play()
effectContext.src = "GameRes://music2.mp3";;
effectContext.play()
effectContext.src = "GameRes://music3.mp3";;
effectContext.play()
pause(object)
暂停音频播放,effect支持
参数 object 属性
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
id | number | 否 | 播放effect音效的时候指明需要暂停的音效,在iOS设备上等同于stop |
例子:
var audioContext = BK.createAudioContext();
audioContext.src = "GameRes://music.mp3";
audioContext.play();
audioContext.pause();
var effectContext = BK.createAudioContext({'type':'effect','src':"GameRes://music.mp3"});
effectContext.play({complete:function(result){
effectContext.pause({id:result.id});
}});
seek(targetTime)
设置开始时间
参数 targetTime
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
targetTime | number | 是 | 设置开始播放的时间,单位毫秒 |
例子:
var audioContext = BK.createAudioContext();
audioContext.src = "GameRes://music.mp3";
audioContext.play();
audioContext.seek(5000);
destroy()
销毁音频对象,释放资源,effect支持
参数 无
例子:
var audioContext = BK.createAudioContext();
audioContext.src = "GameRes://music.mp3";
audioContext.play();
audioContext.on('ended',function(){
audioContext.destroy();
});
canPlayType(type)
支持的音频类型,effect支持
参数 type
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
type | string | 是 | 目前只支持audio/mpeg |
例子:
var audioContext = BK.createAudioContext();
audioContext.canPlayType('audio/mpeg');
resume(object)
恢复音频,仅effect支持
参数 object
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
id | number | 否 | 默认恢复所有,ios不支持恢复所有,ios和play表现一致,从头播放 |
例子:
var soundPool = BK.createAudioContext({
type:'effect'
});
soundPool.src = 1;
soundPool.play({
complete:function(data){
var audioId = data.id;
soundPool.pause({id:audioId});
soundPool.resume({id:audioId});
}
})
stop(object)
恢复音频,仅effect支持
参数 object
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
id | number | 是 | 停止某个音频 |
例子:
var soundPool = BK.createAudioContext({
type:'effect'
});
soundPool.src = 1;
soundPool.play({
complete:function(data){
var audioId = data.id;
soundPool.stop({id:audioId});
}
})
音频中断
音频中断分为两种情况,第一种是退后台,最小化这种系统事件,第二种是被第三方音频(比如打电话,微信语音)抢断焦点。这两种情况系统都会自动暂停音乐,需要开发者自行监听相关的事件进行恢复。
BK.onAudioInterruptionStart(listener)
音频被中断,effect支持
参数 listener
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
listener | function | 否 | 事件回调 |
例子:
var soundPool = BK.createAudioContext();
var normalMusic = "GameRes://music.mp3";
soundPool.autoplay = true;
soundPool.src = normalMusic;
BK.onAudioInterruptionStart(function(){
});
BK.onAudioInterruptionEnd(listener)
音频中断结束,effect支持
参数 listener
参数 | 类型 | 必选 | 备注 |
---|---|---|---|
listener | function | 否 | 事件回调 |
例子:
var audio = BK.createAudioContext();
var normalMusic = "GameRes://music.mp3";
audio.autoplay = true;
audio.src = normalMusic;
BK.onAudioInterruptionEnd(function(){
audio.play();
});
前后台切换的监听例子
var soundPool = BK.createAudioContext();
var normalMusic = "GameRes://music.mp3";
soundPool.autoplay = true;
soundPool.src = normalMusic;
BK.QQ.listenGameEventEnterBackground({}, function () {
BK.Script.log(0, 0, "real pause? " + soundPool.paused);
});
//重新恢复播放
BK.QQ.listenGameEventEnterForeground({}, function () {
soundPool.play();
});
属性和事件列表
属性 | 备注 |
---|---|
currentTime | number 当前时间 |
duration | number 时长 |
src | string 设置之后会触发load调用 |
loop | boolean 循环 |
autoplay | boolean 自动播放,需要在设置src之前设置 |
paused | boolean |
volume | number 从0到1 |
muted | boolean 静音 |
事件名 | 备注 |
---|---|
canplay | 可以开始执行播放 |
canplaythrough | 可以开始执行播放 |
ended | 结束播放 |
error | 出错 |
loadeddata | 加载完成 |
loadedmetadata | 加载完成 |
loadstart | 开始加载 |
pause | 暂停 |
play | 播放 |
playing | 播放中 |
seeked | 时间调整成功 |
seeking | 时间调整中 |
timeupdate | 时间刷新,1秒刷新一次 |
volumechange | 音量变化 |