在 wasm-bindgen 中扩展 AudioWorkletProcessor?

Extend AudioWorkletProcessor in wasm-bindgen?

有关如何使用 wasm-bindgen 在 rust -> wasm 流程中使用现有 javascript 网络系统的文档非常简单。简而言之:

  1. 将需要的功能列为依赖项
// cargo.toml

[dependencies.web-sys]
version = "0.3.4"
features = [
  'AudioContext',
  'OscillatorNode'
]
  1. 通过 web_sys 访问,并从那里正常对待它们。
// lib.rs

#[wasm_bindgen]
impl FmOsc {
    #[wasm_bindgen(constructor)]
    pub fn new() -> Result<FmOsc, JsValue> {
        let ctx = web_sys::AudioContext::new()?;
        let primary = ctx.create_oscillator()?;
        let fm_osc = ctx.create_oscillator()?;

Link 到 full example


虽然这种方法适用于大多数 Web 系统,但对于需要扩展 class 的系统来说就没那么简单了。在这种情况下,我尝试使用 AudioWorkletProccessor from wasm-bindgen

在标准用法中,您应该扩展 AudioWorkletProcessor class,然后注册它。 MDN Example


我该如何解决这个问题?首先,我需要在 Rust 中扩展 AudioWorkletProcessor(它不执行正常的 classes 和继承),覆盖其 process() 函数。然后我需要确保 registerProcessor() 被注入我的铁锈 space.


编辑:WASM docs on extends

您必须在 JavaScript 端执行此操作。 wasm-bindgen 不支持将导入的 类 和 re-exporting 扩展到 JavaScript;但是,他们确实希望最终支持它,并且有一个 issue to track it, and a related RFC.