ios-webgl音频问题
目录
ios webgl音频问题
问题描述:
使用audiosource播放音频。一个audiosource播放背景音;一个audiosource播放音效;一个audiosource播放语气
在android上没有问题。
但是在ios上遇到问题,声音一卡一卡的。
做了几个尝试:
-
使用audiocontext播放,但是ios上丝毫未改变啥。而且在android上还报错。
-
使用audio,在android上播放正常,ios不能不正常。
-
使用wx.createinneraudiocontext,android正常,ios上直接卡死。
jslib的代码如下:
mergeInto(LibraryManager.library, {
CallJS: function ()
{
GameGlobal.TestCStoJS();
},
OpenMobuleGame: function ()
{
GameGlobal.nfo.OpenMobuleGame();
},
// 播放背景音乐
PlayBGMByJs: function (srcPtr) {
var src = UTF8ToString(srcPtr);
if (!window._bgmAudio) {
window._bgmAudio = new Audio(src);
} else {
// 如果切换不同的背景音,替换 src
if (window._bgmAudio.src.indexOf(src) === -1) {
window._bgmAudio.pause();
window._bgmAudio = null;
window._bgmAudio = new Audio(src);
}
}
window._bgmAudio.loop = true;
var playPromise = window._bgmAudio.play();
if (playPromise !== undefined) {
playPromise.catch(function (err) {
console.warn("PlayBGM failed:", err);
});
}
},
// 停止背景音乐
StopBGMByJs: function () {
if (!window._bgmAudio) return;
window._bgmAudio.pause();
window._bgmAudio.currentTime = 0;
},
//刷新数据到IndexedDB
SyncDB: function () {
FS.syncfs(false, function (err) {
if (err) console.log("syncfs error: " + err);
});
},
// 初始化 AudioContext(用户交互后调用)
AudioContext_Unlock: function() {
if (!window._audioCtx) {
window._audioCtx = new (window.AudioContext || window.webkitAudioContext)();
}
if (window._audioCtx.state === 'suspended') {
window._audioCtx.resume().then(function() {
console.log("AudioContext 已解锁");
});
}
},
// 播放音频:传入路径字符串(UTF8指针)
AudioContext_Play: function(urlPtr) {
var url = UTF8ToString(urlPtr);
if (!window._audioCtx) {
const AudioCtx = window.AudioContext || window.webkitAudioContext;
window._audioCtx = new AudioCtx();
}
// 停止之前的音频
if (window._bgmSource) {
window._bgmSource.stop();
window._bgmSource.disconnect();
window._bgmSource = null;
}
fetch(url)
.then(function(res) { return res.arrayBuffer(); })
.then(function(arrayBuffer) { return window._audioCtx.decodeAudioData(arrayBuffer); })
.then(function(audioBuffer) {
var source = window._audioCtx.createBufferSource();
source.buffer = audioBuffer;
source.loop = true;
source.connect(window._audioCtx.destination);
source.start(0);
window._bgmSource = source;
})
.catch(function(err) {
console.error("音频加载或播放失败", err);
});
},
// 停止音频
AudioContext_Stop: function() {
if (window._bgmSource) {
window._bgmSource.stop();
window._bgmSource.disconnect();
window._bgmSource = null;
}
}
})
不知道有啥好的解决方式。。。。