| File | Date | Author | Commit |
|---|---|---|---|
| .github | 2 days ago |
|
[d04535] add-test-workflow |
| data | 2 days ago |
|
[b440b1] initial-release |
| docs | 2 days ago |
|
[b440b1] initial-release |
| examples | 2 days ago |
|
[b440b1] initial-release |
| src | 2 days ago |
|
[b440b1] initial-release |
| test | 2 days ago |
|
[b440b1] initial-release |
| tools | 2 days ago |
|
[b440b1] initial-release |
| .gitignore | 2 days ago |
|
[b440b1] initial-release |
| .zenodo.json | 2 days ago |
|
[92b5c3] prepare-zenodo-release |
| CITATION.cff | 2 days ago |
|
[92b5c3] prepare-zenodo-release |
| LICENSE | 2 days ago |
|
[b440b1] initial-release |
| README.md | 2 days ago |
|
[9ca639] add-test-badge |
| package.json | 2 days ago |
|
[4cb0ff] add-package-discovery-metadata |
A small, dependency-free JavaScript utility for turning already-detected note events into valid MusicXML, plus reproducible browser test data from an MP3/WAV transcription workflow.
This repository is useful when you already have note events shaped like this:
{
"pitchMidi": 69,
"startTimeSeconds": 0,
"durationSeconds": 1
}
It does not upload audio and it does not contain an audio-transcription model. The included converter handles the notation stage: timing quantization, rests, chords, ties across measure boundaries, clef selection, and MusicXML output.
src/musicxml.js — converts note events to MusicXML 3.1.examples/four-note-events.json — a four-note input fixture.examples/four-note-score.musicxml — generated output from that fixture.data/audio-format-comparison.csv — WAV/MP3 results from the same generated four-tone source.data/sheet-music-browser-runs.csv — two measured browser runs, including output sizes and elapsed times.docs/browser-audio-transcription-checklist.md — a concrete pre-publication test checklist.test/musicxml.test.mjs — tests for notes, rests, chords, escaping, and measure-spanning ties.Node.js 18 or newer is sufficient; there are no runtime dependencies.
npm test
npm run generate:example
import { buildMusicXml } from './src/musicxml.js';
const notes = [
{ pitchMidi: 69, startTimeSeconds: 0, durationSeconds: 1 },
{ pitchMidi: 72, startTimeSeconds: 1, durationSeconds: 1 },
];
const result = buildMusicXml(notes, 120, 'Two notes');
console.log(result.xml);
buildMusicXml() returns:
xml: the complete MusicXML document.noteCount: the number of valid input note events.measureCount: the number of generated 4/4 measures.The CSV files contain observed results, not estimates. The WAV and MP3 rows were produced from the same generated four-second, monophonic source at 44,100 Hz. The browser-run table records one 31-second live run and one four-second live smoke test. Thresholds and source construction are documented beside the data in docs/browser-audio-transcription-checklist.md.
A live browser implementation is available at MP3 MIDI Tool.
MIT