Расширить структуру web-sys в wasm-bindgen? (В частности, AudioWorkletProcessor в Rust)
Документы о том, как использовать существующие веб-системы javascript в
rust -> wasm
поток с использованием wasm-bindgen довольно прост. Коротко:
- Перечислите необходимые функции как зависимости
// cargo.toml
...omitted...
[dependencies.web-sys]
version = "0.3.4"
features = [
'AudioContext',
'OscillatorNode'
]
- Доступ через web_sys и оттуда относитесь к ним как к обычному.
// lib.rs
...omitted...
#[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()?;
...omitted...
Ссылка на полный пример: https://rustwasm.github.io/docs/wasm-bindgen/examples/web-audio.html
Хотя этот подход работает для большинства веб-систем, он не так прост для тех, которые требуют от вас расширения класса. В этом случае я пытаюсь использовать AudioWorkletProccessor из
wasm-bindgen
При стандартном использовании вы должны расширить
AudioWorkletProcessor
class, затем зарегистрируйте его. Пример Mdn: https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Using_AudioWorklet#Basic_code_framework
Как я могу подойти к этой проблеме? Сначала мне нужно продлить
AudioWorkletProcessor
в Rust (который не выполняет обычные классы и наследование), переопределив его
process()
функция. Тогда мне нужно убедиться
registerProcessor()
впрыскивается в мое пространство ржавчины.
РЕДАКТИРОВАТЬ: https://rustwasm.github.io/docs/wasm-bindgen/reference/attributes/on-js-imports/extends.html
1 ответ
Вам нужно будет сделать это на стороне JavaScript.
wasm-bindgen
не поддерживает расширение импортированных классов и их повторный экспорт в JavaScript; тем не менее, они действительно хотят поддержать его в конечном итоге, и существует проблема для его отслеживания и связанный с ним RFC.