Web Audio API的简单用法:
var UnprefixedAudioContext = window.AudioContext || window.webkitAudioContext;
var context;
var volumeNode;
var soundBuffer;
context = new UnprefixedAudioContext();
volumeNode = context.createGain();
volumeNode.connect(context.destination);
volumeNode.gain.value = 1;
context.decodeAudioData(base64ToArrayBuffer(getTapWarm()), function (decodedAudioData) {
soundBuffer = decodedAudioData;
});
function play(buffer) {
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(volumeNode);
(source.start || source.noteOn).call(source, 0);
};
function playClick() {
play(soundBuffer);
}
UIWebView
内的工作正常(播放声音);但是当你切换到音乐应用程序并播放一首歌曲,然后使用UIWebView
回到应用程序时,歌曲就会停止播放。
Safari中的相同代码没有此问题。
是否有解决方法可以避免此行为?
这是完整的小提琴:
答案 0 :(得分:1)
你在iOS上吗?这听起来像是一个音频会话类别问题。 iOS应用程序定义其音频与音频的交互方式。来自Apple's documentation:
每个音频会话类别指定“是”的特定模式 如下表所示,以下每种行为均为“否” B-1:
中断不可混合的应用音频:如果是,那么非混音应用将是 当您的应用激活其音频会话时中断。
静音开关静音:如果是,您的音频会在静音时静音 用户将静音开关移动到静音。 (在iPhone上,这个开关是 称为Ring / Silent开关。)
支持音频输入:如果是,则允许应用音频输入(录制)。
支持音频输出:如果是,则应用音频输出(播放) 允许的。
默认类别默认来自其他应用的音频:
AVAudioSessionCategorySoloAmbient-(默认)仅播放。沉默 当用户将振铃/静音开关切换到“静音”时音频 位置和屏幕锁定时。这个类别不同于 AVAudioSessionCategoryAmbient类别只是因为它中断了 其他音频。
这里的关键在于最后一句:"它会中断其他音频"。
您可以使用许多其他类别,具体取决于您是否希望在屏幕锁定时音频静音等。AVAudioSessionCategoryAmbient
不会使音频静音。
尝试在应用的Objective-c部分尝试:
NSError *setCategoryError = nil;
BOOL success = [[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryAmbient
error: &setCategoryError];
if (!success) { /* handle the error in setCategoryError */ }