Safari上的AudioContext

时间:2015-03-31 16:23:49

标签: javascript webkitaudiocontext

昨天,我有a question about the noteOn method of the AudioContext object。 我现在已经在这个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使其适用于所有浏览器?

2 个答案:

答案 0 :(得分:15)

浏览器支持限制

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

无论如何,您仍然可以使用功能检测在支持的浏览器上使用Web Audio API(请参阅下文),或者只是检查您的浏览器是否支持它here。看看并找到您的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是唯一现有的供应商前缀AudioContext,因为Mozilla和Opera使用常规的无前缀对象,IE不支持Web Audio API尚未。

答案 1 :(得分:2)

  var AudioContext = window.AudioContext // Default
      || (window as any).webkitAudioContext;// Safari and old versions of Chrome

    this.audioContext = new AudioContext();