有关如何rust -> wasm
使用 wasm-bindgen 在流程中使用现有 javascript Web 系统的文档非常简单。简而言之:
- 将所需的功能列为依赖项
// cargo.toml
[dependencies.web-sys]
version = "0.3.4"
features = [
'AudioContext',
'OscillatorNode'
]
- 通过 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()
注入到我的生锈空间。