Safari 上的 AudioContext 问题

AudioContext issue on Safari

我正尝试在我的打字稿文件中为 Angular 5 应用程序使用 AudioContext。它在 Chrome 上运行良好,但不适用于 Safari。我通过谷歌搜索看到的所有内容都说要使用 window.webkitAudioContext 但是当打字稿编译器运行时说它不存在于类型 Window.

let context = new AudioContext();
let source = context.createBufferSource();
context
    .decodeAudioData(event.body)
    .then(x => {
        source.buffer = x;
        source.connect(context.destination);
        source.start(0);
    });

您可以将 window 转换为 any:

(window as any).AudioContext = (window as any).AudioContext || (window as any).webkitAudioContext;
let context = new AudioContext();

您应该扩展 Window 接口,然后扩充 window 对象。

假设您正在使用 angular-cli,将以下内容添加到您的 typings.d.ts 文件中:

declare interface Window {
  AudioContext: AudioContext;
}

然后在 polyfills.ts 文件中,您可以设置 AudioContext 属性:

window.AudioContext = window.AudioContext || window.webkitAudioContext;

我选择了这条线:

const audioContext: AudioContext = new (window["AudioContext"] || window["webkitAudioContext"])();

您必须将所需的属性添加到全局命名空间中的 Window 接口。

declare global {
  interface Window {
    AudioContext: typeof AudioContext;
    webkitAudioContext: typeof AudioContext;
  }
}

const context = new (window.AudioContext || window.webkitAudioContext)();