音频

优质
小牛编辑
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

参数类型必选备注
typestring默认为normal,创建普通音频对象。effect为创建音效播放对象。后面会说明音效和普通音频不同之处。
srcstring音效地址,effect只支持本地路径
例子:
var audioContext = BK.createAudioContext();
var audioContextInited = BK.createAudioContext({"src":"GameRes://music.mp3"});
var effectContext = BK.createAudioContext({"type":"effect"});

on(eventName,listener)

监听音频事件

参数

参数类型必选备注
eventNamestring事件名称
listenerfunction事件回调

例子

例子:
var audioContext = BK.createAudioContext();
audioContext.src = "GameRes://music.mp3";
audioContext.on('canplay',function(){
    audioContext.play();
})

play(object)

播放音频,播放音频的时候会设置autoplay,不需要监听事件。effect支持

参数object 属性

参数类型必选备注
completefunction事件名称,仅在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 属性

参数类型必选备注
idnumber播放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

参数类型必选备注
targetTimenumber设置开始播放的时间,单位毫秒
例子:
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

参数类型必选备注
typestring目前只支持audio/mpeg

例子:

var audioContext = BK.createAudioContext();
audioContext.canPlayType('audio/mpeg');

resume(object)

恢复音频,仅effect支持

参数 object

参数类型必选备注
idnumber默认恢复所有,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

参数类型必选备注
idnumber停止某个音频

例子:

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

参数类型必选备注
listenerfunction事件回调

例子:

var soundPool = BK.createAudioContext();
var normalMusic = "GameRes://music.mp3";
soundPool.autoplay = true;
soundPool.src = normalMusic;
BK.onAudioInterruptionStart(function(){

});

BK.onAudioInterruptionEnd(listener)

音频中断结束,effect支持

参数 listener

参数类型必选备注
listenerfunction事件回调
例子:
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();
});

属性和事件列表

属性备注
currentTimenumber 当前时间
durationnumber 时长
srcstring 设置之后会触发load调用
loopboolean 循环
autoplayboolean 自动播放,需要在设置src之前设置
pausedboolean
volumenumber 从0到1
mutedboolean 静音
事件名备注
canplay可以开始执行播放
canplaythrough可以开始执行播放
ended结束播放
error出错
loadeddata加载完成
loadedmetadata加载完成
loadstart开始加载
pause暂停
play播放
playing播放中
seeked时间调整成功
seeking时间调整中
timeupdate时间刷新,1秒刷新一次
volumechange音量变化