我有一个使用Tone.js的应用程序,我专门使用GrainPlayer对象。它在不同操作系统和设备的不同浏览器上运行得非常好。。。iOS除外。我个人没有iOS设备,但客户向我显示iOS没有播放音频。它也不局限于狩猎;设备上的其他浏览器也不会播放音频。
我知道这是一个特定于Tone.js的问题,因为我也使用Howler.js来处理一些不需要Tone GrainPlayer类的声音,以及这些工作。一般来说,这也不是AudioContext的问题,因为我有以下代码:
Tone.setContext(Howler.ctx);
这确保音调的AudioContext通过Howler的AudioCntext进行路由。
有办法让它发挥作用吗?我需要继续使用GrainPlayer,因为它具有独特的属性和功能,所以很遗憾,切换出来对我来说不起作用。我没有办法从开发者的角度来诊断它,因为我没有iOS设备,即使这样,他们也没有办法打开开发者控制台。。。但它似乎并没有破坏代码或任何东西,只是似乎"忽略"了播放的声音,然后继续前进
有问题的声音是这样产生的:
standardChord[0] = new Tone.GrainPlayer('/A.flac').connect(Howler.masterGain);
然后当需要播放时:
standardChord[0].start();
正如我所说,它在其他设备上运行良好。
最后,不确定这是否重要,但这是我正在运行的Meteor应用程序,绑定到Node.js中进行部署。
在我的项目中,我有一行简单的代码可以在我的initAudio()
方法中完成任务:
// necessary for Safari
synth.context.resume();
CCD_ 5只是一个多同步振荡器。
但如果iPhone或iOS设备处于静音状态,则此解决方案不起作用。
ps。在iOS 16.2 上测试