Published
Edited
Dec 15, 2021
1 fork
Importers
2 stars
Insert cell
Insert cell
Insert cell
piece = await uploadMusicPiece(await upload)
Insert cell
async function uploadMusicPiece(fileUpload) {
if (!fileUpload) {
return null;
}
const n = fileUpload.name;
if (!n) {
return null;
}
// MIDI
if (n.endsWith(".midi") || n.endsWith(".mid")) {
const uintArray = new Uint8Array(await fileUpload.arrayBuffer());
return mvlib.MusicPiece.fromMidi(n, uintArray);
}
// MusicXML
if (n.endsWith(".xml") || n.endsWith(".musicxml")) {
return mvlib.MusicPiece.fromMusicXml(n, await fileUpload.text());
}
// Compressed MusicXML
if (n.endsWith(".mxl")) {
const compressed = await fileUpload.arrayBuffer();
const extracted = await JSZip.loadAsync(compressed);
// Get XML file with score from archive
const scoreFile = Object.keys(extracted.files).filter(
(d) => !d.startsWith("META")
)[0];
const xml = await extracted.file(scoreFile).async("string");
return mvlib.MusicPiece.fromMusicXml(n, xml);
}
}
Insert cell
Insert cell
// Import development version for better type names, don't do this in production!
// mvlib = require("musicvis-lib@latest/dist/musicvislib.js")
mvlib = require("musicvis-lib@^0.53.2/dist/musicvislib.js")
// mvlib = require("musicvis-lib@latest")
Insert cell
mvlib.getVersion()
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more