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 システムで機能しますが、クラスを拡張する必要があるシステムではそれほど単純ではありません。この場合、AudioWorkletProcessorを使用しようとしていますwasm-bindgen
AudioWorkletProcessor
標準的な使用法では、クラスを拡張してから登録することになっています。MDN の例
どうすればこの問題にアプローチできますか? まず、Rust で拡張する必要がありますAudioWorkletProcessor
(これは通常のクラスと継承を行いません)、そのprocess()
機能をオーバーライドします。次に、さびたスペースに確実registerProcessor()
に注入する必要があります。