问题标签 [audio-worklet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
594 浏览

javascript - 如何使用 Audioworklet 对振荡器进行编码?

0 投票
1 回答
373 浏览

javascript - AudioWorklet 和 GainNode 控制音量

我正在尝试使用 AudioWorklet 和 GainNode 进行音量控制,但它不起作用,没有 AudioWorket 它运行良好。

这是实现

这是我设置新音量的方式。

0 投票
1 回答
1261 浏览

javascript - 使用 Audio Worklets 时如何修复“破解”音频?

我试图了解如何AudioWorklet工作并进行了一些测试。

到目前为止,当我让浏览器在后台播放声音并执行其他操作(例如,打开像 Photoshop 或 VSCode 这样的 CPU 密集型应用程序并四处移动窗口)时,我遇到了一个巨大的“破解”问题。

一开始我以为是硬件问题。我升级到 Catalina,删除了我找到的所有系统音频扩展,但在 Android 和其他一些朋友的计算机(Mac、PC)上都是一样的。

我自己使用的是版本 1.0.1 Chromium: 78.0.3904.108 (Official Build) (64-bit)

YouTube 视频演示了破解音频问题。

我做了两个 CodePen 演示,你可以在这里测试:

网络音频破解(Vanila + 无 Worklet)

网络音频破解(Vanila + Worklet)

您将听到的钢琴 MP3 是在录音室录制的 48000Hz / 32bits / 320kb 音频。

在提交任何错误之前,我需要确保我的代码是正确的。也许我没有以应有的方式链接事物。

0 投票
2 回答
97 浏览

web-audio-api - 使用优化级别 02 和 03 编译 Wasm 模块以加载到 AudioWorlet?

我正在尝试编译一个带有额外优化的 .wasmmodule.js,以便在 AudioWorklet 中运行。

我使用 .post.js 文件将“导出默认模块”附加到已编译的 Wasm,使用 --post-js 编译标志。这适用于 01 优化,这是工作集设计模式示例中使用的当前编译配置。

我遇到了优化标志 02 和 03 的编译问题,因为我需要使用默认导出加载 Wasm。

如果我评论 --post.js 导出,编译运行良好,优化级别为 02 或 03。但是,我们无法将 Wasm 加载到工作集中,但有以下例外:

例如“加载工作集时出错:SyntaxError: 请求的模块 '../../build/m.wasmmodule.js' 不提供名为 'default 的导出

我尝试了不同的组合,但我无法克服这一点。

如果我可以尝试任何不同的配置,有什么想法吗?

非常感谢

0 投票
2 回答
1362 浏览

javascript - 如何将模块导入在其他地方更改的 AudioWorkletProcessor?

我正在尝试从另一个模块更改 AudioWorkletProcessor 使用的值,但从 AudioWorkletProcessor 的上下文来看,该值不会改变并且保持不变。但是从修改数据的模块来看,当查询到数据时,实际上已经发生了变化。就像有一个完全独立的模块实例/状态,它为修饰符(main.js)和读取器(audio-processor.js)保存数据(functions.js)

在这里我们有audio-processor.js

这里我们有functions.js,它包含被导入到的 sawWave()audio-processor.js

这里我们有main.js,它处理来自 HTML 页面的输入

编辑:我认为你只应该使用AudioWorkletProcessor.portparameters过程函数中的参数来与之通信?

0 投票
1 回答
485 浏览

javascript - AudioWorklet 是否为在 PC 和 Android 上播放声音 Chrome 提供最低延迟?

我尝试了音频 html 标签、tonejs、音频 web api,但我仍然有大约 110 毫秒的时间使用 android 和 PC 的浏览器(chrome)。

我看到有这个 JavaScript 音频 worlet ( super() ) 但我不知道是否可以在这个过程中播放样本

0 投票
1 回答
598 浏览

javascript - 如何检查特定模块是否已添加到 Worklet?

我正在AudioWorkletNode使用它,要使用它,它需要您首先在audio_context.audioWorklet.


由于我的代码的模块化特性,我需要一种可靠的方法来防止处理器模块不必要的多次加载;如果.addModule已经对给定的AudioContext. 除了在对象上标记和标记之外trycatch还有其他方法吗?AudioContext

0 投票
1 回答
744 浏览

javascript - 将 AudioBuffer 发送到扬声器

这是我想要做的:

  1. 将麦克风音频发送到 AudioWorketProcessor (works)
  2. 使用 WebSockets 将结果从 AudioWorkletProcessor 发送到服务器(有效)
  3. 通过 WebSockets 接收数据(工作)
  4. 将数据发送到计算机的扬声器(怎么做?)

一切正常,除了我不知道如何实现#4。这就是我所拥有的,简化了一些事情以专注于问题:

//1. 设置音频上下文的代码。将麦克风连接到工作集

//2。AudioWorklet 处理器。将音频发送到 WebSocket,WebSocket 将其以二进制形式发送到服务器:

//3 和 4. 最后,服务器完全按照收到的数据发回。WebSocket 将其转换为 ArrayBuffer(512)。在这里,我想尽一切努力将其作为音频输出到计算机的扬声器:

任何指导将不胜感激。

0 投票
1 回答
451 浏览

javascript - 使用 AudioWorkletProcessor 进行低延迟音频调度?

我有一个使用以下设置的交互式音乐排序应用程序:

  1. 用户在 UI 中进行更改以操作音频节点图。
  2. 一个简单的 WebWorker 负责保持时间。它定期向主线程发送一条“tick”消息。
  3. 主线程中的侦听器接收消息并执行歌曲中的下一步(使用 AudioBufferSourceNode.start 播放样本、调整音量参数等)。

在 WebWorker 中使用计时器比仅使用 setInterval 更可靠,但在主线程处理消息之前仍可能存在延迟,从而导致音频故障。

似乎理想的解决方案是在 WebWorker 中执行第 3 步,但在 worker 中不支持 AudioContext。这样一来,AudioWorklet 就成为了唯一的低延迟网络音频 API。但它是图中的一个节点,而我正在寻找一种方法来管理整个事情。除了重写整个系统以在 AudioWorkletProcessor 中运行(大量工作)之外,有没有办法使用处理器进行精确调度,但保留现有的图形结构?

0 投票
0 回答
122 浏览

javascript - AudioWorklet 修改麦克风输入

AudioWorklet我想在 chrome 扩展中使用 , 实时修改麦克风输入。

举一个简单的例子,我只想传输一个振荡波,就像在这个 plnkr中一样,其中一个被传输到output.

我首先创建工作集:

然后,我连接一个麦克风:

在示例 plnkr 中processor.js,我没有修改输出,而是修改了输入,将第 15 行设置为:

但不幸的是,这不会修改麦克风。如果我只是播放麦克风音频,我听不到振荡器