let's play!
Warning
This library is in early development and the API is subject to change without deprecation. Feedback and contributions are very welcome!
nbplay provides composable Jupyter widgets for a browser-backed DAW: synths, samplers, sequencers, keyboards, pads, transport, timeline recording, and mixer/session routing. Mixer channels and the master bus support Web Audio insert chains with built-in gain, filter, compressor, limiter, delay, and reverb effects, plus custom browser plugin factories. Custom effect descriptors must be JSON-safe; built-in effect names are reserved. Widgets render non-crashing fallback states when Web Audio or Web MIDI is unavailable.
import nbplay as nb
session = nb.Session()
seq = nb.SequencerWidget(num_voices=2)
sampler = nb.SamplerWidget()
track = session.add_track("Drums", seq, sampler)
session.mixer.add_channel_effect(
track.mixer_channel,
nb.EffectPlugin("compressor", threshold=-18, ratio=4),
)
session.mixer.add_master_effect(nb.EffectPlugin("limiter", threshold=-1))
session.timeline.length = 64
session.timeline.count_in_bars = 1
session.timeline.auto_extend_recording = True
session.timeline.recording_extend_bars = 16
session.timeline.arm_track(track.mixer_channel, True, exclusive=True)
timeline_tracks = [dict(track) for track in session.timeline.tracks]
timeline_tracks[track.mixer_channel]["monitor"] = True
session.timeline.tracks = timeline_tracks
session.timeline.add_clip("Kick loop", track_index=track.mixer_channel, start=0, duration=4)Note
This library was generated using copier from the Base Python Project Template repository.