AudioContext:getOutputTimestamp() 方法

Baseline 已广泛支持

此特性已得到良好支持,可在多种设备和浏览器版本上使用。自 2021 年 4 月起,所有浏览器均已支持此特性。

AudioContext 接口的 getOutputTimestamp() 方法返回一个新的 AudioTimestamp 对象,其中包含与当前音频上下文相关的两个音频时间戳值。

这两个值如下:

  • AudioTimestamp.contextTime:音频输出设备当前正在渲染的采样帧的时间(即,输出音频流的位置),单位和原点与上下文的 AudioContext.currentTime 相同。基本上,这是音频上下文首次创建后的时间。
  • AudioTimestamp.performanceTime:一个估算值,表示与存储的 contextTime 值对应的采样帧被音频输出设备渲染的时刻,单位和原点与 performance.now() 相同。这是包含音频上下文的文档首次渲染后的时间。

语法

js
getOutputTimestamp()

参数

无。

返回值

一个 AudioTimestamp 对象,它具有以下属性。

  • contextTimeBaseAudioContext 的时间坐标系统中的一个点;音频上下文首次创建后的时间。
  • performanceTimePerformance 接口的时间坐标系统中的一个点;包含音频上下文的文档首次渲染后的时间。

示例

在下面的代码中,我们在播放按钮被点击后开始播放音频文件,并启动一个 requestAnimationFrame 循环,该循环会不断输出 contextTimeperformanceTime

您可以在 output-timestamp 的完整代码也可以在线查看)中找到此示例。

js
// Press the play button
playBtn.addEventListener("click", () => {
  // We can create the audioCtx as there has been some user action
  audioCtx ??= new AudioContext();
  source = new AudioBufferSourceNode(audioCtx);
  getData();
  source.start(0);
  playBtn.disabled = true;
  stopBtn.disabled = false;
  rAF = requestAnimationFrame(outputTimestamps);
});

// Press the stop button
stopBtn.addEventListener("click", () => {
  source.stop(0);
  playBtn.disabled = false;
  stopBtn.disabled = true;
  cancelAnimationFrame(rAF);
});

// Helper function to output timestamps
function outputTimestamps() {
  const ts = audioCtx.getOutputTimestamp();
  output.textContent = `Context time: ${ts.contextTime} | Performance time: ${ts.performanceTime}`;
  rAF = requestAnimationFrame(outputTimestamps); // Reregister itself
}

规范

规范
Web Audio API
# dom-audiocontext-getoutputtimestamp

浏览器兼容性