Skip to content

Repository files navigation

nbplay

let's play!

Build Status codecov License PyPI Binder

Overview

Warning

This library is in early development and the API is subject to change without deprecation. Feedback and contributions are very welcome!

Music composition widgets in a jupyter notebook

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.