MIDI Workbench
Import a local MIDI file or build a sequence one note at a time. The piano roll and numeric note table share exact tick positions, durations and integer velocities, while each track keeps its name, channel and static instrument program. Edit the tempo map, quantize a track, then hear the sequence with a chosen oscillator waveform. MIDI export keeps the supported notes and metadata; project JSON also keeps the editor settings, and WAV renders the complete sequence as synthesized audio. Processing stays in your browser, and the project can be remembered on this device.
Sequence and tracks
Programs are retained in MIDI. Playback and WAV use the selected oscillator waveform, including on the percussion channel. This page does not load SoundFonts.
Starts at tick 0. Applied map has 1 event(s); timing is integrated through every change. PPQ: 480. Draft fields affect the sequence only when applied.
Piano roll and numeric note editor
Click an empty roll position to add a grid-length note. Focus a note and use arrow keys to move it, or use the numeric fields below for any MIDI pitch. Roll shows up to 256 notes in this window; the table pages through all 0 notes.
Quarter: 480 ticks. Eighth: 240. Sixteenth: 120. Starts and ends round to the nearest grid tick, ties up; durations remain at least one tick. A conflicting same-pitch overlap rejects the whole edit.
| Note | Start | Duration | Velocity | Action |
|---|
- Notes / tracks
- 0 / 1
- Duration
- 0.000 s
- Playback
- Stopped
Import a MIDI file or add a note to begin.
This note workspace retains note pitches, tick durations, integer velocities, effective tempo maps, track names, channels and static programs. Other MIDI events, including controllers, sustain, pitch bends, lyrics, meter and system-exclusive data, are omitted from imports and MIDI exports. Imported multi-channel tracks are split; empty tracks are omitted. Program changes within one track/channel need separate tracks.
Different pitches can overlap. Same-pitch notes on one channel must not overlap, so note-off pairing remains unambiguous. Playback uses one oscillator per note, a short edge envelope and gain divided by peak polyphony. No uploaded audio is converted to MIDI.
Limits: 10 MB MIDI, 3 MB project JSON, 32 tracks, 10000 notes, 50000 MIDI events, 256 tempos, 10000000 ticks, 600 seconds and 64 simultaneous notes. At most 256 note starts may occur within 0.2 seconds. WAV exports a complete sequence up to 120 seconds within 2400 voice-seconds of synthesis; it is mono PCM at 44100 Hz. No partial file is silently substituted. WAV uses simple oscillator formulas whose higher harmonics can alias, so it can sound different from browser playback.
Complete current project JSON
{
"format": "gizmobench-midi-workbench",
"version": 1,
"title": "Untitled sequence",
"ppq": 480,
"tempos": [
{
"tick": 0,
"micros": 500000
}
],
"tracks": [
{
"id": "t1",
"name": "Track 1",
"channel": 0,
"program": 0,
"notes": []
}
],
"waveform": "sine",
"grid": 120
}Accuracy. Synthesized playback/user-owned SoundFonts only; no bundled unlicensed instrument bank or audio-to-MIDI promise.
All processing stays local. Project data may be remembered on this device. MIDI parsing and writing use the locally loaded MIT-licensed @tonejs/midi 2.0.28. Oscillator audio is original synthesis; General MIDI program names do not claim sampled instrument sounds.
Common questions
- How do I add or edit a MIDI note?
- Enter a MIDI pitch from 0 to 127, a start tick, a positive duration and a velocity from 1 to 127, then choose Add note. Choose Edit beside an existing note to load its numeric fields, change them and choose Apply note. Clicking an empty position in the piano roll adds a note with the current grid duration. A focused roll note moves with the arrow keys and can be removed with Delete. The roll shows C2 through C6 and up to 256 notes in its current time window; the paged table includes every note, including pitches outside that window.
- What does MIDI import and export preserve?
- The workspace retains note pitches, start ticks, durations, velocities, release velocities, effective tempo changes, track names, channels and static program numbers. It accepts Standard MIDI File formats 0 and 1 with PPQ timing. Multi-channel tracks are split into separate tracks, and empty tracks are omitted. Controllers, sustain pedal events, pitch bends, lyrics, meter, system-exclusive data and other non-note events are omitted from imports and MIDI exports. Changing instrument programs within one track and channel requires separate instrument tracks before import. Keep the original file if you need its omitted events.
- How are tempo changes and note durations calculated?
- Tempo rows contain a start tick and BPM, beginning at tick 0 in increasing order. Each interval uses the tempo active in that interval. At 480 ticks per quarter note and 120 BPM, a 480-tick C4 lasts 0.5 seconds. If the tempo changes to 60 BPM at tick 480, a note spanning ticks 0 to 960 lasts 1.5 seconds. Imported MIDI tempo values retain their exact integer microseconds per quarter note; entering BPM rounds to the nearest MIDI microsecond.
- What does quantization do to overlapping notes?
- Quantization rounds note starts and ends to the nearest grid tick, with halfway values rounded upward and durations kept at least one tick long. Chronological order and ties remain stable. Different pitches can overlap. Same-pitch notes on the same MIDI channel cannot overlap, including across tracks, so their note-off pairing stays unambiguous. If quantization would create that conflict, the whole edit is rejected and the previous notes remain. Tracks sharing a channel must also use the same program.
- Will playback and WAV sound like the selected MIDI instrument?
- Playback and WAV use your chosen sine, triangle, square or sawtooth waveform with short attack and release edges. MIDI program numbers are preserved as metadata, but this page does not load SoundFonts or a sampled instrument bank. WAV is mono 16-bit PCM at 44100 Hz. Its simple oscillator formulas can alias at high pitches, especially for waveforms with rich harmonics, so exported audio can differ from the browser's oscillator playback. The tool does not transcribe audio into MIDI.
- How large can a project be?
- MIDI input is limited to 10 MB and project JSON to 3 MB. A project supports 32 tracks, 10000 notes, 256 tempo events, 10000000 ticks and 600 seconds, with up to 64 simultaneous notes and 256 note starts in any 0.2-second interval. MIDI parsing also has a 50000-event budget and bounded metadata sizes. WAV export supports complete sequences up to 120 seconds and 2400 voice-seconds, which is the sum of every note's duration. An oversized render is refused rather than silently shortened.
- Can I save a project and stop processing safely?
- Project JSON contains the full current sequence, tempo map, waveform and grid, and can be imported again. The editor also remembers valid work locally when browser storage is available. Stop ends playback and cancels pending work; Cancel processing ends an import or export. Editing the sequence cancels an unfinished operation, and hiding or leaving the page stops audio and background processing. A failed import leaves the previous sequence available.
Synthesized playback/user-owned SoundFonts only; no bundled unlicensed instrument bank or audio-to-MIDI promise.