1

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

  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()?;

链接到完整示例


虽然这种方法适用于大多数 Web 系统,但对于需要您扩展类的系统来说并不那么简单。在这种情况下,我正在尝试使用AudioWorkletProccessorwasm-bindgen

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


我该如何解决这个问题?首先我需要AudioWorkletProcessor在 Rust 中扩展(它不做普通的类和继承),覆盖它的process()功能。然后我需要确保registerProcessor()注入到我的生锈空间。


编辑:关于扩展的 WASM 文档

4

1 回答 1

2

您必须在 JavaScript 端执行此操作。wasm-bindgen不支持扩展导入的类并将它们重新导出为 JavaScript;但是,他们确实希望最终支持它,并且存在跟踪它的问题,以及相关的RFC

于 2020-09-15T15:45:25.803 回答