Skip to content

API JavaScript

Utilisez les liaisons WebAssembly de Neuroscript pour compiler et exécuter Neuroscript à l'intérieur d'outils basés sur le navigateur, y compris les espaces de jeu de la documentation et les démos personnalisées.

Construire le package WASM

Depuis la racine du dépôt :

bash
cd neuroscript-rs
wasm-pack build crates/neuroscript-wasm --target web

Intégrez le package généré (neuroscript-rs/crates/neuroscript-wasm/pkg) dans votre application web.

Démarrage rapide

javascript
import init, { WasmEngine, compile_only } from "neuroscript-wasm";

await init();

compile_only("note @1 => note\n");

const engine = new WasmEngine("note @1 => note\n");
const outputs = await engine.runEvent(
  {
    kind: "Note",
    ch: 1,
    data1: 60,
    data2: 100,
    timestamp_ns: Date.now() * 1_000_000,
  },
  { bpm: 120, beat: 4_000_000 },
  Date.now() * 1_000_000
);

console.log(outputs);

Surface de l'API

  • compile_only(source: string): void compile et valide la source.
  • new WasmEngine(source: string) compile et alloue l'état.
  • engine.runEvent(event, transport?, nowNs?) exécute un événement MIDI.
  • engine.recompile(source: string) remplace le programme compilé.
  • engine.resetState() efface l'état du moteur.

Formes d'événement et de transport

ts
type MidiEvent = {
  kind: "Note" | "NoteOn" | "NoteOff" | "CC" | "Clock" | "Start" | "Stop";
  ch: number;
  data1: number;
  data2: number;
  timestamp_ns: number;
};

type Transport = {
  bpm?: number | null;
  beat?: number | null;
};

L'argument transport est optionnel. Si nowNs est omis, le moteur utilise event.timestamp_ns.

Où l'utiliser

Utilisez ces liaisons pour les espaces de jeu dans le navigateur, les exemples de documentation ou tout site nécessitant de compiler et d'exécuter Neuroscript sans backend natif.

Intégration de la documentation

Lors de la construction du site de documentation, copiez le package WASM dans docs/web/public/neuroscript-wasm afin que l'espace de jeu puisse le charger comme une ressource statique. Le Makefile inclut une cible d'aide pour cela.

Créé avec ❤️ pour les musiciens