在我被喷死之前,我知道由于苹果担心自动下载音频文件,这目前不起作用。
但是,我的问题是:有人找到了一个狡猾的解决方法吗?我只是想在游戏启动时播放启动声音,目前必须等待用户在某处单击后才能播放音频。你们中的聪明人肯定已经解决了这个问题,对吧?
在我被喷死之前,我知道由于苹果担心自动下载音频文件,这目前不起作用。
但是,我的问题是:有人找到了一个狡猾的解决方法吗?我只是想在游戏启动时播放启动声音,目前必须等待用户在某处单击后才能播放音频。你们中的聪明人肯定已经解决了这个问题,对吧?
在移动浏览器中无法使用自动播放功能。Android和iOS不允许它,我个人认为这是一个可行的限制!想象一下,每打开一个网站,就会播放出讨厌的声音!
但是,您可以进行一些小的修改,以便用户不会注意到他当前启动了您应用程序的音频:
您需要用户交互才能启动音频。因此,您的应用程序或游戏可能具有启动屏幕或欢迎按钮,需要单击才能进入主菜单或开始游戏。绑定用户事件(接受的事件是:“click”,“touchend”,“doubleclick”和“keydown”),并调用您的
绑定
我还建议您在移动客户端上使用音频精灵。iOS(和Android?)通过Singleton内部实现了音频支持。这意味着您不能像在桌面浏览器中那样拥有10个音频元素并同时播放不同的声音。您只能播放一个文件!因此,更改不同声音的源需要太多时间。使用音频精灵,可以在用户首次与您的网站或游戏进行交互时启动它们。暂停您的精灵,当您需要播放声音时,必须将currentTime设置为精灵的开头,并在您的文件的currentTime到达精灵结尾时暂停精灵。有一个timeupdate事件,您可以检查精灵的currentTime。
如果您更感兴趣,我可以为您准备Javascript音频应用程序播放器!!
AudioContext
的机会;请参见我的答案https://dev59.com/31sW5IYBdhLWcg3wi32j#46485784 - XenosUIWebView.allowsInlineMediaPlayback = YES;
UIWebView.mediaPlaybackRequiresUserAction = NO;
HowlerJS创建了一个解决方法。用户不需要允许自动播放就可以自动播放音频。
文档中对此解决方法的说明:
howler.js是现代Web的音频库。它默认使用Web Audio API,并回退到HTML5音频。这使得在JavaScript中处理音频易于跨所有平台进行可靠操作。
player.load()
,之后每当你设置player.src = x;
时,它将自动播放。
<audio id="voicePlayer" controls autoplay playsinline #voicePlayer></audio>
@ViewChild('voicePlayer', { read: ViewContainerRef }) voicePlayerRef: ViewContainerRef;
...
ngAfterContentInit(): void {
this.voicePlayer = this.voicePlayerRef.element.nativeElement;
document.addEventListener('click', this._onDocumentClick.bind(this));
}
_onDocumentClick() {
this.voicePlayer.load();
document.removeEventListener('click', this._onDocumentClick);
}
...
this.voicePlayer.src = 'x';
我相信我刚刚为自己的应用程序解决了这个问题。
步骤如下:
控制器加载,
然后...在viewDidLoad中
让您的Web视图加载HTML:loadHTMLString:htmlFile baseURL:[self getBasePath]];
然后...设置mediaPlaybackRequiresUserAction = NO,适用于WebView。
如果您设置得太早,我认为HTML的加载会重置它。
AudioContext
的解决方案,但是我没有在Safari上尝试过(如果您有Safari移动端,请确认它是否有效)。请参阅我的类似问题的答案https://dev59.com/31sW5IYBdhLWcg3wi32j#46485784 [让我们希望从现在开始@boz是最后一个无功而返的搜索者☺] - Xenos