vexflow-musicxml
Version:
MusicXml Parser for vexflow
104 lines (76 loc) • 3.42 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: src/visitors/MeasureVisitor.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: src/visitors/MeasureVisitor.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>/**
* @file
* @description Visitor implementation for converting MusicXML Measure to VexFlow
* @author {@link mailto:neumann.benni@gmail.com|neumann.benni@gmail.com}
* @version 0.1
*/
/* eslint-disable class-methods-use-this */
import Vex from 'vexflow';
import { ClefVisitor, KeyVisitor, TimeSignatureVisitor } from './index';
const { Flow } = Vex;
/**
* This class implements a visitor used to convert MusicXML measures to VexFlow staves
*/
class MeasureVisitor {
visit(measure) {
console.log(`Part: ${measure.Part}, Number: ${measure.Number}, ${measure.StartClefs.length}`);
const staveList = [];
const allStaves = measure.getStaves();
for (let s = 0; s < allStaves; s++) {
const stave = s + 1;
let staveClef = measure.getClefsByStaff(stave);
if (staveClef === undefined) {
staveClef = 'treble';
} else {
staveClef = staveClef.accept(ClefVisitor);
}
const flowStave = new Flow.Stave();
staveList.push({
staff: flowStave,
key: measure.Attributes.Key.accept(KeyVisitor),
clef: staveClef,
time: measure.Attributes.Time.accept(TimeSignatureVisitor),
});
// Adding time signatures
const timingChange = JSON.stringify(measure.Time) !== JSON.stringify(measure.lastMeasure.Time);
if (measure.Number === 1 || timingChange) {
flowStave.addTimeSignature(measure.Attributes.Time.accept(TimeSignatureVisitor));
}
}
return staveList;
}
}
export const measureVisitor = new MeasureVisitor();
</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-Test.html">Test</a></li></ul><h3>Classes</h3><ul><li><a href="ClefVisitor.html">ClefVisitor</a></li><li><a href="Key_Key.html">Key</a></li><li><a href="KeyVisitor.html">KeyVisitor</a></li><li><a href="Measure.html">Measure</a></li><li><a href="MeasureVisitor.html">MeasureVisitor</a></li><li><a href="MusicXmlRenderer.html">MusicXmlRenderer</a></li><li><a href="Note.html">Note</a></li><li><a href="NoteVisitor.html">NoteVisitor</a></li><li><a href="Part.html">Part</a></li><li><a href="TimeSignatureVisitor.html">TimeSignatureVisitor</a></li><li><a href="TimeVisitor.html">TimeVisitor</a></li><li><a href="XmlObject.html">XmlObject</a></li><li><a href="XmlSerializer_XmlSerializer.html">XmlSerializer</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Mon Nov 20 2017 21:30:34 GMT+0100 (CET)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>