27

昨天,我有一个关于 AudioContext 对象的 noteOn 方法的问题。我现在已经在这个 AudioContext 对象上彻底改变了自己。这是我在桌面上的 Safari 中尝试过的方法及其相关的错误消息:

	var ctx
//	ctx = new(AudioContext || webkitAudioContext); // ReferenceError: Can't find variable: AudioContext
//	ctx = new(audioContext || webkitAudioContext); // ReferenceError: Can't find variable: audioContext
//	ctx = new(window.AudioContext || webkitAudioContext); // ReferenceError: Can't find variable: webkitAudioContext
	ctx = new(window.AudioContext || window.webkitAudioContext);
// TypeError: 'undefined' is not a constructor (evaluating 'new(window.AudioContext || window.webkitAudioContext)')

问:如何定义 myAudioContext 使其适用于所有浏览器?

4

2 回答 2

42

浏览器支持限制

并非所有浏览器都支持Web Audio API (id est )。AudioContext某些浏览器可能会将其前缀为供应商前缀,但较旧的浏览器根本不支持它。因此,要回答您的问题:您不能AudioContext所有浏览器上都使用 。

尽管如此,您仍然可以使用功能检测(见下文)在受支持的浏览器上使用 Web Audio API,或者在此处检查您的浏览器是否支持。查看并找到您的 Safari 版本:该站点会告诉您该功能是否可用,如果有前缀,您必须使用哪个前缀。

AudioContext特征检测

为确保您可以在任何支持的浏览器上使用 Web Audio API ,您可以使用特征检测以及对供应商前缀对象的相对回退。如果该AudioContext对象不受支持,您将停止执行脚本并提醒用户。这是一个例子:

var AudioContext = window.AudioContext // Default
    || window.webkitAudioContext // Safari and old versions of Chrome
    || false; 

if (AudioContext) {
    // Do whatever you want using the Web Audio API
    var ctx = new AudioContext;
    // ...
} else {
    // Web Audio API is not supported
    // Alert the user
    alert("Sorry, but the Web Audio API is not supported by your browser. Please, consider upgrading to the latest version or downloading Google Chrome or Mozilla Firefox");
}

请注意,截至目前webkit是唯一现有的 vendor-prefixed AudioContext,因为 Mozilla 和 Opera 使用常规的无前缀对象,而 IE 还不支持 Web Audio API。

于 2015-03-31T16:38:53.510 回答
2
  var AudioContext = window.AudioContext // Default
      || (window as any).webkitAudioContext;// Safari and old versions of Chrome

    this.audioContext = new AudioContext();
于 2020-06-22T12:41:38.883 回答