Skip to content

JavaScript

Loading Releases

Check the JavaScript module using the OpenScofo descriptors.

This module exposes OpenScofo to JavaScript via Emscripten bindings. It enables browser-based score following, real-time processing, and offline analysis.

Overview

The bindings wrap the core C++ API and expose:

  • Core OpenScofo engine
  • Audio feature descriptors
  • Markov states and score tracking
  • Configuration parameters
  • Processing functions

Errors from the internal logger are forwarded to JavaScript: - error / critical → thrown as exceptions - info / debug → printed to console


Module Usage

After compiling with Emscripten, the module can be used as:

const scofo = new OpenScofo.OpenScofo(sampleRate, blockSize, hopSize);

Types

VectorDouble

let v = new OpenScofo.VectorDouble();

Used for arrays of numeric data exchanged with the engine.

Description

Audio descriptor container (per block).

desc.mfcc
desc.logmelspectrum
desc.chroma
desc.onset
desc.silence
desc.ext
desc.max_amp
desc.loudness
desc.flux
desc.irregularity
desc.crest
desc.centroid
desc.magnitude
desc.spreadhz
desc.spread_variance
desc.flatness
desc.skewness
desc.slope
desc.kurtosis
desc.centroid_velocity
desc.hfr
desc.harmonicity
desc.zcr
desc.stddev
desc.pitch
desc.pitch_confidence
desc.db
desc.rms
desc.magnitude

MarkovState

Represents a state in the score-following model.

state.position
state.type
state.markov
state.forward
state.bpm_expected
state.bpm_observed
state.onset_expected
state.onset_observed
state.phase_expected
state.phase_observed
state.ioi_phi_n
state.ioi_hat_phi_n
state.audio_states
state.duration
state.line

OpenScofo Class

Constructor

var oscofo = null;
OpenScofo().then(async (mod) => {
    wasmModule = mod;
    oscofo = new mod.OpenScofo(48000, 2048, 512);
});

Score

scofo.parse_score(scoreText)

Configuration

scofo.set_db_threshold(value)
scofo.set_tuning(a4)
scofo.set_current_event(index)
scofo.load_onnx_model(path)
scofo.set_amplitude_decay(value)
scofo.set_harmonics(count)
scofo.set_pitch_template_sigma(value)

Processing

scofo.process_block(audioBuffer)
  • audioBuffer: VectorDouble or compatible array
  • Processes one audio frame

Getters

scofo.get_live_bpm()
scofo.get_event_index()
scofo.get_states()
scofo.get_pitch_template()
scofo.get_block_duration()
scofo.get_audio_description()

Minimal Example

const scofo = new OpenScofo.OpenScofo(44100, 1024, 512);

scofo.parse_score(scoreText);

let buffer = new OpenScofo.VectorDouble();
// fill buffer with audio samples

scofo.process_block(buffer);

let bpm = scofo.get_live_bpm();
let state = scofo.get_event_index();
let desc = scofo.get_audio_description();

Notes

  • Designed for real-time and browser contexts
  • Compatible with Web Audio pipelines
  • Can be used with AudioWorklets for low-latency processing
  • ONNX model loading requires proper file access setup in Emscripten

The API closely mirrors the C++ interface, enabling consistent behavior across environments.