{"$schema":"https://ui.shadcn.com/schema/registry.json","homepage":"https://www.audio-ui.dev","items":[{"css":{"@keyframes envelope-shake":{"0%":{"animation-timing-function":"cubic-bezier(0.22, 1, 0.36, 1)","translate":"0 0"},"28.57%":{"animation-timing-function":"cubic-bezier(0.22, 1, 0.36, 1)","translate":"6px 0"},"57.14%":{"animation-timing-function":"cubic-bezier(0.22, 1, 0.36, 1)","translate":"-6px 0"},"78.57%":{"animation-timing-function":"cubic-bezier(0.22, 1, 0.36, 1)","translate":"4px 0"},"100%":{"translate":"0 0"}}},"dependencies":["@audio-ui/react"],"description":"An editor for a breakpoint ramp, such as an ADSR shape or an automation curve.","files":[{"path":"envelope.tsx","target":"components/audio-ui/envelope.tsx","type":"registry:ui"}],"name":"envelope","type":"registry:ui"},{"css":{"@keyframes envelope-shake":{"0%":{"animation-timing-function":"cubic-bezier(0.22, 1, 0.36, 1)","translate":"0 0"},"28.57%":{"animation-timing-function":"cubic-bezier(0.22, 1, 0.36, 1)","translate":"6px 0"},"57.14%":{"animation-timing-function":"cubic-bezier(0.22, 1, 0.36, 1)","translate":"-6px 0"},"78.57%":{"animation-timing-function":"cubic-bezier(0.22, 1, 0.36, 1)","translate":"4px 0"},"100%":{"translate":"0 0"}}},"dependencies":["@audio-ui/react"],"description":"A track's automation over its lane in a timeline: an envelope along the whole arrangement, under the same zoom and scroll as the clips, whose line and points alone take the pointer.","files":[{"path":"automation-envelope.tsx","target":"components/audio-ui/automation-envelope.tsx","type":"registry:ui"}],"name":"automation-envelope","type":"registry:ui"},{"description":"A clip's recording drawn on a canvas, a column per pixel of the screen, as its clip plays it: looped, reversed, warped. It draws only what the view shows, and a zoom in the frame it happens.","files":[{"path":"clip-waveform.tsx","target":"components/audio-ui/clip-waveform.tsx","type":"registry:ui"}],"name":"clip-waveform","registryDependencies":["@audio-ui/arrangement"],"type":"registry:ui"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"A clip of an arrangement on its track's lane: move it, trim and fade it, pick a fade's curve, rename it in place and act on it from its menu. A MIDI clip draws its notes across its body.","files":[{"path":"arranged-clip.tsx","target":"components/audio-ui/arranged-clip.tsx","type":"registry:ui"},{"path":"use-arranged-clips.ts","target":"hooks/use-arranged-clips.ts","type":"registry:hook"}],"name":"arranged-clip","registryDependencies":["@audio-ui/clip-waveform","@audio-ui/timeline","@audio-ui/arrangement","@audio-ui/use-arrangement","@shadcn/context-menu"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"Locators and time-signature changes on a timeline's lane: press one to jump there, drag it or use the arrows to move it on the grid, rename or retype it in place, delete either. With the bars of a ruler through those changes, and a hook for the commands behind them.","files":[{"path":"timeline-markers.tsx","target":"components/audio-ui/timeline-markers.tsx","type":"registry:ui"},{"path":"use-timeline-markers.ts","target":"hooks/use-timeline-markers.ts","type":"registry:hook"}],"name":"timeline-markers","registryDependencies":["@audio-ui/timeline","@audio-ui/use-arrangement","@shadcn/context-menu"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"A track's automation: a chooser of the parameter its lane shows, Volume or Pan, for its header, and that parameter's envelope over its lane, standing faint at the mix's value until it is drawn, with a hook for automation mode and the gains and pans moved by hand, which play their mix until enabled again.","files":[{"path":"track-automation.tsx","target":"components/audio-ui/track-automation.tsx","type":"registry:ui"},{"path":"use-track-automation.ts","target":"hooks/use-track-automation.ts","type":"registry:hook"}],"name":"track-automation","registryDependencies":["@audio-ui/automation-envelope","@audio-ui/arrangement","@audio-ui/use-arrangement","@shadcn/button","@shadcn/select"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"A rotary control for continuous parameters, with pointer, wheel and keyboard input.","files":[{"path":"knob.tsx","target":"components/audio-ui/knob.tsx","type":"registry:ui"}],"name":"knob","type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"A linear slider for gain and other continuous parameters.","files":[{"path":"fader.tsx","target":"components/audio-ui/fader.tsx","type":"registry:ui"}],"name":"fader","type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"A two-dimensional control for two parameters at once, with pointer, wheel and keyboard input.","files":[{"path":"xypad.tsx","target":"components/audio-ui/xypad.tsx","type":"registry:ui"}],"name":"xypad","type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"A grid of drum pads struck by pointer, touch or keyboard, with velocity and choke groups.","files":[{"path":"pad.tsx","target":"components/audio-ui/pad.tsx","type":"registry:ui"}],"name":"pad","type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"A piano keyboard for a MIDI pitch range, played with the pointer, touch or the keyboard.","files":[{"path":"piano.tsx","target":"components/audio-ui/piano.tsx","type":"registry:ui"}],"name":"piano","type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"A note editor on a grid: draw, move, resize and select notes, with a playable keyboard and a velocity lane.","files":[{"path":"piano-roll.tsx","target":"components/audio-ui/piano-roll.tsx","type":"registry:ui"}],"name":"piano-roll","registryDependencies":["@audio-ui/timeline"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"A menu that picks a root and a scale and turns the scale on or off, in parts you place, beside items of your own.","files":[{"path":"scale-menu.tsx","target":"components/audio-ui/scale-menu.tsx","type":"registry:ui"}],"name":"scale-menu","registryDependencies":["@shadcn/button","@shadcn/dropdown-menu"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"Finds notes by what they are: a pitch, ranges of velocity, length and chance, in or out of the scale, active or not, every few, or the rest. A form, or the form in a popover.","files":[{"path":"note-find.tsx","target":"components/audio-ui/note-find.tsx","type":"registry:ui"}],"name":"note-find","registryDependencies":["@shadcn/button","@shadcn/input","@shadcn/popover","@shadcn/select"],"type":"registry:ui"},{"description":"The settings of an export in a dialog: the file's format, its bit depth or bitrate, and its level, left as it is, brought to its peak, or to a loudness target for streaming, podcasts or broadcast. Controlled: Export sends the settings","files":[{"path":"export-dialog.tsx","target":"components/audio-ui/export-dialog.tsx","type":"registry:ui"}],"name":"export-dialog","registryDependencies":["@audio-ui/audio-export","@shadcn/button","@shadcn/dialog","@shadcn/select"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"A menu of commands over a piano roll's notes (split, join, quantize, legato, time commands, fit to scale, chance, velocity), with their keys: items and submenus you place, beside items of your own. The commands come as data in lib/note-edits, to run from keys or a toolbar too.","files":[{"path":"note-edit-menu.tsx","target":"components/audio-ui/note-edit-menu.tsx","type":"registry:ui"},{"path":"note-edits.ts","target":"lib/note-edits.ts","type":"registry:lib"}],"name":"note-edit-menu","registryDependencies":["@shadcn/button","@shadcn/dropdown-menu"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The note and the pitch of a sound, live from the microphone, with a needle on a scale of cents.","files":[{"path":"tuner.tsx","target":"components/audio-ui/tuner.tsx","type":"registry:ui"}],"name":"tuner","registryDependencies":["@audio-ui/use-pitch"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"A panel for any device: a knob per number and a toggle per switch, from its descriptors, controlled by a state a host owns.","files":[{"path":"device-panel.tsx","target":"components/audio-ui/device-panel.tsx","type":"registry:ui"}],"name":"device-panel","registryDependencies":["@audio-ui/knob","@audio-ui/waveform-select","@audio-ui/filter-type-select","@shadcn/toggle","@shadcn/select"],"type":"registry:ui"},{"description":"A track's devices in a row, each drawn by its own panel: moved by drag or by the arrow keys, folded, switched off and removed, and a device dropped from a library where it goes. Controlled, with no audio in it.","files":[{"path":"device-chain.tsx","target":"components/audio-ui/device-chain.tsx","type":"registry:ui"}],"name":"device-chain","registryDependencies":["@audio-ui/sortable-drag","@shadcn/button","@shadcn/context-menu","@shadcn/toggle"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"The face of a rack: eight macros, each with a menu that maps a parameter of a device inside or lets one go, its chains with their volume, switch and solo, and the picked chain's devices, which the host draws.","files":[{"path":"rack-panel.tsx","target":"components/audio-ui/rack-panel.tsx","type":"registry:ui"}],"name":"rack-panel","registryDependencies":["@audio-ui/arrangement","@audio-ui/knob","@shadcn/button","@shadcn/dropdown-menu","@shadcn/slider","@shadcn/toggle"],"type":"registry:ui"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"The face of a drum rack: eight macros, sixteen pads on a bank of the 128 notes, each named for its sound and played when struck, the picked pad's voice, tune, decay and mix, a recording dropped on a pad, and the picked pad's devices, which the host draws.","files":[{"path":"drum-rack-panel.tsx","target":"components/audio-ui/drum-rack-panel.tsx","type":"registry:ui"}],"name":"drum-rack-panel","registryDependencies":["@audio-ui/arrangement","@audio-ui/knob","@audio-ui/pad","@audio-ui/rack-panel","@shadcn/button","@shadcn/input-group","@shadcn/select","@shadcn/toggle"],"type":"registry:ui"},{"description":"A library of devices by shelf, with a search: a device is added with Enter, a double-click or the Add button, or dragged to where it goes on a device chain.","files":[{"path":"device-browser.tsx","target":"components/audio-ui/device-browser.tsx","type":"registry:ui"}],"name":"device-browser","registryDependencies":["@audio-ui/device-chain","@shadcn/button","@shadcn/input-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"Every device's panel by the device's stable id, with the width it is drawn at in a row: what draws a track's chain from the ids a project stores, with the face each device has on its own page.","files":[{"path":"device-panels.tsx","target":"components/audio-ui/device-panels.tsx","type":"registry:ui"}],"name":"device-panels","registryDependencies":["@audio-ui/auto-pan-panel","@audio-ui/channel-eq-panel","@audio-ui/chorus-panel","@audio-ui/compressor-panel","@audio-ui/deesser-panel","@audio-ui/delay-panel","@audio-ui/distortion-panel","@audio-ui/equalizer-panel","@audio-ui/filter-panel","@audio-ui/gate-panel","@audio-ui/limiter-panel","@audio-ui/mid-side-panel","@audio-ui/multiband-panel","@audio-ui/overdrive-panel","@audio-ui/phaser-panel","@audio-ui/vibe-panel","@audio-ui/pocket-synth-panel","@audio-ui/poly-synth-panel","@audio-ui/fm-synth-panel","@audio-ui/mono-synth-panel","@audio-ui/organ-panel","@audio-ui/string-machine-panel","@audio-ui/tape-keys-panel","@audio-ui/guitar-panel","@audio-ui/drum-synth-panel","@audio-ui/sampler-panel","@audio-ui/electric-piano-panel","@audio-ui/redux-panel","@audio-ui/reverb-panel","@audio-ui/saturator-panel","@audio-ui/transient-panel","@audio-ui/utility-panel","@audio-ui/wave-shaper-panel"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the compressor device: the transfer curve it plays, with the threshold and the level going in on it, over the device's knobs.","files":[{"path":"compressor-panel.tsx","target":"components/audio-ui/devices/compressor/panel.tsx","type":"registry:ui"}],"name":"compressor-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/compressor-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the Poly Synth device: its eight presets, its controls by what they do (oscillators, filter, envelope, vibrato and chorus) and a keyboard that plays it. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"poly-synth-panel.tsx","target":"components/audio-ui/devices/poly-synth/panel.tsx","type":"registry:ui"}],"name":"poly-synth-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/piano","@audio-ui/poly-synth-device","@shadcn/select"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core","@audio-ui/icons"],"description":"The face of the Mono Synth device: its eight presets, the oscillator's wave and the range in its title bar, its controls by what they do (oscillators, filter, envelope, glide and vibrato) and a keyboard that plays it. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"mono-synth-panel.tsx","target":"components/audio-ui/devices/mono-synth/panel.tsx","type":"registry:ui"}],"name":"mono-synth-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/piano","@audio-ui/mono-synth-device","@shadcn/select","@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the Organ device: its six registrations and the rotary speaker in its title bar, nine drawbars as faders, its percussion, key click, drive and volume, and a keyboard that plays it. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"organ-panel.tsx","target":"components/audio-ui/devices/organ/panel.tsx","type":"registry:ui"}],"name":"organ-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/fader","@audio-ui/piano","@audio-ui/organ-device","@shadcn/select","@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the String Machine device: its eight presets, its controls by what they do (registers, tone, bow and output) and a keyboard that plays it. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"string-machine-panel.tsx","target":"components/audio-ui/devices/string-machine/panel.tsx","type":"registry:ui"}],"name":"string-machine-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/piano","@audio-ui/string-machine-device","@shadcn/select"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the Tape Keys device: the track its heads read in its title bar, the tape's speed, wow and tone, the volume, and its 35 keys. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"tape-keys-panel.tsx","target":"components/audio-ui/devices/tape-keys/panel.tsx","type":"registry:ui"}],"name":"tape-keys-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/piano","@audio-ui/tape-keys-device","@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The guitar's face: the string's tone, decay and palm mute, the body and the volume, and a keyboard from the open low E up three octaves, controlled, with no audio in it.","files":[{"path":"guitar-panel.tsx","target":"components/audio-ui/devices/guitar/panel.tsx","type":"registry:ui"}],"name":"guitar-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/piano","@audio-ui/guitar-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the Drum Synth device: its voice and tuning, decay, tone and snap, its volume, and a pad that strikes it, harder near its top.","files":[{"path":"drum-synth-panel.tsx","target":"components/audio-ui/devices/drum-synth/panel.tsx","type":"registry:ui"}],"name":"drum-synth-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/pad","@audio-ui/drum-synth-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the FM Synth device: its eight presets, what every operator shares, each operator's four controls and a keyboard that plays it. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"fm-synth-panel.tsx","target":"components/audio-ui/devices/fm-synth/panel.tsx","type":"registry:ui"}],"name":"fm-synth-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/piano","@audio-ui/fm-synth-device","@shadcn/select"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the Sampler device: its sample in its title bar, its controls and sixteen pads, one a slice, that play it. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"sampler-panel.tsx","target":"components/audio-ui/devices/sampler/panel.tsx","type":"registry:ui"}],"name":"sampler-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/pad","@audio-ui/sampler-device","@shadcn/select"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the Electric Piano device: its four presets, its controls by what they do (tone, pickup, tremolo, output) and a keyboard that plays it. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"electric-piano-panel.tsx","target":"components/audio-ui/devices/electric-piano/panel.tsx","type":"registry:ui"}],"name":"electric-piano-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/piano","@audio-ui/electric-piano-device","@shadcn/select"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/icons"],"description":"The face of the Pocket Synth device: a pad that plays it, its waveform and filter, and its volume. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"pocket-synth-panel.tsx","target":"components/audio-ui/devices/pocket-synth/panel.tsx","type":"registry:ui"}],"name":"pocket-synth-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/fader","@audio-ui/waveform-select","@audio-ui/xypad","@audio-ui/pocket-synth-device","@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/icons"],"description":"A row of buttons, one per waveform, each drawn as its shape: pick one. Fed by the options of a device's choice parameter.","files":[{"path":"waveform-select.tsx","target":"components/audio-ui/waveform-select.tsx","type":"registry:ui"}],"name":"waveform-select","registryDependencies":["@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/icons"],"description":"A row of buttons, one per filter type, each drawn as the response it has: low-pass, high-pass, band-pass, notch, low and high cut, low and high shelf, bell. Fed by the options of a device's choice parameter.","files":[{"path":"filter-type-select.tsx","target":"components/audio-ui/filter-type-select.tsx","type":"registry:ui"}],"name":"filter-type-select","registryDependencies":["@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/icons"],"description":"A row of buttons, one per transfer curve, each drawn from the curve itself: you give it the function of each option, so the icon is what the device does and never drifts from it.","files":[{"path":"curve-select.tsx","target":"components/audio-ui/curve-select.tsx","type":"registry:ui"}],"name":"curve-select","registryDependencies":["@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/icons"],"description":"A play and pause button for a demo signal: the icon follows the state, the name says what pressing it does.","files":[{"path":"play-toggle.tsx","target":"components/audio-ui/play-toggle.tsx","type":"registry:ui"}],"name":"play-toggle","registryDependencies":["@shadcn/button"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the Wave Shaper device: a pad that plays it, its waveform and its knobs. Controlled, with the notes leaving through onNoteOn and onNoteOff.","files":[{"path":"wave-shaper-panel.tsx","target":"components/audio-ui/devices/wave-shaper/panel.tsx","type":"registry:ui"}],"name":"wave-shaper-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/waveform-select","@audio-ui/xypad","@audio-ui/wave-shaper-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the delay device: the echoes it makes, one line each and fainter as they fade, with a handle on the first to drag its time and feedback, over the device's knobs.","files":[{"path":"delay-panel.tsx","target":"components/audio-ui/devices/delay/panel.tsx","type":"registry:ui"}],"name":"delay-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/delay-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the reverb device: the tail it makes, its level falling to -60 dB, with a handle where it ends to drag the decay time, over the device knobs.","files":[{"path":"reverb-panel.tsx","target":"components/audio-ui/devices/reverb/panel.tsx","type":"registry:ui"}],"name":"reverb-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/reverb-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the filter device: the curve it plays with a handle on the cutoff to drag its frequency and resonance, an optional live spectrum behind it, over the device knobs.","files":[{"path":"filter-panel.tsx","target":"components/audio-ui/devices/filter/panel.tsx","type":"registry:ui"}],"name":"filter-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/filter-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the distortion device: its transfer curve against the straight line of a clean sound, over the device knobs.","files":[{"path":"distortion-panel.tsx","target":"components/audio-ui/devices/distortion/panel.tsx","type":"registry:ui"}],"name":"distortion-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/distortion-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the chorus device: the delay time as the oscillator sweeps it over two seconds, over the device knobs.","files":[{"path":"chorus-panel.tsx","target":"components/audio-ui/devices/chorus/panel.tsx","type":"registry:ui"}],"name":"chorus-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/chorus-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the utility device: its gain, pan and width as knobs and its mono and invert switches.","files":[{"path":"utility-panel.tsx","target":"components/audio-ui/devices/utility/panel.tsx","type":"registry:ui"}],"name":"utility-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/utility-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the limiter device: its transfer curve against the straight line of a clean sound with a handle for the ceiling and the input gain, over the device knobs.","files":[{"path":"limiter-panel.tsx","target":"components/audio-ui/devices/limiter/panel.tsx","type":"registry:ui"}],"name":"limiter-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/limiter-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the gate device: its transfer curve against the straight line of a clean sound with a handle on the threshold, over the device knobs.","files":[{"path":"gate-panel.tsx","target":"components/audio-ui/devices/gate/panel.tsx","type":"registry:ui"}],"name":"gate-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/gate-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the saturator device: its transfer curve against the straight line of a clean sound, over the device knobs and the choice of curve.","files":[{"path":"saturator-panel.tsx","target":"components/audio-ui/devices/saturator/panel.tsx","type":"registry:ui"}],"name":"saturator-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/curve-select","@audio-ui/plot","@audio-ui/saturator-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the phaser-flanger device: the sweep of its oscillator over two seconds, over the device knobs, with the ones the mode does not use drawn off.","files":[{"path":"phaser-panel.tsx","target":"components/audio-ui/devices/phaser/panel.tsx","type":"registry:ui"}],"name":"phaser-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/phaser-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the vibe device: the lamp's light over two seconds, rising fast and fading slowly, over its mode and its knobs.","files":[{"path":"vibe-panel.tsx","target":"components/audio-ui/devices/vibe/panel.tsx","type":"registry:ui"}],"name":"vibe-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/vibe-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the auto pan device: what the oscillator does to the pan or the level over two seconds, over the device knobs.","files":[{"path":"auto-pan-panel.tsx","target":"components/audio-ui/devices/auto-pan/panel.tsx","type":"registry:ui"}],"name":"auto-pan-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/auto-pan-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the channel EQ device: the curve it plays with a handle on the mid band and an optional live spectrum, over the shelf knobs and the high-pass switch.","files":[{"path":"channel-eq-panel.tsx","target":"components/audio-ui/devices/channel-eq/panel.tsx","type":"registry:ui"}],"name":"channel-eq-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/channel-eq-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the overdrive device: the band that reaches the clip with a handle on its centre, over the device knobs.","files":[{"path":"overdrive-panel.tsx","target":"components/audio-ui/devices/overdrive/panel.tsx","type":"registry:ui"}],"name":"overdrive-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/overdrive-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the de-esser device: what it does at each frequency with a handle at the frequency to drag across and up or down for the range, over the device knobs.","files":[{"path":"deesser-panel.tsx","target":"components/audio-ui/devices/deesser/panel.tsx","type":"registry:ui"}],"name":"deesser-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/deesser-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the multiband compressor device: the three bands drawn against frequency with a handle on each split, over the knobs of each band.","files":[{"path":"multiband-panel.tsx","target":"components/audio-ui/devices/multiband/panel.tsx","type":"registry:ui"}],"name":"multiband-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/multiband-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the transient shaper device: a square with the sustain across and the attack up, and a handle to drag to both at once, over the output knob.","files":[{"path":"transient-panel.tsx","target":"components/audio-ui/devices/transient/panel.tsx","type":"registry:ui"}],"name":"transient-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/transient-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the mid/side device: a square with the side level across and the mid level up, and a handle to drag to both at once, over the bass mono knob.","files":[{"path":"mid-side-panel.tsx","target":"components/audio-ui/devices/mid-side/panel.tsx","type":"registry:ui"}],"name":"mid-side-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/mid-side-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The face of the redux device: the stairs the bits make against the straight line of a clean sound, over the device knobs.","files":[{"path":"redux-panel.tsx","target":"components/audio-ui/devices/redux/panel.tsx","type":"registry:ui"}],"name":"redux-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/redux-device"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The face of the equalizer device: the curve it plays with a handle on each band to drag its frequency and gain, an optional live spectrum behind it, over the device's knobs gathered by band.","files":[{"path":"equalizer-panel.tsx","target":"components/audio-ui/devices/equalizer/panel.tsx","type":"registry:ui"}],"name":"equalizer-panel","registryDependencies":["@audio-ui/device-panel","@audio-ui/plot","@audio-ui/equalizer-device","@audio-ui/filter-type-select","@shadcn/toggle"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The level of a sound across frequencies, live, on a log axis in hertz, with held peaks.","files":[{"path":"spectrum-analyzer.tsx","target":"components/audio-ui/spectrum-analyzer.tsx","type":"registry:ui"}],"name":"spectrum-analyzer","registryDependencies":["@audio-ui/plot","@audio-ui/use-spectrum"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"Curves and draggable points, for equalizers, filters and compressors.","files":[{"path":"plot.tsx","target":"components/audio-ui/plot.tsx","type":"registry:ui"}],"name":"plot","type":"registry:ui"},{"cssVars":{"dark":{"success":"oklch(0.696 0.17 162.48)","warning":"oklch(0.795 0.184 86.047)"},"light":{"success":"oklch(0.696 0.17 162.48)","warning":"oklch(0.795 0.184 86.047)"},"theme":{"color-success":"var(--success)","color-warning":"var(--warning)"}},"dependencies":["@audio-ui/react"],"description":"A level meter in decibels for one or more channels, with peak hold.","files":[{"path":"meter.tsx","target":"components/audio-ui/meter.tsx","type":"registry:ui"}],"name":"meter","type":"registry:ui"},{"dependencies":[],"description":"A track's level for its header: a thin vertical meter of what the engine meters on the track's channel, silent until an engine runs.","files":[{"path":"track-level.tsx","target":"components/audio-ui/track-level.tsx","type":"registry:ui"}],"name":"track-level","registryDependencies":["@audio-ui/meter","@audio-ui/use-audio-levels"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"A needle meter: a dial in dB that a live level moves, with the VU or the PPM ballistics of @audio-ui/core/meter. The needle turns outside React, so the dial does not re-render with the signal.","files":[{"path":"needle-meter.tsx","target":"components/audio-ui/needle-meter.tsx","type":"registry:ui"}],"name":"needle-meter","type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"Draws audio: a seekable waveform with regions and markers, a live waveform that scrolls with the signal, and a bar visualizer.","files":[{"path":"waveform.tsx","target":"components/audio-ui/waveform.tsx","type":"registry:ui"}],"name":"waveform","type":"registry:ui"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"The clip view of an arrangement's audio clip: a strip with its switch and name that rolls the view up, then Clip (start, end), Loop (switch, position, length, ÷2, ×2) and Sample (Warp, Reverse, Crop, Gain, Transpose, speed) boxes in bars.beats.16ths, the last two foldable, beside its source on a timeline of its own (overview, bar ruler, the stretch it plays or loops to drag, warp markers on the waveform).","files":[{"path":"clip-panel.tsx","target":"components/audio-ui/clip-panel.tsx","type":"registry:ui"}],"name":"clip-panel","registryDependencies":["@audio-ui/clip-waveform","@audio-ui/parameter-field","@audio-ui/clip-view","@audio-ui/timeline"],"type":"registry:ui"},{"dependencies":["@audio-ui/react"],"description":"The frame of a clip's detail view: a strip along its top (the caret that rolls the view up to it, the clip's switch, its name to rename, a status, actions), boxes of its properties beside its editor (ClipBox, foldable to a strip), rows, small toggles, position fields in bars.beats.16ths (parameter fields), and useClipPlayhead, where playback reads the clip's source from the arrangement's position.","files":[{"path":"clip-view.tsx","target":"components/audio-ui/clip-view.tsx","type":"registry:ui"}],"name":"clip-view","registryDependencies":["@audio-ui/parameter-field","@shadcn/button"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"A drum clip's notes as steps, a row per pad of the drum rack that plays them: press or paint steps, sound a pad from its name, and fill a row every 2, 4 or 8 steps. The notes stay what the clip keeps, so the piano roll shows the same ones, with their velocity and chance.","files":[{"path":"drum-step-editor.tsx","target":"components/audio-ui/drum-step-editor.tsx","type":"registry:ui"}],"name":"drum-step-editor","registryDependencies":["@audio-ui/drum-steps","@audio-ui/sequencer","@shadcn/button","@shadcn/dropdown-menu"],"type":"registry:ui"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"The clip view of an arrangement's MIDI clip: a strip with its switch and name that rolls the view up, then Clip (start, end), Loop (switch, position, length, ÷2, ×2, Dupl. Loop), Groove (the swing, on the eighths or the sixteenths, and for a drum clip its steps or its roll) and Notes (transpose, invert, reverse, legato, ×2, ÷2, humanize, velocity ramps) boxes, beside its piano roll (Draw, Fold, the loop brace on the ruler, keys, grid, a velocity or chance lane), or for a drum clip its steps, a row per pad. Notes are drawn a grid step at a time.","files":[{"path":"midi-clip-panel.tsx","target":"components/audio-ui/midi-clip-panel.tsx","type":"registry:ui"}],"name":"midi-clip-panel","registryDependencies":["@audio-ui/arrangement","@audio-ui/clip-view","@audio-ui/drum-step-editor","@audio-ui/knob","@audio-ui/piano-roll","@audio-ui/timeline","@shadcn/button"],"type":"registry:ui"},{"dependencies":["@audio-ui/core","@audio-ui/react","@audio-ui/icons"],"description":"A zoomable timeline for arrangement views and editors, with a ruler that seeks, lanes and a playhead.","files":[{"path":"timeline.tsx","target":"components/audio-ui/timeline.tsx","type":"registry:ui"}],"name":"timeline","registryDependencies":["@audio-ui/arrangement","@audio-ui/fader","@audio-ui/knob","@audio-ui/led","@shadcn/button","@shadcn/button-group","@shadcn/context-menu","@shadcn/dropdown-menu","@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@base-ui/react"],"description":"A tempo field on its own: type it, step it with the arrows, or drag its unit to scrub the value.","files":[{"path":"bpm-control.tsx","target":"components/audio-ui/bpm-control.tsx","type":"registry:ui"}],"name":"bpm-control","registryDependencies":["@audio-ui/parameter-field"],"type":"registry:ui"},{"dependencies":["@base-ui/react","class-variance-authority"],"description":"A parameter's value as a field: type it, step it with the arrows (Shift for large steps, Alt for small), or drag its label or unit to scrub it, sideways or up and down, with a unit, precision and steppers.","files":[{"path":"parameter-field.tsx","target":"components/audio-ui/parameter-field.tsx","type":"registry:ui"}],"name":"parameter-field","registryDependencies":["@shadcn/input-group"],"type":"registry:ui"},{"dependencies":["class-variance-authority"],"description":"A status light that glows in its tone when lit and stays a dim dot when off, blinking for an armed take: recording, signal, mute.","files":[{"path":"led.tsx","target":"components/audio-ui/led.tsx","type":"registry:ui"}],"name":"led","type":"registry:ui"},{"dependencies":["class-variance-authority"],"description":"A small screen, as on a synth: the foreground as its glass and the background as lit figures, holding a reading under a caption, in light and dark alike.","files":[{"path":"lcd.tsx","target":"components/audio-ui/lcd.tsx","type":"registry:ui"}],"name":"lcd","type":"registry:ui"},{"dependencies":["@audio-ui/core","class-variance-authority"],"description":"An audio value as it reads, in steady monospace figures: tempo, level in dB, frequency in Hz or kHz, pan, percent, semitones, time.","files":[{"path":"value-display.tsx","target":"components/audio-ui/value-display.tsx","type":"registry:ui"}],"name":"value-display","type":"registry:ui"},{"dependencies":["@base-ui/react","class-variance-authority"],"description":"A rocker switch, as on a mixer or a synth: two sides, the one pressed down sunk into the panel, upright or laid down, with a switch's role and keyboard.","files":[{"path":"rocker-switch.tsx","target":"components/audio-ui/rocker-switch.tsx","type":"registry:ui"}],"name":"rocker-switch","type":"registry:ui"},{"description":"A button that connects the page's MIDI input, with the device's name beside it. Renders nothing when the browser has no Web MIDI.","files":[{"path":"midi-connect-control.tsx","target":"components/audio-ui/midi-connect-control.tsx","type":"registry:ui"}],"name":"midi-connect-control","registryDependencies":["@audio-ui/use-midi-input","@shadcn/button","@shadcn/button-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/icons"],"description":"A step grid: press a step, or drag across several, to draw a pattern.","files":[{"path":"sequencer.tsx","target":"components/audio-ui/sequencer.tsx","type":"registry:ui"},{"path":"sequencer-demo.tsx","target":"components/audio-ui/sequencer-default.tsx","type":"registry:component"}],"name":"sequencer","registryDependencies":["@audio-ui/use-master-bus","@audio-ui/use-transport-clock","@audio-ui/web-audio","@audio-ui/drum-synthesis","@shadcn/button"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/icons"],"description":"A compact player: play and pause, the position, a seek bar and the length.","files":[{"path":"scrubber.tsx","target":"components/audio-ui/scrubber.tsx","type":"registry:ui"},{"path":"scrubber-demo.tsx","target":"components/audio-ui/scrubber-default.tsx","type":"registry:component"}],"name":"scrubber","registryDependencies":["@shadcn/button"],"type":"registry:ui"},{"dependencies":["@audio-ui/react","@audio-ui/core","@audio-ui/icons"],"description":"DAW transport controls: play, pause and stop, the position in bars, beats and sixteenths, loop and metronome toggles, tempo and time signature.","files":[{"path":"transport.tsx","target":"components/audio-ui/transport.tsx","type":"registry:ui"},{"path":"transport-demo.tsx","target":"components/audio-ui/transport-default.tsx","type":"registry:component"}],"name":"transport","registryDependencies":["@audio-ui/bpm-control","@shadcn/button","@shadcn/button-group","@shadcn/dropdown-menu","@shadcn/select"],"type":"registry:ui"},{"description":"The auto pan device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/auto-pan/.","files":[],"name":"auto-pan","registryDependencies":["@audio-ui/auto-pan-device","@audio-ui/auto-pan-engine","@audio-ui/auto-pan-panel"],"type":"registry:ui"},{"description":"The channel eq device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/channel-eq/.","files":[],"name":"channel-eq","registryDependencies":["@audio-ui/channel-eq-device","@audio-ui/channel-eq-engine","@audio-ui/channel-eq-panel"],"type":"registry:ui"},{"description":"The chorus device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/chorus/.","files":[],"name":"chorus","registryDependencies":["@audio-ui/chorus-device","@audio-ui/chorus-engine","@audio-ui/chorus-panel"],"type":"registry:ui"},{"description":"The compressor device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/compressor/.","files":[],"name":"compressor","registryDependencies":["@audio-ui/compressor-device","@audio-ui/compressor-engine","@audio-ui/compressor-panel"],"type":"registry:ui"},{"description":"The deesser device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/deesser/.","files":[],"name":"deesser","registryDependencies":["@audio-ui/deesser-device","@audio-ui/deesser-engine","@audio-ui/deesser-panel"],"type":"registry:ui"},{"description":"The delay device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/delay/.","files":[],"name":"delay","registryDependencies":["@audio-ui/delay-device","@audio-ui/delay-engine","@audio-ui/delay-panel"],"type":"registry:ui"},{"description":"The distortion device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/distortion/.","files":[],"name":"distortion","registryDependencies":["@audio-ui/distortion-device","@audio-ui/distortion-engine","@audio-ui/distortion-panel"],"type":"registry:ui"},{"description":"The electric piano device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/electric-piano/.","files":[],"name":"electric-piano","registryDependencies":["@audio-ui/electric-piano-device","@audio-ui/electric-piano-engine","@audio-ui/electric-piano-panel"],"type":"registry:ui"},{"description":"The equalizer device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/equalizer/.","files":[],"name":"equalizer","registryDependencies":["@audio-ui/equalizer-device","@audio-ui/equalizer-engine","@audio-ui/equalizer-panel"],"type":"registry:ui"},{"description":"The filter device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/filter/.","files":[],"name":"filter","registryDependencies":["@audio-ui/filter-device","@audio-ui/filter-engine","@audio-ui/filter-panel"],"type":"registry:ui"},{"description":"The fm synth device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/fm-synth/.","files":[],"name":"fm-synth","registryDependencies":["@audio-ui/fm-synth-device","@audio-ui/fm-synth-engine","@audio-ui/fm-synth-panel"],"type":"registry:ui"},{"description":"The gate device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/gate/.","files":[],"name":"gate","registryDependencies":["@audio-ui/gate-device","@audio-ui/gate-engine","@audio-ui/gate-panel"],"type":"registry:ui"},{"description":"The limiter device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/limiter/.","files":[],"name":"limiter","registryDependencies":["@audio-ui/limiter-device","@audio-ui/limiter-engine","@audio-ui/limiter-panel"],"type":"registry:ui"},{"description":"The mid side device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/mid-side/.","files":[],"name":"mid-side","registryDependencies":["@audio-ui/mid-side-device","@audio-ui/mid-side-engine","@audio-ui/mid-side-panel"],"type":"registry:ui"},{"description":"The mono synth device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/mono-synth/.","files":[],"name":"mono-synth","registryDependencies":["@audio-ui/mono-synth-device","@audio-ui/mono-synth-engine","@audio-ui/mono-synth-panel"],"type":"registry:ui"},{"description":"The organ device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/organ/.","files":[],"name":"organ","registryDependencies":["@audio-ui/organ-device","@audio-ui/organ-engine","@audio-ui/organ-panel"],"type":"registry:ui"},{"description":"The string machine device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/string-machine/.","files":[],"name":"string-machine","registryDependencies":["@audio-ui/string-machine-device","@audio-ui/string-machine-engine","@audio-ui/string-machine-panel"],"type":"registry:ui"},{"description":"The tape keys device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/tape-keys/.","files":[],"name":"tape-keys","registryDependencies":["@audio-ui/tape-keys-device","@audio-ui/tape-keys-engine","@audio-ui/tape-keys-panel"],"type":"registry:ui"},{"description":"The guitar device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/guitar/.","files":[],"name":"guitar","registryDependencies":["@audio-ui/guitar-device","@audio-ui/guitar-engine","@audio-ui/guitar-panel"],"type":"registry:ui"},{"description":"The drum synth device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/drum-synth/.","files":[],"name":"drum-synth","registryDependencies":["@audio-ui/drum-synth-device","@audio-ui/drum-synth-engine","@audio-ui/drum-synth-panel"],"type":"registry:ui"},{"description":"The multiband device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/multiband/.","files":[],"name":"multiband","registryDependencies":["@audio-ui/multiband-device","@audio-ui/multiband-engine","@audio-ui/multiband-panel"],"type":"registry:ui"},{"description":"The overdrive device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/overdrive/.","files":[],"name":"overdrive","registryDependencies":["@audio-ui/overdrive-device","@audio-ui/overdrive-engine","@audio-ui/overdrive-panel"],"type":"registry:ui"},{"description":"The phaser device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/phaser/.","files":[],"name":"phaser","registryDependencies":["@audio-ui/phaser-device","@audio-ui/phaser-engine","@audio-ui/phaser-panel"],"type":"registry:ui"},{"description":"The pocket synth device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/pocket-synth/.","files":[],"name":"pocket-synth","registryDependencies":["@audio-ui/pocket-synth-device","@audio-ui/pocket-synth-engine","@audio-ui/pocket-synth-panel"],"type":"registry:ui"},{"description":"The poly synth device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/poly-synth/.","files":[],"name":"poly-synth","registryDependencies":["@audio-ui/poly-synth-device","@audio-ui/poly-synth-engine","@audio-ui/poly-synth-panel"],"type":"registry:ui"},{"description":"The redux device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/redux/.","files":[],"name":"redux","registryDependencies":["@audio-ui/redux-device","@audio-ui/redux-engine","@audio-ui/redux-panel"],"type":"registry:ui"},{"description":"The reverb device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/reverb/.","files":[],"name":"reverb","registryDependencies":["@audio-ui/reverb-device","@audio-ui/reverb-engine","@audio-ui/reverb-panel"],"type":"registry:ui"},{"description":"The sampler device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/sampler/.","files":[],"name":"sampler","registryDependencies":["@audio-ui/sampler-device","@audio-ui/sampler-engine","@audio-ui/sampler-panel"],"type":"registry:ui"},{"description":"The saturator device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/saturator/.","files":[],"name":"saturator","registryDependencies":["@audio-ui/saturator-device","@audio-ui/saturator-engine","@audio-ui/saturator-panel"],"type":"registry:ui"},{"description":"The transient device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/transient/.","files":[],"name":"transient","registryDependencies":["@audio-ui/transient-device","@audio-ui/transient-engine","@audio-ui/transient-panel"],"type":"registry:ui"},{"description":"The utility device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/utility/.","files":[],"name":"utility","registryDependencies":["@audio-ui/utility-device","@audio-ui/utility-engine","@audio-ui/utility-panel"],"type":"registry:ui"},{"description":"The vibe device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/vibe/.","files":[],"name":"vibe","registryDependencies":["@audio-ui/vibe-device","@audio-ui/vibe-engine","@audio-ui/vibe-panel"],"type":"registry:ui"},{"description":"The wave shaper device in one install: its state, its Web Audio engine and its panel, to components/audio-ui/devices/wave-shaper/.","files":[],"name":"wave-shaper","registryDependencies":["@audio-ui/wave-shaper-device","@audio-ui/wave-shaper-engine","@audio-ui/wave-shaper-panel"],"type":"registry:ui"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"The arrangement of a workstation, controlled: the loop, the ruler, the locators and time signatures, a row per track with its header, meter, automation and clips, the return and group tracks, and the row that takes files and devices dropped on it. State comes in through the arrangement's hooks and every change goes out as a command or a callback, so it runs over an engine of your own.","files":[{"path":"arrangement-view.tsx","target":"components/audio-ui/arrangement-view.tsx","type":"registry:ui"}],"name":"arrangement-view","registryDependencies":["@audio-ui/drum-kit","@audio-ui/arranged-clip","@audio-ui/arrangement","@audio-ui/arrangement-engine","@audio-ui/device-chain","@audio-ui/timeline","@audio-ui/timeline-markers","@audio-ui/track-automation","@audio-ui/track-level","@audio-ui/use-arrangement","@audio-ui/use-marquee-selection","@audio-ui/use-time-selection","@audio-ui/use-timeline-grid","@audio-ui/use-timeline-zoom","@audio-ui/use-track-reorder","@shadcn/button","@shadcn/context-menu","@shadcn/dropdown-menu"],"type":"registry:ui"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"The mixer of an arrangement, controlled: a channel for each track and return, then the main track. Each has its pan, its sends, its fader, its meter and its peak, and Solo, Mute and an Arm light; the main track reads its loudness in LUFS and stays in sight at the right while the channels scroll, and a channel moves by its name. Every change is a command of the arrangement.","files":[{"path":"mixer-view.tsx","target":"components/audio-ui/mixer-view.tsx","type":"registry:ui"}],"name":"mixer-view","registryDependencies":["@audio-ui/arrangement","@audio-ui/arrangement-engine","@audio-ui/fader","@audio-ui/knob","@audio-ui/led","@audio-ui/meter","@audio-ui/sortable-drag","@audio-ui/timeline","@audio-ui/track-automation","@audio-ui/use-arrangement","@audio-ui/use-audio-levels","@audio-ui/use-loudness","@shadcn/toggle-group"],"type":"registry:ui"},{"dependencies":["@audio-ui/core"],"description":"The devices of one track of an arrangement, controlled: its chain in a row, each device drawn by its own panel, racks with their macros, chains and zones, drum racks with their pads, devices dropped from a library where they go, and the end of the chain that opens the library or adds a rack. Every change is a command of the arrangement, and what a view remembers, such as a slot folded, goes through a hook you can give.","files":[{"path":"device-view.tsx","target":"components/audio-ui/device-view.tsx","type":"registry:ui"}],"name":"device-view","registryDependencies":["@audio-ui/arrangement","@audio-ui/device-chain","@audio-ui/device-library","@audio-ui/device-panels","@audio-ui/drum-kit","@audio-ui/drum-rack-panel","@audio-ui/rack-panel","@audio-ui/track-automation","@audio-ui/use-arrangement","@shadcn/button","@shadcn/dropdown-menu"],"type":"registry:ui"},{"description":"The parts of an arrangement editor in one install: the timeline, its zoom and grid, the arrangement's state, its clips, markers and automation, track reordering and MIDI playback. block-timeline wires them into a screen.","files":[],"name":"arrangement-editor","registryDependencies":["@audio-ui/timeline","@audio-ui/arrangement","@audio-ui/use-arrangement","@audio-ui/arranged-clip","@audio-ui/arrangement-view","@audio-ui/timeline-markers","@audio-ui/track-automation","@audio-ui/use-track-reorder","@audio-ui/use-midi-playback","@audio-ui/use-marquee-selection","@audio-ui/use-timeline-zoom","@audio-ui/use-timeline-grid","@audio-ui/use-time-selection","@audio-ui/use-timeline-cursor"],"type":"registry:ui"},{"description":"Gone: the page's one AudioContext is the webAudio of the web-audio lib, imported where it is used. Installs that lib.","files":[],"name":"use-web-audio","registryDependencies":["@audio-ui/web-audio"],"type":"registry:hook"},{"description":"Renamed to use-simulated-clock: installs it. It is a clock for a timeline that makes no sound, not one on the audio clock.","files":[],"name":"use-playback-clock","registryDependencies":["@audio-ui/use-simulated-clock"],"type":"registry:hook"},{"dependencies":["@audio-ui/react"],"description":"A clock for a timeline that makes no sound: it runs while playing, loops between two points, and the playhead follows it without re-rendering React. Not on the audio clock: use use-transport-clock to schedule sound","files":[{"path":"use-simulated-clock.ts","target":"hooks/use-simulated-clock.ts","type":"registry:hook"}],"name":"use-simulated-clock","registryDependencies":[],"type":"registry:hook"},{"dependencies":[],"description":"A selection rectangle for the clips of a timeline: drag across bare lane (with Shift, or in a multi-select mode) and the clips it touches join the selection","files":[{"path":"use-marquee-selection.ts","target":"hooks/use-marquee-selection.ts","type":"registry:hook"}],"name":"use-marquee-selection","registryDependencies":[],"type":"registry:hook"},{"dependencies":["@audio-ui/react"],"description":"The state of an arrangement of clips on tracks, with its operations: selection, group moves and copies, split, duplicate, delete, adding and removing tracks, per-track mix and height, and undo and redo over tracks and clips","files":[{"path":"use-arrangement.ts","target":"hooks/use-arrangement.ts","type":"registry:hook"},{"path":"arrangement-state.ts","target":"lib/arrangement-state.ts","type":"registry:lib"}],"name":"use-arrangement","registryDependencies":["@audio-ui/arrangement","@audio-ui/undo-history"],"type":"registry:hook"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"Plays an arrangement's MIDI clips while it plays: notes scheduled ahead on the audio clock, each MIDI track through a channel whose gain and pan follow its mix or its automation, and the notes a clip's editor auditions.","files":[{"path":"use-midi-playback.ts","target":"hooks/use-midi-playback.ts","type":"registry:hook"}],"name":"use-midi-playback","registryDependencies":["@audio-ui/arrangement","@audio-ui/use-master-bus","@audio-ui/use-synth-voices","@audio-ui/envelope-ramp","@audio-ui/web-audio"],"type":"registry:hook"},{"description":"Reorders tracks: drag a track's grip to move it, with the view scrolling at its edges and a copy of its header under the pointer, or press Up and Down on the grip. With the grip, the copy and the line where the track would land.","files":[{"path":"use-track-reorder.ts","target":"hooks/use-track-reorder.ts","type":"registry:hook"},{"path":"track-grip.tsx","target":"components/audio-ui/track-grip.tsx","type":"registry:ui"}],"name":"use-track-reorder","registryDependencies":["@audio-ui/sortable-drag"],"type":"registry:hook"},{"description":"The zoom of an arrangement's timeline: it fits the view beside the track headers until it is zoomed, zooms around a time that stays put on screen, fits a stretch of time, steps back through the zooms it left, and keeps its bars when the tempo changes.","files":[{"path":"use-timeline-zoom.ts","target":"hooks/use-timeline-zoom.ts","type":"registry:hook"}],"name":"use-timeline-zoom","type":"registry:hook"},{"dependencies":["@audio-ui/react"],"description":"A stretch of time on some tracks of an arrangement, drawn by dragging across bare lanes, with its overlay and what the keyboard does with it: copy, cut, paste, duplicate, consolidate, loop, fade, delete and open time, each one step of undo.","files":[{"path":"use-time-selection.ts","target":"hooks/use-time-selection.ts","type":"registry:hook"},{"path":"time-selection.tsx","target":"components/audio-ui/time-selection.tsx","type":"registry:ui"}],"name":"use-time-selection","registryDependencies":["@audio-ui/arrangement","@audio-ui/use-arrangement"],"type":"registry:hook"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"What the keyboard does with an arrangement's cursor: the arrows on the grid, Home and End, Up and Down to pick a track, Alt and the arrows to jump between locators and clip edges, M to add a locator.","files":[{"path":"use-timeline-cursor.ts","target":"hooks/use-timeline-cursor.ts","type":"registry:hook"}],"name":"use-timeline-cursor","registryDependencies":["@audio-ui/arrangement"],"type":"registry:hook"},{"dependencies":["@audio-ui/core"],"description":"The grid of an arrangement's timeline: adaptive to the zoom or a fixed division, straight or triplet, snapping or not, its name for a menu button, and the changes Cmd/Ctrl + 1 to 5 make.","files":[{"path":"use-timeline-grid.ts","target":"hooks/use-timeline-grid.ts","type":"registry:hook"}],"name":"use-timeline-grid","type":"registry:hook"},{"dependencies":["@audio-ui/core"],"description":"A look-ahead transport clock on the audio clock: it calls back with the audio time of each step so notes are scheduled sample-accurately, with a loop region, seek and tempo changes.","files":[{"path":"use-transport-clock.ts","target":"hooks/use-transport-clock.ts","type":"registry:hook"}],"name":"use-transport-clock","registryDependencies":["@audio-ui/web-audio"],"type":"registry:hook"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"Plays a piano roll's notes, which you own: play, pause and stop, a loop or once through, a metronome, seeking, and the notes the roll auditions, with a playhead for the timeline and a clock for the transport.","files":[{"path":"use-piano-roll-playback.ts","target":"hooks/use-piano-roll-playback.ts","type":"registry:hook"}],"name":"use-piano-roll-playback","registryDependencies":["@audio-ui/drum-synthesis","@audio-ui/use-transport-clock","@audio-ui/use-synth-voices","@audio-ui/envelope-ramp","@audio-ui/web-audio"],"type":"registry:hook"},{"description":"Undo and redo over a value you own: an edit made in one go, or a gesture that undoes as one.","files":[{"path":"use-undo-history.ts","target":"hooks/use-undo-history.ts","type":"registry:hook"}],"name":"use-undo-history","registryDependencies":["@audio-ui/undo-history"],"type":"registry:hook"},{"description":"A master output bus with a safety limiter: every source connects into one gain node that a single fader governs.","files":[{"path":"use-master-bus.ts","target":"hooks/use-master-bus.ts","type":"registry:hook"}],"name":"use-master-bus","registryDependencies":["@audio-ui/web-audio"],"type":"registry:hook"},{"dependencies":["@audio-ui/core"],"description":"Polyphonic synth voices on the Web Audio API: start and release notes with an envelope, a velocity and a pitch bend.","files":[{"path":"use-synth-voices.ts","target":"hooks/use-synth-voices.ts","type":"registry:hook"}],"name":"use-synth-voices","registryDependencies":["@audio-ui/envelope-ramp"],"type":"registry:hook"},{"dependencies":["@audio-ui/core"],"description":"The notes of the page's MIDI input, with velocity and pitch bend: every component that calls it hears the same devices.","files":[{"path":"use-midi-input.ts","target":"hooks/use-midi-input.ts","type":"registry:hook"}],"name":"use-midi-input","registryDependencies":[],"type":"registry:hook"},{"description":"The computer's keyboard as a keyboard of notes, as in a DAW: the middle row from A plays the white keys and the row above the black ones, by where the keys sit; Z and X move an octave, C and V the velocity.","files":[{"path":"use-computer-keyboard.ts","target":"hooks/use-computer-keyboard.ts","type":"registry:hook"},{"path":"computer-keyboard.ts","target":"lib/computer-keyboard.ts","type":"registry:lib"}],"name":"use-computer-keyboard","registryDependencies":[],"type":"registry:hook"},{"dependencies":["@audio-ui/core"],"description":"An AnalyserNode as live signals for a waveform: the loudest sample of the moment, frequency bands and the raw samples, read every frame without re-rendering","files":[{"path":"use-audio-signal.ts","target":"hooks/use-audio-signal.ts","type":"registry:hook"}],"name":"use-audio-signal","registryDependencies":[],"type":"registry:hook"},{"description":"The sound a device plays: the one chosen in its session, such as from a preview's bar, else the one that shows best what the device does. It tells the session its default, so a bar can offer the choice only where there is one. Outside a session it is always the default.","files":[{"path":"use-demo-source.ts","target":"hooks/use-demo-source.ts","type":"registry:hook"}],"name":"use-demo-source","registryDependencies":["@audio-ui/demo-sound","@audio-ui/use-audio-session"],"type":"registry:hook"},{"description":"A session of its own for a demo and its controls: a play switch and a microphone switch that nothing outside it follows. Holds no audio, so two previews on a page never play together. Outside a session the switches stay off.","files":[{"path":"use-audio-session.tsx","target":"hooks/use-audio-session.tsx","type":"registry:hook"}],"name":"use-audio-session","registryDependencies":[],"type":"registry:hook"},{"description":"The play switch of the nearest session: a button in its bar flips it, every component inside the session that reads it follows. Holds no audio, so a demo can leave its play button to its host.","files":[{"path":"use-play-switch.ts","target":"hooks/use-play-switch.ts","type":"registry:hook"}],"name":"use-play-switch","registryDependencies":["@audio-ui/use-audio-session"],"type":"registry:hook"},{"description":"The microphone as an AnalyserNode on the shared AudioContext: raw signal, never connected to the speakers, released on stop and on unmount. The session's switch, usePageMicrophone, lets a button turn it on for a demo","files":[{"path":"use-microphone.ts","target":"hooks/use-microphone.ts","type":"registry:hook"}],"name":"use-microphone","registryDependencies":["@audio-ui/web-audio","@audio-ui/use-audio-session"],"type":"registry:hook"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The pitch of a signal as a live source: the note nearest the sound and its offset in cents, steadied by a median and held a moment after the sound stops, with no React render per reading","files":[{"path":"use-pitch.ts","target":"hooks/use-pitch.ts","type":"registry:hook"}],"name":"use-pitch","registryDependencies":[],"type":"registry:hook"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The live levels of a signal from its AnalyserNodes, in the shape a Meter paints from: RMS in dB per channel with a peak that holds and falls, refreshed every frame without re-rendering","files":[{"path":"use-audio-levels.ts","target":"hooks/use-audio-levels.ts","type":"registry:hook"}],"name":"use-audio-levels","type":"registry:hook"},{"dependencies":["@audio-ui/react"],"description":"How loud a signal is while it plays, in LUFS, as streaming services and broadcasters measure it (ITU-R BS.1770): its momentary, short-term and integrated loudness, measured on the audio thread, as a live source refreshed every 100 ms without re-rendering","files":[{"path":"use-loudness.ts","target":"hooks/use-loudness.ts","type":"registry:hook"}],"name":"use-loudness","registryDependencies":["@audio-ui/loudness"],"type":"registry:hook"},{"dependencies":[],"description":"Levels that move on their own, with a peak that holds and falls, in the shape a Meter paints from: a demo meter that is never at rest","files":[{"path":"use-simulated-levels.ts","target":"hooks/use-simulated-levels.ts","type":"registry:hook"}],"name":"use-simulated-levels","type":"registry:hook"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The spectrum of an AnalyserNode as a live source for Plot.Trace: dB per point on a logarithmic frequency axis, refreshed every frame without re-rendering, and its held peaks as a second source","files":[{"path":"use-spectrum.ts","target":"hooks/use-spectrum.ts","type":"registry:hook"}],"name":"use-spectrum","registryDependencies":[],"type":"registry:hook"},{"dependencies":["@audio-ui/core"],"description":"Pink noise played through an equalizer that follows your bands, with the analyser after it: what a plot draws is what is heard","files":[{"path":"use-noise-through-eq.ts","target":"hooks/use-noise-through-eq.ts","type":"registry:hook"}],"name":"use-noise-through-eq","registryDependencies":["@audio-ui/demo-sound","@audio-ui/use-play-switch","@audio-ui/web-audio"],"type":"registry:hook"},{"dependencies":["@audio-ui/core"],"description":"A short loop of drums and plucked notes played through an effect's engine and out to a destination, for a block to show what a device does: it plays while the session's play switch is on, the engine follows the state, and an analyser of the output is there for a spectrum.","files":[{"path":"use-device-loop.ts","target":"hooks/use-device-loop.ts","type":"registry:hook"}],"name":"use-device-loop","registryDependencies":["@audio-ui/demo-sound","@audio-ui/use-demo-source","@audio-ui/use-play-switch","@audio-ui/web-audio"],"type":"registry:hook"},{"dependencies":["@audio-ui/react"],"description":"A looping pulse played through a compressor that follows your controls, with the level going in as a live source in dB: pair it with a transfer curve's Plot.Dot","files":[{"path":"use-pulses-through-compressor.ts","target":"hooks/use-pulses-through-compressor.ts","type":"registry:hook"}],"name":"use-pulses-through-compressor","registryDependencies":["@audio-ui/demo-sound","@audio-ui/use-play-switch","@audio-ui/web-audio"],"type":"registry:hook"},{"description":"A small synth's panel with every audio control together: Power plays an arpeggio at the tempo through the oscillator's waveform, a low-pass filter (cutoff and resonance knobs), the gain and the transpose fields, into the master fader; the screen shows the value last touched, the LED lights on each beat","files":[{"path":"block-synth-panel.tsx","target":"components/examples/block-synth-panel.tsx","type":"registry:block"}],"name":"block-synth-panel","registryDependencies":["@audio-ui/fader","@audio-ui/knob","@audio-ui/lcd","@audio-ui/led","@audio-ui/parameter-field","@audio-ui/rocker-switch","@audio-ui/value-display","@audio-ui/waveform-select","@audio-ui/use-master-bus","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A synth you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file. Press the pad: pitch goes across, the filter cutoff up","files":[{"path":"block-pocket-synth.tsx","target":"components/examples/block-pocket-synth.tsx","type":"registry:block"}],"name":"block-pocket-synth","registryDependencies":["@audio-ui/pocket-synth-panel","@audio-ui/pocket-synth-device","@audio-ui/pocket-synth-engine","@audio-ui/use-master-bus","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"An eighties polyphonic synth you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file, eight voices for chords. Play the keyboard, or a MIDI keyboard","files":[{"path":"block-poly-synth.tsx","target":"components/examples/block-poly-synth.tsx","type":"registry:block"}],"name":"block-poly-synth","registryDependencies":["@audio-ui/poly-synth-panel","@audio-ui/poly-synth-device","@audio-ui/poly-synth-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A monophonic analog synth you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file, one note at a time that glides to the next. Play the keyboard, or a MIDI keyboard","files":[{"path":"block-mono-synth.tsx","target":"components/examples/block-mono-synth.tsx","type":"registry:block"}],"name":"block-mono-synth","registryDependencies":["@audio-ui/mono-synth-panel","@audio-ui/mono-synth-device","@audio-ui/mono-synth-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A tonewheel organ you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file, eight voices for chords. Play the keyboard, or a MIDI keyboard","files":[{"path":"block-organ.tsx","target":"components/examples/block-organ.tsx","type":"registry:block"}],"name":"block-organ","registryDependencies":["@audio-ui/organ-panel","@audio-ui/organ-device","@audio-ui/organ-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A string machine you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file, eight voices for chords. Play the keyboard, or a MIDI keyboard","files":[{"path":"block-string-machine.tsx","target":"components/examples/block-string-machine.tsx","type":"registry:block"}],"name":"block-string-machine","registryDependencies":["@audio-ui/string-machine-panel","@audio-ui/string-machine-device","@audio-ui/string-machine-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A tape-replay keyboard you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file, eight keys for chords. Play its 35 keys, or a MIDI keyboard from G2 to F5","files":[{"path":"block-tape-keys.tsx","target":"components/examples/block-tape-keys.tsx","type":"registry:block"}],"name":"block-tape-keys","registryDependencies":["@audio-ui/tape-keys-panel","@audio-ui/tape-keys-device","@audio-ui/tape-keys-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A plucked guitar: its panel and its engine, eight strings for chords, played from the keyboard or a MIDI keyboard.","files":[{"path":"block-guitar.tsx","target":"components/examples/block-guitar.tsx","type":"registry:block"}],"name":"block-guitar","registryDependencies":["@audio-ui/guitar-panel","@audio-ui/guitar-device","@audio-ui/guitar-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":[],"description":"A synthesized drum: its panel and its engine, struck from its pad, a MIDI keyboard or a pad controller, as hard as you like.","files":[{"path":"block-drum-synth.tsx","target":"components/examples/block-drum-synth.tsx","type":"registry:block"}],"name":"block-drum-synth","registryDependencies":["@audio-ui/drum-synth-panel","@audio-ui/drum-synth-device","@audio-ui/drum-synth-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"An eighties four-operator FM synth you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file, eight voices for chords. Play the keyboard, or a MIDI keyboard","files":[{"path":"block-fm-synth.tsx","target":"components/examples/block-fm-synth.tsx","type":"registry:block"}],"name":"block-fm-synth","registryDependencies":["@audio-ui/fm-synth-panel","@audio-ui/fm-synth-device","@audio-ui/fm-synth-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A slice sampler you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file. Strike its sixteen pads, play a MIDI keyboard from C2, or drop an audio file on it","files":[{"path":"block-sampler.tsx","target":"components/examples/block-sampler.tsx","type":"registry:block"}],"name":"block-sampler","registryDependencies":["@audio-ui/sampler-panel","@audio-ui/sampler-device","@audio-ui/sampler-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A tine electric piano you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file, ten voices for chords. Play the keyboard, or a MIDI keyboard: a hard key barks and pings","files":[{"path":"block-electric-piano.tsx","target":"components/examples/block-electric-piano.tsx","type":"registry:block"}],"name":"block-electric-piano","registryDependencies":["@audio-ui/electric-piano-panel","@audio-ui/electric-piano-device","@audio-ui/electric-piano-engine","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A wave shaper synth you can plug in: its state, a panel that draws and plays it and a Web Audio engine that makes the sound, each its own file. Press the pad: pitch goes across, the resonance up","files":[{"path":"block-wave-shaper.tsx","target":"components/examples/block-wave-shaper.tsx","type":"registry:block"}],"name":"block-wave-shaper","registryDependencies":["@audio-ui/wave-shaper-panel","@audio-ui/wave-shaper-device","@audio-ui/wave-shaper-engine","@audio-ui/use-master-bus","@audio-ui/web-audio"],"type":"registry:block"},{"description":"Vertical fader","files":[{"path":"fader-vertical-demo.tsx","target":"components/examples/fader-vertical-demo.tsx","type":"registry:example"}],"name":"fader-vertical-demo","registryDependencies":["@audio-ui/fader"],"type":"registry:example"},{"description":"Pan fader filling from the center: anchored at 0 on a -1…1 range","files":[{"path":"fader-pan-demo.tsx","target":"components/examples/fader-pan-demo.tsx","type":"registry:example"}],"name":"fader-pan-demo","registryDependencies":["@audio-ui/fader"],"type":"registry:example"},{"description":"LEDs lit by Rec and Mute, one blinking red, in three sizes","files":[{"path":"led-demo.tsx","target":"components/examples/led-demo.tsx","type":"registry:example"}],"name":"led-demo","registryDependencies":["@audio-ui/led","@shadcn/button"],"type":"registry:example"},{"description":"Screens with a caption: a filter cutoff in kHz driven by a parameter field, a preset's name and a tempo","files":[{"path":"lcd-demo.tsx","target":"components/examples/lcd-demo.tsx","type":"registry:example"}],"name":"lcd-demo","registryDependencies":["@audio-ui/lcd","@audio-ui/value-display","@audio-ui/parameter-field"],"type":"registry:example"},{"description":"A value of each kind: tempo, gain, cutoff, pan, mix, transpose and position","files":[{"path":"value-display-demo.tsx","target":"components/examples/value-display-demo.tsx","type":"registry:example"}],"name":"value-display-demo","registryDependencies":["@audio-ui/value-display"],"type":"registry:example"},{"description":"A power rocker that lights its LED, a small one laid down, and one disabled","files":[{"path":"rocker-switch-demo.tsx","target":"components/examples/rocker-switch-demo.tsx","type":"registry:example"}],"name":"rocker-switch-demo","registryDependencies":["@audio-ui/rocker-switch","@audio-ui/led"],"type":"registry:example"},{"description":"Parameter fields for tempo, gain, transpose and cutoff: typed, stepped, or scrubbed by their label or unit","files":[{"path":"parameter-field-demo.tsx","target":"components/examples/parameter-field-demo.tsx","type":"registry:example"}],"name":"parameter-field-demo","registryDependencies":["@audio-ui/parameter-field"],"type":"registry:example"},{"description":"Knob component example","files":[{"path":"knob-demo.tsx","target":"components/examples/knob-demo.tsx","type":"registry:example"}],"name":"knob-demo","registryDependencies":["@audio-ui/knob"],"type":"registry:example"},{"description":"Filter cutoff knob on a logarithmic scale, 20 Hz to 20 kHz, every decade the same share of the dial","files":[{"path":"knob-filter-control-demo.tsx","target":"components/examples/knob-filter-control-demo.tsx","type":"registry:example"}],"name":"knob-filter-control-demo","registryDependencies":["@audio-ui/knob"],"type":"registry:example"},{"description":"Envelope size default example","files":[{"path":"envelope-size-default-demo.tsx","target":"components/examples/envelope-size-default-demo.tsx","type":"registry:example"}],"name":"envelope-size-default-demo","registryDependencies":["@audio-ui/envelope"],"type":"registry:example"},{"description":"Controlled envelope with a live point count","files":[{"path":"envelope-adsr-demo.tsx","target":"components/examples/envelope-adsr-demo.tsx","type":"registry:example"}],"name":"envelope-adsr-demo","registryDependencies":["@audio-ui/envelope"],"type":"registry:example"},{"description":"Piano size default example","files":[{"path":"piano-size-default-demo.tsx","target":"components/examples/piano-size-default-demo.tsx","type":"registry:example"}],"name":"piano-size-default-demo","registryDependencies":["@audio-ui/piano","@audio-ui/use-midi-input"],"type":"registry:example"},{"description":"Piano lit from an external source via activeNotes","files":[{"path":"piano-active-notes-demo.tsx","target":"components/examples/piano-active-notes-demo.tsx","type":"registry:example"}],"name":"piano-active-notes-demo","registryDependencies":["@audio-ui/piano"],"type":"registry:example"},{"dependencies":["@audio-ui/core"],"description":"A MIDI clip editor: a scrolling roll with a playable keyboard down its side, a loop brace and a ruler that labels bars, beats and sixteenths as you zoom, and a velocity lane you can drag taller. The transport plays, pauses and stops, loops or plays once through, clicks a metronome and sets the tempo and signature. Draw or select notes, mark a scale and fold onto it, undo and redo, and edit the selection from the Notes menu: split at the playhead, chop, join, legato, reverse, invert, stretch, fit to scale, crescendo and humanize. Drop a MIDI file on it to import one, or export the clip as a .mid file","files":[{"path":"block-piano-roll.tsx","target":"components/examples/block-piano-roll.tsx","type":"registry:block"}],"name":"block-piano-roll","registryDependencies":["@audio-ui/piano-roll","@audio-ui/timeline","@audio-ui/transport","@audio-ui/fader","@audio-ui/scale-menu","@audio-ui/note-find","@audio-ui/note-edit-menu","@audio-ui/midi-file","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/use-synth-voices","@audio-ui/use-piano-roll-playback","@audio-ui/use-undo-history","@audio-ui/web-audio","@shadcn/button","@shadcn/button-group","@shadcn/dropdown-menu"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A scale menu lighting the keys of the scale it picks","files":[{"path":"scale-menu-demo.tsx","target":"components/examples/scale-menu-demo.tsx","type":"registry:example"}],"name":"scale-menu-demo","registryDependencies":["@audio-ui/scale-menu","@audio-ui/piano","@shadcn/dropdown-menu"],"type":"registry:example"},{"dependencies":["@audio-ui/core"],"description":"Find notes on a piano roll by pitch, scale, state, velocity, length or chance, and select them","files":[{"path":"note-find-demo.tsx","target":"components/examples/note-find-demo.tsx","type":"registry:example"}],"name":"note-find-demo","registryDependencies":["@audio-ui/note-find","@audio-ui/piano-roll","@audio-ui/timeline"],"type":"registry:example"},{"dependencies":["@audio-ui/core"],"description":"A menu of note edits over a piano roll's selection, beside an item of its own","files":[{"path":"note-edit-menu-demo.tsx","target":"components/examples/note-edit-menu-demo.tsx","type":"registry:example"}],"name":"note-edit-menu-demo","registryDependencies":["@audio-ui/note-edit-menu","@audio-ui/piano-roll","@audio-ui/timeline","@shadcn/dropdown-menu"],"type":"registry:example"},{"dependencies":["@audio-ui/core"],"description":"A one-bar piano roll on loop with a metronome, played by a synth, which hears edits on its next pass","files":[{"path":"piano-roll-playback-demo.tsx","target":"components/examples/piano-roll-playback-demo.tsx","type":"registry:example"}],"name":"piano-roll-playback-demo","registryDependencies":["@audio-ui/use-piano-roll-playback","@audio-ui/use-synth-voices","@audio-ui/use-master-bus","@audio-ui/piano-roll","@audio-ui/timeline","@audio-ui/use-play-switch"],"type":"registry:example"},{"dependencies":["@audio-ui/core"],"description":"A piano roll that exports its clip as a .mid file and imports one onto its grid, with the file's tempo","files":[{"path":"piano-roll-midi-file-demo.tsx","target":"components/examples/piano-roll-midi-file-demo.tsx","type":"registry:example"}],"name":"piano-roll-midi-file-demo","registryDependencies":["@audio-ui/midi-file","@audio-ui/piano-roll","@audio-ui/timeline","@shadcn/button"],"type":"registry:example"},{"description":"Meter size default example","files":[{"path":"meter-size-default-demo.tsx","target":"components/examples/meter-size-default-demo.tsx","type":"registry:example"}],"name":"meter-size-default-demo","registryDependencies":["@audio-ui/meter","@audio-ui/use-simulated-levels"],"type":"registry:example"},{"description":"A VU needle that follows the microphone when it is on, and a moving signal when it is not","files":[{"path":"needle-meter-demo.tsx","target":"components/examples/needle-meter-demo.tsx","type":"registry:example"}],"name":"needle-meter-demo","registryDependencies":["@audio-ui/needle-meter","@audio-ui/use-audio-levels","@audio-ui/use-microphone","@audio-ui/use-simulated-levels"],"type":"registry:example"},{"description":"XYPad with live x/y readout","files":[{"path":"xypad-live-value-demo.tsx","target":"components/examples/xypad-live-value-demo.tsx","type":"registry:example"}],"name":"xypad-live-value-demo","registryDependencies":["@audio-ui/xypad"],"type":"registry:example"},{"description":"XYPad with bipolar pan/mix style ranges","files":[{"path":"xypad-bipolar-range-demo.tsx","target":"components/examples/xypad-bipolar-range-demo.tsx","type":"registry:example"}],"name":"xypad-bipolar-range-demo","registryDependencies":["@audio-ui/xypad"],"type":"registry:example"},{"dependencies":["@audio-ui/core","@audio-ui/icons"],"description":"A waveform player that shows what the waveform does: seek and hover, a loop region with handles, markers and zoom that follows the playhead. It starts on a synthesized phrase and takes any audio file","files":[{"path":"block-waveform-player.tsx","target":"components/examples/block-waveform-player.tsx","type":"registry:block"}],"name":"block-waveform-player","registryDependencies":["@audio-ui/scrubber","@audio-ui/timeline","@audio-ui/waveform","@audio-ui/audio-decode","@shadcn/button","@shadcn/toggle"],"type":"registry:block"},{"dependencies":["@audio-ui/core","@audio-ui/icons"],"description":"An arrangement timeline made for a whole screen: a bar ruler that seeks on the grid, a loop strip, a lane per track with clips to move between tracks, trim and fade on the grid, a cursor to put anywhere on a track, and a split at the cursor, a transport with play or pause, stop, loop, a metronome and a tempo and signature that keep the arrangement's musical positions, a playhead following the sound, and a navigator to zoom and scroll. It plays on the audio clock through the arrangement engine: audio clips loop a drum beat and a pad and draw their waveform, MIDI clips draw their notes, play a bass and chords through a synth and open on a piano roll in the clip panel; double-click a MIDI lane for a new clip. Drop an audio file on an audio track for a clip of it that plays, as long as the file; a clip dragged near an edge of the view scrolls it. Each track's meter reads its channel. In automation mode each track draws an envelope of its volume or pan over its clips, which its channel follows as it plays. Open it at full size and the tracks take the screen","files":[{"path":"block-timeline.tsx","target":"components/examples/block-timeline.tsx","type":"registry:block"}],"name":"block-timeline","registryDependencies":["@audio-ui/timeline","@audio-ui/transport","@audio-ui/bpm-control","@audio-ui/meter","@audio-ui/track-level","@audio-ui/use-audio-levels","@audio-ui/arrangement","@audio-ui/use-arrangement","@audio-ui/arrangement-engine","@audio-ui/clip-player","@audio-ui/demo-song","@audio-ui/drum-kit","@audio-ui/reverb-device","@audio-ui/mono-synth-device","@audio-ui/organ-device","@audio-ui/string-machine-device","@audio-ui/channel-eq-device","@audio-ui/compressor-device","@audio-ui/limiter-device","@audio-ui/vibe-device","@audio-ui/web-audio","@audio-ui/use-marquee-selection","@audio-ui/use-time-selection","@audio-ui/use-timeline-cursor","@audio-ui/use-timeline-grid","@audio-ui/use-timeline-zoom","@audio-ui/clip-panel","@audio-ui/midi-clip-panel","@audio-ui/arranged-clip","@audio-ui/timeline-markers","@audio-ui/track-automation","@audio-ui/use-track-reorder","@audio-ui/audio-decode","@audio-ui/arrangement-view","@shadcn/button","@shadcn/button-group","@shadcn/context-menu","@shadcn/dropdown-menu","@shadcn/kbd","@shadcn/popover","@shadcn/select","@shadcn/toggle"],"type":"registry:block"},{"description":"Waveform with a resizable loop region, markers and a hover time","files":[{"path":"waveform-region-demo.tsx","target":"components/examples/waveform-region-demo.tsx","type":"registry:example"}],"name":"waveform-region-demo","registryDependencies":["@audio-ui/waveform"],"type":"registry:example"},{"dependencies":["@audio-ui/core"],"description":"An equalizer: drag each band to set its frequency and gain, and the curve is the response of all three","files":[{"path":"plot-demo.tsx","target":"components/examples/plot-demo.tsx","type":"registry:example"}],"name":"plot-demo","registryDependencies":["@audio-ui/plot","@audio-ui/knob","@audio-ui/use-noise-through-eq","@audio-ui/use-spectrum","@shadcn/popover","@shadcn/select"],"type":"registry:example"},{"dependencies":["@audio-ui/react"],"description":"A compressor you can plug in: its state, a panel that draws it and a Web Audio engine that plays it, side by side. Play a pulsing signal and turn the knobs","files":[{"path":"block-compressor.tsx","target":"components/examples/block-compressor.tsx","type":"registry:block"}],"name":"block-compressor","registryDependencies":["@audio-ui/compressor-panel","@audio-ui/compressor-device","@audio-ui/compressor-engine","@audio-ui/demo-sound","@audio-ui/use-demo-source","@audio-ui/use-master-bus","@audio-ui/use-play-switch","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/react","@audio-ui/icons"],"description":"An equalizer you can plug in: its state, a panel that draws it with a handle on each band and an engine that plays it, side by side. Play pink noise and the spectrum behind the curve is what comes out","files":[{"path":"block-equalizer.tsx","target":"components/examples/block-equalizer.tsx","type":"registry:block"}],"name":"block-equalizer","registryDependencies":["@audio-ui/equalizer-panel","@audio-ui/equalizer-device","@audio-ui/equalizer-engine","@audio-ui/demo-sound","@audio-ui/use-demo-source","@audio-ui/use-master-bus","@audio-ui/use-play-switch","@audio-ui/use-spectrum","@audio-ui/web-audio"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A delay you can plug in: its state, a panel that draws the echoes it makes with a handle for the time and the feedback, and an engine that plays it. Play a loop through it and drag","files":[{"path":"block-delay.tsx","target":"components/examples/block-delay.tsx","type":"registry:block"}],"name":"block-delay","registryDependencies":["@audio-ui/delay-panel","@audio-ui/delay-device","@audio-ui/delay-engine","@audio-ui/demo-sound","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A reverb you can plug in: its state, a panel that draws the tail it makes with a handle for the decay time, and an engine that plays it. Play a loop through it and drag","files":[{"path":"block-reverb.tsx","target":"components/examples/block-reverb.tsx","type":"registry:block"}],"name":"block-reverb","registryDependencies":["@audio-ui/reverb-panel","@audio-ui/reverb-device","@audio-ui/reverb-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A filter you can plug in: its state, a panel that draws the curve it plays with a handle for the cutoff and the resonance, and an engine that plays it. Play a loop through it and drag, the spectrum behind is what comes out","files":[{"path":"block-filter.tsx","target":"components/examples/block-filter.tsx","type":"registry:block"}],"name":"block-filter","registryDependencies":["@audio-ui/filter-panel","@audio-ui/filter-device","@audio-ui/filter-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus","@audio-ui/use-spectrum"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A distortion you can plug in: its state, a panel that draws its transfer curve and an engine that plays it. Play a loop through it and turn the drive","files":[{"path":"block-distortion.tsx","target":"components/examples/block-distortion.tsx","type":"registry:block"}],"name":"block-distortion","registryDependencies":["@audio-ui/distortion-panel","@audio-ui/distortion-device","@audio-ui/distortion-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A chorus you can plug in: its state, a panel that draws the sweep of its delay and an engine that plays it. Play a loop through it and turn the rate and the depth","files":[{"path":"block-chorus.tsx","target":"components/examples/block-chorus.tsx","type":"registry:block"}],"name":"block-chorus","registryDependencies":["@audio-ui/chorus-panel","@audio-ui/chorus-device","@audio-ui/chorus-engine","@audio-ui/demo-sound","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A utility you can plug in: its state, a panel and an engine that plays it. Play a loop through it and move the pan and the width","files":[{"path":"block-utility.tsx","target":"components/examples/block-utility.tsx","type":"registry:block"}],"name":"block-utility","registryDependencies":["@audio-ui/utility-panel","@audio-ui/utility-device","@audio-ui/utility-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A limiter you can plug in: its state, a panel that draws its transfer curve with a handle on the ceiling and an engine that plays it. Play a loop through it, push the gain and pull the ceiling down","files":[{"path":"block-limiter.tsx","target":"components/examples/block-limiter.tsx","type":"registry:block"}],"name":"block-limiter","registryDependencies":["@audio-ui/limiter-panel","@audio-ui/limiter-device","@audio-ui/limiter-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A gate you can plug in: its state, a panel that draws its transfer curve with a handle on the threshold and an engine that plays it. Play a loop through it and raise the threshold: the quiet parts go","files":[{"path":"block-gate.tsx","target":"components/examples/block-gate.tsx","type":"registry:block"}],"name":"block-gate","registryDependencies":["@audio-ui/gate-panel","@audio-ui/gate-device","@audio-ui/gate-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A saturator you can plug in: its state, a panel that draws its transfer curve and an engine that plays it. Play a loop through it, pick a curve and turn the drive","files":[{"path":"block-saturator.tsx","target":"components/examples/block-saturator.tsx","type":"registry:block"}],"name":"block-saturator","registryDependencies":["@audio-ui/saturator-panel","@audio-ui/saturator-device","@audio-ui/saturator-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A phaser and flanger you can plug in: its state, a panel that draws the sweep and an engine that plays it. Play a loop through it, switch the mode and turn the rate and the feedback","files":[{"path":"block-phaser.tsx","target":"components/examples/block-phaser.tsx","type":"registry:block"}],"name":"block-phaser","registryDependencies":["@audio-ui/phaser-panel","@audio-ui/phaser-device","@audio-ui/phaser-engine","@audio-ui/demo-sound","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A photocell vibe you can plug in: its state, a panel that draws the lamp and an engine that plays it, each its own file. Play the loop and turn the speed and the intensity","files":[{"path":"block-vibe.tsx","target":"components/examples/block-vibe.tsx","type":"registry:block"}],"name":"block-vibe","registryDependencies":["@audio-ui/vibe-panel","@audio-ui/vibe-device","@audio-ui/vibe-engine","@audio-ui/demo-sound","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"An auto pan you can plug in: its state, a panel that draws the movement and an engine that plays it. Play a loop through it, pick a waveform and switch to tremolo","files":[{"path":"block-auto-pan.tsx","target":"components/examples/block-auto-pan.tsx","type":"registry:block"}],"name":"block-auto-pan","registryDependencies":["@audio-ui/auto-pan-panel","@audio-ui/auto-pan-device","@audio-ui/auto-pan-engine","@audio-ui/demo-sound","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A channel EQ you can plug in: its state, a panel that draws the curve with a handle on the mid band and an engine that plays it. Play a loop through it and drag, the spectrum behind is what comes out","files":[{"path":"block-channel-eq.tsx","target":"components/examples/block-channel-eq.tsx","type":"registry:block"}],"name":"block-channel-eq","registryDependencies":["@audio-ui/channel-eq-panel","@audio-ui/channel-eq-device","@audio-ui/channel-eq-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus","@audio-ui/use-spectrum"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"An overdrive you can plug in: its state, a panel that draws the band that reaches the clip and an engine that plays it. Play a loop through it, drag the handle and turn the drive","files":[{"path":"block-overdrive.tsx","target":"components/examples/block-overdrive.tsx","type":"registry:block"}],"name":"block-overdrive","registryDependencies":["@audio-ui/overdrive-panel","@audio-ui/overdrive-device","@audio-ui/overdrive-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus","@audio-ui/use-spectrum"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A de-esser you can plug in: its state, a panel that draws what it does at each frequency and an engine that plays it. Play a voice through it, lower the threshold and the s sits back","files":[{"path":"block-deesser.tsx","target":"components/examples/block-deesser.tsx","type":"registry:block"}],"name":"block-deesser","registryDependencies":["@audio-ui/deesser-panel","@audio-ui/deesser-device","@audio-ui/deesser-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus","@audio-ui/use-spectrum"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A multiband compressor you can plug in: its state, a panel that draws the three bands and an engine that plays it. Play a loop through it and hold one band down","files":[{"path":"block-multiband.tsx","target":"components/examples/block-multiband.tsx","type":"registry:block"}],"name":"block-multiband","registryDependencies":["@audio-ui/multiband-panel","@audio-ui/multiband-device","@audio-ui/multiband-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus","@audio-ui/use-spectrum"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A transient shaper you can plug in: its state, a panel with a handle for the attack and the sustain and an engine that plays it. Play a loop through it and drag the handle: up for more click, left for a shorter ring","files":[{"path":"block-transient.tsx","target":"components/examples/block-transient.tsx","type":"registry:block"}],"name":"block-transient","registryDependencies":["@audio-ui/transient-panel","@audio-ui/transient-device","@audio-ui/transient-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A mid/side device you can plug in: its state, a panel with a handle for the mid and the side and an engine that plays it. Play a wide loop through it and take the side down","files":[{"path":"block-mid-side.tsx","target":"components/examples/block-mid-side.tsx","type":"registry:block"}],"name":"block-mid-side","registryDependencies":["@audio-ui/mid-side-panel","@audio-ui/mid-side-device","@audio-ui/mid-side-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/react"],"description":"A redux you can plug in: its state, a panel that draws the stairs the bits make and an engine that plays it. Play a loop through it and take the bits down","files":[{"path":"block-redux.tsx","target":"components/examples/block-redux.tsx","type":"registry:block"}],"name":"block-redux","registryDependencies":["@audio-ui/redux-panel","@audio-ui/redux-device","@audio-ui/redux-engine","@audio-ui/use-device-loop","@audio-ui/use-master-bus"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"Mixing console over an arrangement: a channel for each track with pan, sends, fader, meter, peak, solo and mute, a return track after them and the main track in sight at the right, every meter reading its real signal. It is the view a workstation shows under its tracks","files":[{"path":"block-mixer.tsx","target":"components/examples/block-mixer.tsx","type":"registry:block"}],"name":"block-mixer","registryDependencies":["@audio-ui/mixer-view","@audio-ui/arrangement","@audio-ui/arrangement-engine","@audio-ui/use-arrangement","@audio-ui/track-automation","@audio-ui/use-play-switch","@audio-ui/clip-player","@audio-ui/demo-sound","@audio-ui/device-library","@audio-ui/web-audio"],"type":"registry:block"},{"description":"A library of devices by shelf, with a search: pick one with Enter, a double-click or the Add button, or drag it onto a chain, and see what comes back","files":[{"path":"block-device-browser.tsx","target":"components/examples/block-device-browser.tsx","type":"registry:block"}],"name":"block-device-browser","registryDependencies":["@audio-ui/device-browser","@audio-ui/device-chain","@audio-ui/device-library"],"type":"registry:block"},{"dependencies":["@audio-ui/core"],"description":"A track's devices in a row with the library beside them: drag a device to where it goes, move, fold, switch off or remove one, and play a loop through each device's own panel and engine. It is the view a workstation shows under its tracks, over an arrangement of one track","files":[{"path":"block-device-chain.tsx","target":"components/examples/block-device-chain.tsx","type":"registry:block"}],"name":"block-device-chain","registryDependencies":["@audio-ui/device-view","@audio-ui/device-browser","@audio-ui/device-library","@audio-ui/arrangement","@audio-ui/arrangement-engine","@audio-ui/use-arrangement","@audio-ui/clip-player","@audio-ui/demo-sound","@audio-ui/use-demo-source","@audio-ui/use-play-switch","@audio-ui/web-audio"],"type":"registry:block"},{"description":"Drum rack: sixteen pads, each its own sound, shaped with tune, decay and level knobs","files":[{"path":"block-drum-rack.tsx","target":"components/examples/block-drum-rack.tsx","type":"registry:block"}],"name":"block-drum-rack","registryDependencies":["@audio-ui/pad","@audio-ui/knob","@audio-ui/use-master-bus","@audio-ui/web-audio","@audio-ui/drum-synthesis"],"type":"registry:block"},{"description":"Four drum pads that play harder near the top; the closed hat cuts the open one short","files":[{"path":"pad-demo.tsx","target":"components/examples/pad-demo.tsx","type":"registry:example"}],"name":"pad-demo","registryDependencies":["@audio-ui/pad","@audio-ui/use-master-bus","@audio-ui/web-audio","@audio-ui/drum-synthesis"],"type":"registry:example"},{"description":"A chromatic tuner on the microphone: the nearest note, a needle on a scale of cents and the frequency, in the primary color when in tune","files":[{"path":"tuner-demo.tsx","target":"components/examples/tuner-demo.tsx","type":"registry:example"}],"name":"tuner-demo","registryDependencies":["@audio-ui/tuner","@audio-ui/use-microphone","@audio-ui/use-pitch"],"type":"registry:example"},{"description":"Press play, or play a MIDI keyboard, and watch the spectrum: each sawtooth note lights its pitch and every harmonic above it, and the peaks hold a moment","files":[{"path":"spectrum-analyzer-demo.tsx","target":"components/examples/spectrum-analyzer-demo.tsx","type":"registry:example"}],"name":"spectrum-analyzer-demo","registryDependencies":["@audio-ui/spectrum-analyzer","@audio-ui/use-master-bus","@audio-ui/use-midi-input","@audio-ui/use-play-switch","@audio-ui/use-spectrum","@audio-ui/use-synth-voices","@audio-ui/web-audio","@audio-ui/envelope-ramp"],"type":"registry:example"},{"dependencies":["@audio-ui/icons"],"description":"A drum machine: draw a pattern and hear it. Press a step or drag across several; the playing column lights up","files":[{"path":"sequencer-demo.tsx","target":"components/examples/sequencer-demo.tsx","type":"registry:example"}],"name":"sequencer-demo","registryDependencies":["@audio-ui/sequencer"],"type":"registry:example"},{"description":"A bar to seek on, with play or pause, the position and the length: a clock stands in for a player, and the bar and the time follow it","files":[{"path":"scrubber-demo.tsx","target":"components/examples/scrubber-demo.tsx","type":"registry:example"}],"name":"scrubber-demo","registryDependencies":["@audio-ui/scrubber"],"type":"registry:example"},{"dependencies":["@audio-ui/react","@audio-ui/core"],"description":"The transport of a DAW as joined clusters: play or pause, stop and the position in bars, beats and sixteenths; loop and metronome toggles; the tempo and the time signature. A clock stands in for the engine","files":[{"path":"transport-demo.tsx","target":"components/examples/transport-demo.tsx","type":"registry:example"}],"name":"transport-demo","registryDependencies":["@audio-ui/transport"],"type":"registry:example"},{"description":"The export dialog over two seconds of a chord: pick a format and a level, and Export saves the file and says how loud it came out, in LUFS and dBTP","files":[{"path":"export-dialog-demo.tsx","target":"components/examples/export-dialog-demo.tsx","type":"registry:example"}],"name":"export-dialog-demo","registryDependencies":["@audio-ui/audio-encode","@audio-ui/audio-export","@audio-ui/export-dialog","@shadcn/button"],"type":"registry:example"},{"dependencies":[],"description":"Web Audio Lib","files":[{"path":"web-audio.ts","target":"lib/web-audio.ts","type":"registry:lib"}],"name":"web-audio","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"Envelope curves to gain automation: slicing an envelope at its sustain and scheduling its ramps on a GainNode's AudioParam, for synth voices","files":[{"path":"envelope-ramp.ts","target":"lib/envelope-ramp.ts","type":"registry:lib"}],"name":"envelope-ramp","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio/decode-aiff","@audio/decode-caf","@audio/decode-mp4","@audio/resample-sinc"],"description":"Decoding an audio file into samples at a context's rate, the step before the waveform maths of @audio-ui/core/analysis: the browser's decoder first, and for an AIFF, CAF or Apple Lossless file it refuses, as Chrome does, a decoder of its format and a resampler, loaded the first time one is needed","files":[{"path":"audio-decode.ts","target":"lib/audio-decode.ts","type":"registry:lib"}],"name":"audio-decode","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio/encode"],"description":"Writing sound to a WAV, FLAC or MP3 file, the step after an offline render or a recording: encoded in chunks with its progress, each format's encoder loaded the first time it is used, and saved through the browser's downloads","files":[{"path":"audio-encode.ts","target":"lib/audio-encode.ts","type":"registry:lib"}],"name":"audio-encode","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core","@audio/loudness-lufs","@audio/loudness-truepeak","@audio/weighting-k"],"description":"How loud a sound is, the way streaming services and broadcasters measure it (ITU-R BS.1770): integrated loudness in LUFS, sample and true peak, and the gain that brings it to a target such as -14 LUFS without passing a true-peak ceiling; and while it plays, its momentary, short-term and integrated loudness, measured on the audio thread","files":[{"path":"loudness.ts","target":"lib/loudness.ts","type":"registry:lib"}],"name":"loudness","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Exporting rendered sound to a file: the settings an export picks (format, bit depth or bitrate, a level left as it is, brought to its peak or to a loudness target) and exportSound, which measures, normalizes and encodes, saying how far it is","files":[{"path":"audio-export.ts","target":"lib/audio-export.ts","type":"registry:lib"}],"name":"audio-export","registryDependencies":["@audio-ui/audio-encode","@audio-ui/loudness"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The compressor as a device: its parameters and what they mean, the numbers that go on the nodes for a state, and the curve a state plays, with no panel and no audio in it.","files":[{"path":"compressor-device.ts","target":"components/audio-ui/devices/compressor/device.ts","type":"registry:lib"}],"name":"compressor-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A compressor on the Web Audio API for a compressor state: the node, its make-up taken back out or kept, a dry and compressed mix aligned to the node's lookahead, parameters that move without a click, and a key: a worklet detector that ducks the signal from another one.","files":[{"path":"compressor-engine.ts","target":"components/audio-ui/devices/compressor/engine.ts","type":"registry:lib"}],"name":"compressor-engine","registryDependencies":["@audio-ui/compressor-device","@audio-ui/key-detector"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Poly Synth as an instrument device: a saw, a pulse, a sub oscillator and noise, a resonant low-pass filter that follows the keyboard, an envelope for the filter and the level, a vibrato and a chorus, with eight presets, and no panel and no audio in it.","files":[{"path":"poly-synth-device.ts","target":"components/audio-ui/devices/poly-synth/device.ts","type":"registry:lib"}],"name":"poly-synth-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Mono Synth as an instrument device: a saw, square or triangle oscillator, a sub oscillator and noise, a resonant low-pass filter an envelope opens, a range, a glide and a vibrato, with eight presets, and no panel and no audio in it.","files":[{"path":"mono-synth-device.ts","target":"components/audio-ui/devices/mono-synth/device.ts","type":"registry:lib"}],"name":"mono-synth-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Organ as an instrument device: nine drawbars of sines at the organ's harmonics, a percussion on the second or third harmonic, a key click, a drive and a rotary speaker, with six registrations, and no panel and no audio in it.","files":[{"path":"organ-device.ts","target":"components/audio-ui/devices/organ/device.ts","type":"registry:lib"}],"name":"organ-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The String Machine as an instrument device: a violin, a viola, a cello and a bass register, a brightness filter, an attack, a release and an ensemble, with eight presets, and no panel and no audio in it.","files":[{"path":"string-machine-device.ts","target":"components/audio-ui/devices/string-machine/device.ts","type":"registry:lib"}],"name":"string-machine-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Tape Keys as an instrument device: 35 keys, each a strip of tape with one note on it, on three tracks (flutes, strings and a choir), the tape's speed, wow and flutter, and a tone, and no panel and no audio in it.","files":[{"path":"tape-keys-device.ts","target":"components/audio-ui/devices/tape-keys/device.ts","type":"registry:lib"}],"name":"tape-keys-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The guitar as a device: a plucked string that rings and fades, its highs first, through the body's warmth and a tone control, with its decay and palm mute, with no panel and no audio in it.","files":[{"path":"guitar-device.ts","target":"components/audio-ui/devices/guitar/device.ts","type":"registry:lib"}],"name":"guitar-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A synthesized drum as a device: a kick, a snare, a clap, a closed or an open hat, a tom, a rim or a cymbal, with its tuning, decay, tone and snap, played by velocity. Its state, its description and the tools an agent plays it with.","files":[{"path":"drum-synth-device.ts","target":"components/audio-ui/devices/drum-synth/device.ts","type":"registry:lib"}],"name":"drum-synth-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The FM Synth as an instrument device: four operators, each a ratio, a level, a decay and a sustain, eight algorithms that wire them, feedback, an attack, a release and a vibrato, with eight presets, and no panel and no audio in it.","files":[{"path":"fm-synth-device.ts","target":"components/audio-ui/devices/fm-synth/device.ts","type":"registry:lib"}],"name":"fm-synth-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Sampler as an instrument device: one of two samples cut into sixteen slices, a key or a pad each from note 36, a low-pass filter, a pitch, a release and a gate, and no panel and no audio in it.","files":[{"path":"sampler-device.ts","target":"components/audio-ui/devices/sampler/device.ts","type":"registry:lib"}],"name":"sampler-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Electric Piano as an instrument device: a tine's body that barks and a bell that pings, rung down by itself, a pickup's drive and a tremolo, with four presets, and no panel and no audio in it.","files":[{"path":"electric-piano-device.ts","target":"components/audio-ui/devices/electric-piano/device.ts","type":"registry:lib"}],"name":"electric-piano-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"One voice of the Poly Synth on the Web Audio API: noteOn starts a note or glides the held one, noteOff releases it from where its envelope got to, and every control follows the state without a click. A host plays chords with several.","files":[{"path":"poly-synth-engine.ts","target":"components/audio-ui/devices/poly-synth/engine.ts","type":"registry:lib"}],"name":"poly-synth-engine","registryDependencies":["@audio-ui/poly-synth-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Mono Synth on the Web Audio API, the whole synth in one engine: it takes every note by its id, the first opens the envelope, a note while one is held glides to it, and letting go of it glides back to the one still held. Every control moves a held note.","files":[{"path":"mono-synth-engine.ts","target":"components/audio-ui/devices/mono-synth/engine.ts","type":"registry:lib"}],"name":"mono-synth-engine","registryDependencies":["@audio-ui/mono-synth-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"One key of the Organ on the Web Audio API: nine sines at the drawbars' levels, with the percussion and the click, through a drive and a rotary speaker; noteOn sounds a key at once, or cuts the held one and sounds anew, noteOff stops it at once, and the drawbars move a held key. A host plays chords with several.","files":[{"path":"organ-engine.ts","target":"components/audio-ui/devices/organ/engine.ts","type":"registry:lib"}],"name":"organ-engine","registryDependencies":["@audio-ui/organ-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"One voice of the String Machine on the Web Audio API: four registers into a brightness filter, bowed in and out from where it got to, through an ensemble; noteOn bows a note, or cuts the held one and bows anew, noteOff lets it go over the release, and the registers and the brightness move a held note. A host plays chords with several.","files":[{"path":"string-machine-engine.ts","target":"components/audio-ui/devices/string-machine/engine.ts","type":"registry:lib"}],"name":"string-machine-engine","registryDependencies":["@audio-ui/string-machine-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"One key of Tape Keys on the Web Audio API: its tape runs on the track chosen for eight seconds at most, a little off in pitch and level, with hiss, wow and flutter, through saturation and a tone; noteOn runs a key, or cuts the held one and runs anew, noteOff lets the tape go at once, and the speed, wow and tone move a held key. A host plays chords with several.","files":[{"path":"tape-keys-engine.ts","target":"components/audio-ui/devices/tape-keys/engine.ts","type":"registry:lib"}],"name":"tape-keys-engine","registryDependencies":["@audio-ui/tape-keys-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The guitar's Web Audio engine: one plucked string, drawn when its note comes and in tune to the cent, through the body and the tone; a host plays chords with several.","files":[{"path":"guitar-engine.ts","target":"components/audio-ui/devices/guitar/engine.ts","type":"registry:lib"}],"name":"guitar-engine","registryDependencies":["@audio-ui/guitar-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Drum Synth on the Web Audio API: one engine plays every hit, each made of a falling sine and filtered noise when it comes, from a noise made once per context, ringing for its decay whatever the note's length.","files":[{"path":"drum-synth-engine.ts","target":"components/audio-ui/devices/drum-synth/engine.ts","type":"registry:lib"}],"name":"drum-synth-engine","registryDependencies":["@audio-ui/drum-synth-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"One voice of the FM Synth on the Web Audio API: four operators wired by the algorithm, each with its envelope; noteOn strikes a note, or cuts the held one and strikes anew, noteOff releases every operator from where it got to, and the levels, ratios, feedback and vibrato move a held note. A host plays chords with several.","files":[{"path":"fm-synth-engine.ts","target":"components/audio-ui/devices/fm-synth/engine.ts","type":"registry:lib"}],"name":"fm-synth-engine","registryDependencies":["@audio-ui/fm-synth-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"One voice of the Sampler on the Web Audio API, with the two samples it comes with rendered once and shared: noteOn plays the slice its pitch picks, to its end, or cuts the playing one and plays anew; with the gate on, noteOff closes it over the release; load plays a file of your own. A host plays several slices at once with several.","files":[{"path":"sampler-engine.ts","target":"components/audio-ui/devices/sampler/engine.ts","type":"registry:lib"}],"name":"sampler-engine","registryDependencies":["@audio-ui/sampler-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"One voice of the Electric Piano on the Web Audio API: noteOn strikes a note, which rings down by itself, or cuts the ringing one and strikes anew; noteOff lets it fall silent from where it got to; the drive, the tremolo and the volume follow the state without a click. A host plays chords with several.","files":[{"path":"electric-piano-engine.ts","target":"components/audio-ui/devices/electric-piano/engine.ts","type":"registry:lib"}],"name":"electric-piano-engine","registryDependencies":["@audio-ui/electric-piano-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Pocket Synth as an instrument device: its waveform, filter and volume, and the pitch and filter cutoff a position on a pad plays, with no panel and no audio in it.","files":[{"path":"pocket-synth-device.ts","target":"components/audio-ui/devices/pocket-synth/device.ts","type":"registry:lib"}],"name":"pocket-synth-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A monophonic synth on the Web Audio API for a Pocket Synth state: noteOn starts a note or glides the held one, noteOff releases it, and the wave, filter and volume follow the state without a click.","files":[{"path":"pocket-synth-engine.ts","target":"components/audio-ui/devices/pocket-synth/engine.ts","type":"registry:lib"}],"name":"pocket-synth-engine","registryDependencies":["@audio-ui/pocket-synth-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The Wave Shaper as an instrument device: its waveform, drive, tone, detune, mix and volume, the pitch and resonance a pad position plays, and the distortion curve, with no panel and no audio in it.","files":[{"path":"wave-shaper-device.ts","target":"components/audio-ui/devices/wave-shaper/device.ts","type":"registry:lib"}],"name":"wave-shaper-device","registryDependencies":["@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A wave shaper synth on the Web Audio API for a Wave Shaper state: two detuned oscillators, a distortion mixed in parallel and a low-pass filter; noteOn starts a note or glides the held one, noteOff releases it.","files":[{"path":"wave-shaper-engine.ts","target":"components/audio-ui/devices/wave-shaper/engine.ts","type":"registry:lib"}],"name":"wave-shaper-engine","registryDependencies":["@audio-ui/wave-shaper-device","@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The delay as a device: its time, feedback, tone and mix, the numbers that go on the nodes for a state and the echoes a state makes, with no panel and no audio in it.","files":[{"path":"delay-device.ts","target":"components/audio-ui/devices/delay/device.ts","type":"registry:lib"}],"name":"delay-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A delay on the Web Audio API for a delay state: an echo that goes round a tone filter so each repeat is darker, mixed with the dry sound, with a time that bends like a tape instead of clicking.","files":[{"path":"delay-engine.ts","target":"components/audio-ui/devices/delay/engine.ts","type":"registry:lib"}],"name":"delay-engine","registryDependencies":["@audio-ui/delay-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The reverb as a device: its decay, pre-delay, damping and mix, the numbers that go on the nodes for a state, the decay a state draws and the impulse response of its room, with no panel and no audio in it.","files":[{"path":"reverb-device.ts","target":"components/audio-ui/devices/reverb/device.ts","type":"registry:lib"}],"name":"reverb-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A reverb on the Web Audio API for a reverb state: a convolver fed a room made from the decay and the damping, two of them cross-faded so a new room never clicks, after a pre-delay and mixed with the dry sound.","files":[{"path":"reverb-engine.ts","target":"components/audio-ui/devices/reverb/engine.ts","type":"registry:lib"}],"name":"reverb-engine","registryDependencies":["@audio-ui/reverb-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The filter as a device: a type, a cutoff and a resonance, the numbers that go on the node for a state and the curve a state plays, with no panel and no audio in it.","files":[{"path":"filter-device.ts","target":"components/audio-ui/devices/filter/device.ts","type":"registry:lib"}],"name":"filter-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A filter on the Web Audio API for a filter state: the node the curve draws, with the resonance in the unit it wants, and the signal going round it when it is off, moving without a click.","files":[{"path":"filter-engine.ts","target":"components/audio-ui/devices/filter/engine.ts","type":"registry:lib"}],"name":"filter-engine","registryDependencies":["@audio-ui/filter-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The distortion as a device: a drive, a tone, a mix and an output level, the numbers that go on the nodes for a state, the soft clip and the transfer curve a state plays, with no panel and no audio in it.","files":[{"path":"distortion-device.ts","target":"components/audio-ui/devices/distortion/device.ts","type":"registry:lib"}],"name":"distortion-device","registryDependencies":["@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":[],"description":"A distortion on the Web Audio API for a distortion state: a drive gain into a fixed soft-clip table at 4x oversampling, a tone filter, mixed with the clean sound at an output level, moving without a click.","files":[{"path":"distortion-engine.ts","target":"components/audio-ui/devices/distortion/engine.ts","type":"registry:lib"}],"name":"distortion-engine","registryDependencies":["@audio-ui/distortion-device","@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The chorus as a device: a rate, a depth, a delay and a mix, the numbers that go on the nodes for a state and the sweep of the delay time, with no panel and no audio in it.","files":[{"path":"chorus-device.ts","target":"components/audio-ui/devices/chorus/device.ts","type":"registry:lib"}],"name":"chorus-device","registryDependencies":["@audio-ui/synced-rate"],"type":"registry:lib"},{"dependencies":[],"description":"A chorus on the Web Audio API for a chorus state: a short delay whose time an oscillator sweeps, mixed with the dry sound, moving without a click.","files":[{"path":"chorus-engine.ts","target":"components/audio-ui/devices/chorus/engine.ts","type":"registry:lib"}],"name":"chorus-engine","registryDependencies":["@audio-ui/chorus-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The utility as a device: a gain, a pan, a stereo width, a mono switch and a phase invert, the numbers that go on the nodes for a state, with no panel and no audio in it.","files":[{"path":"utility-device.ts","target":"components/audio-ui/devices/utility/device.ts","type":"registry:lib"}],"name":"utility-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A utility on the Web Audio API for a utility state: the signal split into mid and side, the side scaled by the width, then a pan and a gain with an optional phase invert, moving without a click.","files":[{"path":"utility-engine.ts","target":"components/audio-ui/devices/utility/engine.ts","type":"registry:lib"}],"name":"utility-engine","registryDependencies":["@audio-ui/utility-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The limiter as a device: an input gain, a ceiling and a release, the numbers that go on the nodes for a state and the curve a state plays, with no panel and no audio in it.","files":[{"path":"limiter-device.ts","target":"components/audio-ui/devices/limiter/device.ts","type":"registry:lib"}],"name":"limiter-device","registryDependencies":["@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":[],"description":"A limiter on the Web Audio API for a limiter state: the browser compressor node at a ratio of 20 with no knee, its make-up taken back out, the signal going round it when it is off.","files":[{"path":"limiter-engine.ts","target":"components/audio-ui/devices/limiter/engine.ts","type":"registry:lib"}],"name":"limiter-engine","registryDependencies":["@audio-ui/limiter-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The gate as a device: a threshold, a floor, an attack, a hold, a release and a look-ahead, the numbers that go on the nodes for a state, the detector worklet and the curve a state plays, with no panel and no audio in it.","files":[{"path":"gate-device.ts","target":"components/audio-ui/devices/gate/device.ts","type":"registry:lib"}],"name":"gate-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A gate on the Web Audio API for a gate state: a worklet detector reads the key and writes the gain (threshold, attack, hold, release), and a delay in front of the gain gives the look-ahead.","files":[{"path":"gate-engine.ts","target":"components/audio-ui/devices/gate/engine.ts","type":"registry:lib"}],"name":"gate-engine","registryDependencies":["@audio-ui/gate-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The saturator as a device: a curve, a drive, a mix and an output level, the numbers that go on the nodes for a state, the four curves and the transfer curve a state plays, with no panel and no audio in it.","files":[{"path":"saturator-device.ts","target":"components/audio-ui/devices/saturator/device.ts","type":"registry:lib"}],"name":"saturator-device","registryDependencies":["@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":[],"description":"A saturator on the Web Audio API for a saturator state: a drive gain into the table of the chosen curve at 4x oversampling, mixed with the clean sound at an output level; the table is rebuilt only when the curve changes.","files":[{"path":"saturator-engine.ts","target":"components/audio-ui/devices/saturator/engine.ts","type":"registry:lib"}],"name":"saturator-engine","registryDependencies":["@audio-ui/saturator-device","@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The phaser-flanger as a device: a mode, a rate, a depth, a centre frequency, a delay, a feedback and a mix, the numbers that go on the nodes for a state and the sweep, with no panel and no audio in it.","files":[{"path":"phaser-device.ts","target":"components/audio-ui/devices/phaser/device.ts","type":"registry:lib"}],"name":"phaser-device","registryDependencies":["@audio-ui/synced-rate"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The vibe as a device: a lamp that pulses on four phase-shift stages spread wide apart, in chorus or vibrato, with its speed, intensity and level, the lamp's cycle and what it shows, and no panel and no audio in it.","files":[{"path":"vibe-device.ts","target":"components/audio-ui/devices/vibe/device.ts","type":"registry:lib"}],"name":"vibe-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A phaser and flanger on the Web Audio API for a phaser state: four all-pass filters and a short delay swept by one oscillator, crossfaded by the mode, with feedback and a mix.","files":[{"path":"phaser-engine.ts","target":"components/audio-ui/devices/phaser/engine.ts","type":"registry:lib"}],"name":"phaser-engine","registryDependencies":["@audio-ui/phaser-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The vibe on the Web Audio API: a warm preamp, four all-pass stages swept by an oscillator of the lamp's own wave, mixed half dry in chorus or alone in vibrato, and a bypass when it is off.","files":[{"path":"vibe-engine.ts","target":"components/audio-ui/devices/vibe/engine.ts","type":"registry:lib"}],"name":"vibe-engine","registryDependencies":["@audio-ui/vibe-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The auto pan as a device: a mode, a waveform, a rate and a depth, the numbers that go on the nodes for a state and the movement the oscillator makes, with no panel and no audio in it.","files":[{"path":"auto-pan-device.ts","target":"components/audio-ui/devices/auto-pan/device.ts","type":"registry:lib"}],"name":"auto-pan-device","registryDependencies":["@audio-ui/synced-rate"],"type":"registry:lib"},{"dependencies":[],"description":"An auto pan and tremolo on the Web Audio API for an auto pan state: one oscillator that moves a stereo panner or the level of a gain, by the mode, at a rate, a depth and a waveform.","files":[{"path":"auto-pan-engine.ts","target":"components/audio-ui/devices/auto-pan/engine.ts","type":"registry:lib"}],"name":"auto-pan-engine","registryDependencies":["@audio-ui/auto-pan-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The channel EQ as a device: a low shelf, a sweepable mid bell, a high shelf, a high-pass switch and an output level, their filters as a state describes them and the curve a state plays, with no panel and no audio in it.","files":[{"path":"channel-eq-device.ts","target":"components/audio-ui/devices/channel-eq/device.ts","type":"registry:lib"}],"name":"channel-eq-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A channel EQ on the Web Audio API for a channel EQ state: a high-pass, a low shelf, a mid bell and a high shelf in series with an output trim, the same filters its curve draws, moving without a click.","files":[{"path":"channel-eq-engine.ts","target":"components/audio-ui/devices/channel-eq/engine.ts","type":"registry:lib"}],"name":"channel-eq-engine","registryDependencies":["@audio-ui/channel-eq-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The overdrive as a device: a band-pass before a soft clip with a drive, a tone and a mix, the numbers that go on the nodes for a state and the band that reaches the clip, with no panel and no audio in it.","files":[{"path":"overdrive-device.ts","target":"components/audio-ui/devices/overdrive/device.ts","type":"registry:lib"}],"name":"overdrive-device","registryDependencies":["@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":[],"description":"An overdrive on the Web Audio API for an overdrive state: a band-pass, a drive gain, a soft-clip table at 4x oversampling and a tone filter, mixed with the clean sound, moving without a click.","files":[{"path":"overdrive-engine.ts","target":"components/audio-ui/devices/overdrive/engine.ts","type":"registry:lib"}],"name":"overdrive-engine","registryDependencies":["@audio-ui/overdrive-device","@audio-ui/oversampling"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The de-esser as a device: a frequency, a threshold, a ratio and a range, the numbers that go on the nodes for a state, the table that keeps the highs above their floor and the response a state draws, with no panel and no audio in it.","files":[{"path":"deesser-device.ts","target":"components/audio-ui/devices/deesser/device.ts","type":"registry:lib"}],"name":"deesser-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A de-esser on the Web Audio API for a de-esser state: a Linkwitz-Riley split at the frequency, the highs read by the compressor's detector and taken down over the threshold, never under the range, and added back to the lows.","files":[{"path":"deesser-engine.ts","target":"components/audio-ui/devices/deesser/engine.ts","type":"registry:lib"}],"name":"deesser-engine","registryDependencies":["@audio-ui/deesser-device","@audio-ui/key-detector"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The multiband compressor as a device: two splits and a threshold and ratio for each of the three bands, with an attack, a release and an output gain, the numbers that go on the nodes for a state and the bands a state draws, with no panel and no audio in it.","files":[{"path":"multiband-device.ts","target":"components/audio-ui/devices/multiband/device.ts","type":"registry:lib"}],"name":"multiband-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A multiband compressor on the Web Audio API for a multiband state: a Linkwitz-Riley split in three bands that add back flat, and for each band the compressor's detector driving its gain.","files":[{"path":"multiband-engine.ts","target":"components/audio-ui/devices/multiband/engine.ts","type":"registry:lib"}],"name":"multiband-engine","registryDependencies":["@audio-ui/multiband-device","@audio-ui/key-detector"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The transient shaper as a device: an attack and a sustain, each up or down by 12 dB, and an output gain, the numbers that go on the nodes for a state and the source of the detector worklet, with no panel and no audio in it.","files":[{"path":"transient-device.ts","target":"components/audio-ui/devices/transient/device.ts","type":"registry:lib"}],"name":"transient-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A transient shaper on the Web Audio API for a transient state: a worklet detector reads the shape of the envelope and writes the gain, and the audio waits a millisecond for it so the attack is shaped from its first sample.","files":[{"path":"transient-engine.ts","target":"components/audio-ui/devices/transient/engine.ts","type":"registry:lib"}],"name":"transient-engine","registryDependencies":["@audio-ui/transient-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The mid/side device as a device: a level for the mid, a level for the side and a bass mono frequency, the numbers that go on the nodes for a state, with no panel and no audio in it.","files":[{"path":"mid-side-device.ts","target":"components/audio-ui/devices/mid-side/device.ts","type":"registry:lib"}],"name":"mid-side-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A mid/side device on the Web Audio API for a mid/side state: the signal split into mid and side, a level for each, a high-pass on the side for bass mono, and the two added back, moving without a click.","files":[{"path":"mid-side-engine.ts","target":"components/audio-ui/devices/mid-side/engine.ts","type":"registry:lib"}],"name":"mid-side-engine","registryDependencies":["@audio-ui/mid-side-device"],"type":"registry:lib"},{"dependencies":[],"description":"The detector of a key: an AudioWorklet loaded once per context from a blob, which reads a signal and writes the gain a compressor would apply to it. The compressor's key and the de-esser use it.","files":[{"path":"key-detector.ts","target":"components/audio-ui/devices/key-detector.ts","type":"registry:lib"}],"name":"key-detector","registryDependencies":["@audio-ui/compressor-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The redux as a device: a number of bits, a downsample factor and a mix, the numbers that go on the nodes for a state, the stairs of the quantizer and the source of the sample-hold worklet, with no panel and no audio in it.","files":[{"path":"redux-device.ts","target":"components/audio-ui/devices/redux/device.ts","type":"registry:lib"}],"name":"redux-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"A redux on the Web Audio API for a redux state: a sample hold in an AudioWorklet loaded from a blob and a quantizer table for the bits, mixed with the clean sound; the bits are crushed at once and the hold joins when the worklet is ready.","files":[{"path":"redux-engine.ts","target":"components/audio-ui/devices/redux/engine.ts","type":"registry:lib"}],"name":"redux-engine","registryDependencies":["@audio-ui/redux-device"],"type":"registry:lib"},{"dependencies":[],"description":"Measure an engine against what its device claims, in an offline audio context: how far its frequency response is from the curve the panel draws, how long it delays a signal, and the helpers to render and read a signal. For a host that brings its own engine.","files":[{"path":"device-measure.ts","target":"lib/device-measure.ts","type":"registry:lib"}],"name":"device-measure","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"What a waveshaper that oversamples costs in time, and a delay that holds a dry path back by it, so a distortion mixed with its dry sound does not comb. Measured in Chrome.","files":[{"path":"oversampling.ts","target":"lib/oversampling.ts","type":"registry:lib"}],"name":"oversampling","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The rate of an oscillator that is either free, in hertz, or synced: one cycle per note value of the host's tempo. The two parameters a device adds for it, and the function that reads the rate.","files":[{"path":"synced-rate.ts","target":"lib/synced-rate.ts","type":"registry:lib"}],"name":"synced-rate","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The sounds the previews play, by name: Boom bap and Drone, with the kick that goes with the first. Drawn once in code and looped as a buffer, no samples.","files":[{"path":"demo-sound.ts","target":"lib/demo-sound.ts","type":"registry:lib"}],"name":"demo-sound","registryDependencies":["@audio-ui/drum-synthesis"],"type":"registry:lib"},{"dependencies":[],"description":"A drum kit to start a drum rack from: a pad per drum on the General MIDI notes, each a Drum Synth at the head of its chain, the snare and the clap in a small room, the hats in one choke group.","files":[{"path":"drum-kit.ts","target":"lib/drum-kit.ts","type":"registry:lib"}],"name":"drum-kit","registryDependencies":["@audio-ui/arrangement","@audio-ui/drum-synth-device","@audio-ui/reverb-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A drum clip's notes as steps: a row per pad, a step per stretch of the grid, with each step's velocity, chance and shift, and the edits a step sequencer makes on the notes (switch a step, set its level, fill a row every n steps).","files":[{"path":"drum-steps.ts","target":"lib/drum-steps.ts","type":"registry:lib"}],"name":"drum-steps","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A chill song at 80 BPM on one two-bar loop, E minor seven, G and A, all of it notes for MIDI tracks: its drums on a drum kit's pads, one part each with a fill, and an organ, a pad, a bass and a lead hook. What the arrangement's demo plays.","files":[{"path":"demo-song.ts","target":"lib/demo-song.ts","type":"registry:lib"}],"name":"demo-song","registryDependencies":["@audio-ui/drum-kit"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"The equalizer as a device: a low shelf, two bells and a high shelf with an output trim, their filters as a state describes them, and the curve a state plays, with no panel and no audio in it.","files":[{"path":"equalizer-device.ts","target":"components/audio-ui/devices/equalizer/device.ts","type":"registry:lib"}],"name":"equalizer-device","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"An equalizer on the Web Audio API for an equalizer state: four biquad filters in series with an output trim, the same filters its curve draws, moving without a click.","files":[{"path":"equalizer-engine.ts","target":"components/audio-ui/devices/equalizer/engine.ts","type":"registry:lib"}],"name":"equalizer-engine","registryDependencies":["@audio-ui/equalizer-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core","@audio-ui/react","@audio/beat-detect"],"description":"The document of an arrangement of clips on tracks: its clips, tracks and mixes, how far a clip reaches, where a MIDI clip's notes play, and what a track's volume and pan automation gives at a point of the song","files":[{"path":"arrangement.ts","target":"lib/arrangement.ts","type":"registry:lib"}],"name":"arrangement","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"Undo and redo as a value: a pure history of any document, with bursts (a drag is one entry), redo that drops on a new change, and a depth limit","files":[{"path":"undo-history.ts","target":"lib/undo-history.ts","type":"registry:lib"}],"name":"undo-history","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"MIDI files to and from notes on a grid of steps: read one, with its tempo, write one, or download one","files":[{"path":"midi-file.ts","target":"lib/midi-file.ts","type":"registry:lib"}],"name":"midi-file","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Racks: devices in parallel chains, each with its volume, pan, switch and solo, lined up on the slowest and summed, and eight macros that turn parameters of the devices inside over a stretch of their travel; the engine that plays one on a track's chain.","files":[{"path":"rack.ts","target":"lib/rack.ts","type":"registry:lib"}],"name":"rack","registryDependencies":["@audio-ui/arrangement","@audio-ui/device-library"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Drum racks: an instrument whose chains are pads, each answering a note with the instrument at its head, such as a Drum Synth, or else a voice of the drum synthesis or a recording, into its own devices, a pad of a choke group cutting the others short; the engine that plays one on a MIDI track.","files":[{"path":"drum-rack.ts","target":"lib/drum-rack.ts","type":"registry:lib"}],"name":"drum-rack","registryDependencies":["@audio-ui/arrangement","@audio-ui/drum-synthesis","@audio-ui/instrument-rack","@audio-ui/rack","@audio-ui/voice-pool"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Note players: what a MIDI track plays through, all taking notes the same way, and the voice pool that plays an instrument of the library with a voice for each note it holds, the oldest given up first.","files":[{"path":"voice-pool.ts","target":"lib/voice-pool.ts","type":"registry:lib"}],"name":"voice-pool","registryDependencies":["@audio-ui/device-library"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Instrument racks: an instrument whose chains each start with an instrument of the library, then effects, all played by every note in layers and summed as a rack with its macros; the engine that plays one on a MIDI track.","files":[{"path":"instrument-rack.ts","target":"lib/instrument-rack.ts","type":"registry:lib"}],"name":"instrument-rack","registryDependencies":["@audio-ui/arrangement","@audio-ui/device-library","@audio-ui/rack","@audio-ui/voice-pool"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"An arrangement to and from DAWproject, the open exchange format other DAWs read and write: tracks, returns and the main track with their mix and sends, audio clips with fades, loop and warp, MIDI clips, volume and pan automation, locators, tempo and time signatures, and the equalizer, compressor, gate and limiter; a report says what was left out. With the zip archives it is packed in.","files":[{"path":"dawproject.ts","target":"lib/dawproject.ts","type":"registry:lib"},{"path":"zip.ts","target":"lib/zip.ts","type":"registry:lib"}],"name":"dawproject","registryDependencies":["@audio-ui/arrangement","@audio-ui/use-arrangement","@audio-ui/compressor-device","@audio-ui/equalizer-device","@audio-ui/gate-device","@audio-ui/limiter-device"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Recording into an arrangement: an input recorder on an AudioWorklet that keeps each block with its frame on the audio clock, the frames of a take with the latency taken off, and the audio or MIDI clip a take becomes, with record quantization and overdub","files":[{"path":"recording.ts","target":"lib/recording.ts","type":"registry:lib"},{"path":"input-recorder.ts","target":"lib/input-recorder.ts","type":"registry:lib"}],"name":"recording","registryDependencies":["@audio-ui/arrangement"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A track's player of audio clips on an AudioWorklet: its recordings to the frame on the audio clock, with gain, fades, loops, reverse and warp, in a running or an offline context","files":[{"path":"clip-player.ts","target":"lib/clip-player.ts","type":"registry:lib"}],"name":"clip-player","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Every device of the registry with its engine, by shelf: what a host needs to build a track's chain from the ids a project stores, and what a device browser lists","files":[{"path":"device-library.ts","target":"lib/device-library.ts","type":"registry:lib"}],"name":"device-library","registryDependencies":["@audio-ui/auto-pan-device","@audio-ui/auto-pan-engine","@audio-ui/channel-eq-device","@audio-ui/channel-eq-engine","@audio-ui/chorus-device","@audio-ui/chorus-engine","@audio-ui/compressor-device","@audio-ui/compressor-engine","@audio-ui/deesser-device","@audio-ui/deesser-engine","@audio-ui/delay-device","@audio-ui/delay-engine","@audio-ui/distortion-device","@audio-ui/distortion-engine","@audio-ui/equalizer-device","@audio-ui/equalizer-engine","@audio-ui/filter-device","@audio-ui/filter-engine","@audio-ui/gate-device","@audio-ui/gate-engine","@audio-ui/limiter-device","@audio-ui/limiter-engine","@audio-ui/mid-side-device","@audio-ui/mid-side-engine","@audio-ui/multiband-device","@audio-ui/multiband-engine","@audio-ui/overdrive-device","@audio-ui/overdrive-engine","@audio-ui/phaser-device","@audio-ui/phaser-engine","@audio-ui/vibe-device","@audio-ui/vibe-engine","@audio-ui/pocket-synth-device","@audio-ui/pocket-synth-engine","@audio-ui/poly-synth-device","@audio-ui/poly-synth-engine","@audio-ui/fm-synth-device","@audio-ui/fm-synth-engine","@audio-ui/mono-synth-device","@audio-ui/mono-synth-engine","@audio-ui/organ-device","@audio-ui/organ-engine","@audio-ui/string-machine-device","@audio-ui/string-machine-engine","@audio-ui/tape-keys-device","@audio-ui/tape-keys-engine","@audio-ui/guitar-device","@audio-ui/guitar-engine","@audio-ui/drum-synth-device","@audio-ui/drum-synth-engine","@audio-ui/sampler-device","@audio-ui/sampler-engine","@audio-ui/electric-piano-device","@audio-ui/electric-piano-engine","@audio-ui/redux-device","@audio-ui/redux-engine","@audio-ui/reverb-device","@audio-ui/reverb-engine","@audio-ui/saturator-device","@audio-ui/saturator-engine","@audio-ui/transient-device","@audio-ui/transient-engine","@audio-ui/utility-device","@audio-ui/utility-engine","@audio-ui/wave-shaper-device","@audio-ui/wave-shaper-engine"],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"A mixer on the Web Audio API: a channel per track and return, with its chain, volume, constant-power pan, switch, solo, pre or post-fader sends, delay compensation and meters, into a main track","files":[{"path":"mixer-engine.ts","target":"lib/mixer-engine.ts","type":"registry:lib"}],"name":"mixer-engine","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core","@audio-ui/react"],"description":"Plays an arrangement on the audio clock: its audio clips, its notes through each track's instrument, its device chains, sends and returns, and an offline render to a buffer, with a hook for the transport, the playhead and the meters","files":[{"path":"arrangement-engine.ts","target":"lib/arrangement-engine.ts","type":"registry:lib"},{"path":"use-arrangement-engine.ts","target":"hooks/use-arrangement-engine.ts","type":"registry:hook"}],"name":"arrangement-engine","registryDependencies":["@audio-ui/drum-synthesis","@audio-ui/arrangement","@audio-ui/use-arrangement","@audio-ui/clip-player","@audio-ui/device-library","@audio-ui/mixer-engine","@audio-ui/rack","@audio-ui/drum-rack","@audio-ui/instrument-rack","@audio-ui/voice-pool","@audio-ui/web-audio"],"type":"registry:lib"},{"dependencies":["zod"],"description":"AI-native tool surface for a piano roll, createPianoRollTools builds typed, agent-agnostic tools (setNotes/addNotes/removeNotes/transpose/clear/setTempo) an LLM calls to compose melodies and basslines from natural language, parameterized by the roll's pitch range and grid","files":[{"path":"piano-roll-tools.ts","target":"lib/piano-roll-tools.ts","type":"registry:lib"}],"name":"piano-roll-tools","registryDependencies":[],"type":"registry:lib"},{"dependencies":[],"description":"One-shot percussion synthesis (kick, snare, hihat) built from oscillators and noise bursts, each with its own tune and decay","files":[{"path":"drum-synthesis.ts","target":"lib/drum-synthesis.ts","type":"registry:lib"}],"name":"drum-synthesis","registryDependencies":[],"type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Moved: the peaks are in @audio-ui/core/analysis and the decoding is audio-decode, as this lib gave both.","files":[],"name":"waveform-peaks","registryDependencies":["@audio-ui/audio-decode"],"type":"registry:lib"},{"description":"The gesture of reordering a row by dragging one of its items: the others slide aside, the item shows dimmed where it would land, what follows the pointer settles there, the view scrolls at its edges. No render while it moves.","files":[{"path":"sortable-drag.ts","target":"lib/sortable-drag.ts","type":"registry:lib"}],"name":"sortable-drag","type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Moved to @audio-ui/core/midi: installs the package.","files":[],"name":"midi","type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Moved to @audio-ui/core/midi: installs the package.","files":[],"name":"midi-input","type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Moved to @audio-ui/core/pitch: installs the package.","files":[],"name":"pitch-detection","type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Moved to @audio-ui/core/time: installs the package.","files":[],"name":"musical-time","type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Moved to @audio-ui/core/time: installs the package.","files":[],"name":"lookahead-scheduler","type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Moved to @audio-ui/core/analysis: installs the package.","files":[],"name":"spectrum","type":"registry:lib"},{"dependencies":["@audio-ui/core"],"description":"Moved to @audio-ui/core/analysis: installs the package.","files":[],"name":"filter-response","type":"registry:lib"},{"description":"Renamed to web-audio: installs it.","files":[],"name":"web","registryDependencies":["@audio-ui/web-audio"],"type":"registry:lib"},{"description":"Renamed to waveform-peaks: installs it.","files":[],"name":"waveform-dsp","registryDependencies":["@audio-ui/waveform-peaks"],"type":"registry:lib"},{"description":"Renamed to undo-history: installs it.","files":[],"name":"history","registryDependencies":["@audio-ui/undo-history"],"type":"registry:lib"},{"description":"Renamed to envelope-ramp: installs it.","files":[],"name":"synth-voice","registryDependencies":["@audio-ui/envelope-ramp"],"type":"registry:lib"}],"name":"audio-ui"}