Quick Start
Sonoscope is available as three specialized packages across JavaScript, React, and Python environments.
Installation
Section titled “Installation”npm install @sonoscope/corenpm install @sonoscope/react @sonoscope/corepip install sonoscope# or with uvuv add sonoscopeBasic Usage
Section titled “Basic Usage”1. Vanilla TypeScript / JavaScript
Section titled “1. Vanilla TypeScript / JavaScript”Use Sonoscope to manage audio loading and attach visualization viewers.
import { Sonoscope } from '@sonoscope/core';
// Initialize Sonoscope from an HTML <audio> elementconst audioElement = document.querySelector('audio');const scope = await Sonoscope.fromAudio(audioElement);
// Render Spectrogram on a canvasconst canvas = document.querySelector('canvas#spectrogram');const spec = scope.createSpectrogram(canvas, { colorMap: 'viridis', frequencyScale: 'mel', minDb: -80, maxDb: 0,});
// Enable interactive zoom and pan (defaults to both time and frequency axes)scope.attachNavigation(canvas);
// Or customize navigation axes, modifiers, and sensitivities:// scope.attachNavigation(canvas, {// axis: 'both',// wheel: { zoomModifier: 'alt' },// drag: { modifier: 'none' },// });2. React
Section titled “2. React”Wrap viewers with SonoscopeProvider and compose TimeRuler, Spectrogram, and Waveform.
import { SonoscopeProvider, Spectrogram, Waveform, TimeRuler } from '@sonoscope/react';
export function AudioViewer() { return ( <SonoscopeProvider url="/audio/sample.wav"> <TimeRuler height={24} /> <Spectrogram height={300} colorMap="inferno" frequencyScale="mel" showAudioControls /> <Waveform height={80} /> </SonoscopeProvider> );}3. Python (Jupyter / Marimo)
Section titled “3. Python (Jupyter / Marimo)”from sonoscope import Sonoscopeimport numpy as np
# Create widget from local filewidget = Sonoscope.from_file("recording.wav", cmap="viridis")display(widget)
# Or create directly from NumPy arrayssr = 44100t = np.linspace(0, 3.0, sr * 3, endpoint=False)signal = np.sin(2 * np.pi * 440 * t)
Sonoscope.from_array(signal, sample_rate=sr, frequency_scale="log")