denote

Portal and facade for audio-to-symbol tools (MIDI, chords, pitch from audio).

Denote wraps multiple audio analysis backends behind a unified Python interface. Each backend is an optional dependency — install only what you need.

Install

pip install denote                          # core only (librosa)
pip install denote[basic_pitch]             # + MIDI transcription
pip install denote[torchcrepe]              # + GPU pitch estimation
pip install denote[all]                     # everything

Quick Start

import denote

# Audio to MIDI (requires basic-pitch)
result = denote.transcribe("song.wav")
result.midi  # pretty_midi.PrettyMIDI object
result.notes  # list of NoteEvent(start_time, end_time, pitch, velocity)

# Pitch estimation (requires torchcrepe, or falls back to librosa pYIN)
pitch = denote.get_pitch("vocal.wav")
pitch.times  # timestamps in seconds
pitch.frequencies  # Hz (NaN for unvoiced)
pitch.confidence  # voicing confidence

# Beat tracking (uses librosa, no extra install needed)
beats = denote.get_beats("song.wav")
beats.beats  # beat times in seconds
beats.tempo  # BPM estimate

Choose Your Backend

# See what's available
denote.list_backends()  # all registered backends
denote.list_backends("pitch")  # ['librosa_pyin', 'torchcrepe']

# Specify a backend explicitly
pitch = denote.get_pitch("vocal.wav", backend="librosa_pyin")

Service-Level Access

For more control, access backends via the service layer:

# Per-backend service handle
denote.services.basic_pitch.transcribe("song.wav", onset_threshold=0.3)
denote.services.torchcrepe.get_pitch("vocal.wav", model="tiny", device="cuda")

# Native adapter (full backend API)
denote.services.basic_pitch.adapter

Supported Backends

Backend

Task

License

Install

Basic Pitch (Spotify)

MIDI transcription

Apache 2.0

pip install denote[basic_pitch]

torchcrepe

Pitch estimation

MIT

pip install denote[torchcrepe]

librosa pYIN

Pitch estimation

ISC

(included)

librosa beats

Beat tracking

ISC

(included)

More backends coming: pesto-pitch, madmom, autochord, beat-this, demucs.

Plugin System

Register your own backends:

import denote

denote.register_backend(
    "my_tool",
    config={
        "name": "my_tool",
        "tasks": ["transcribe"],
        "pip_install": "my-tool",
    },
    adapter=MyAdapter(config),
)

This documentation as a single file: denote.md (Markdown, for agents).

built 2026-10-13 19:58 UTC from 0fb1c0b (main) · denote 0.0.5 · about this build