Humdrum Notation Plugin |
A javascript plugin for displaying music notation with Humdrum data |
This page demonstrates how to save the SVG renderings created by the
Humdrum notation plugin, as well as the Humdrum data itself. A function
called saveHumdrumSvg()
is provided with the plugin that can save
Humdrum-generated SVG images on a page to your local hard-disk.
For example, a list of incipits is shown below for several keyboard sonatas by Domenico Scarlatti. Click on the red button to the right of each incipit to save that incipit image to the local computer’s hard disk. The location where that file will be saved is dependent on settings within your browser (typically either in Downloads or the Desktop).
Sonata in C major (Allegro), K. 514, L. 1
Sonata in F minor (Andante), K. 238, L. 27
Sonata in C major (Allegro), K. 502, L. 3
After clicking on a L027K238.svg
has been downloaded:
Opening the saved SVG image into another tab in the web browser:
Here is the source code for the placement of the incipits on the page:
Sonata in C major (Allegro), K. 514, L. 1
<span class="button right" onclick="saveHumdrumSvg('L001K514')">Save</span>
<script>
displayHumdrum({
source: "L001K514",
url: "https://raw.githubusercontent.com/craigsapp/scarlatti-keyboard-sonatas/master/kern/L001K514.krn",
scale: 30,
spacingStaff: 12,
incipit: true
})
</script>
<script type="text/x-humdrum" id="L001K514"></script>
Sonata in F minor (Andante), K. 238, L. 27
<span class="button right" onclick="saveHumdrumSvg('L027K238')">Save</span>
<script>
displayHumdrum({
source: "L027K238",
url: "https://raw.githubusercontent.com/craigsapp/scarlatti-keyboard-sonatas/master/kern/L027K238.krn",
scale: 30,
spacingStaff: 12,
incipit: true
})
</script>
<script type="text/x-humdrum" id="L027K238"></script>
Sonata in C major (Allegro), K. 502, L. 3
<span class="button right" onclick="saveHumdrumSvg('L003K502')">Save</span>
<script>
displayHumdrum({
source: "L003K502",
url: "https://raw.githubusercontent.com/craigsapp/scarlatti-keyboard-sonatas/master/kern/L003K502.krn",
scale: 30,
spacingStaff: 12,
incipit: true
})
</script>
<script type="text/x-humdrum" id="L003K502"></script>
The spacingStaff: 12
option is used to set a minimum distance between
the grand-staff staves so that the width is more consistent across
multiple incipits.
Notice that each button has a click callback function, such as:
saveHumdrumSvg('L001K514')
This means to save the SVG image associated with the Humdrum script
element having the ID L001K514
. You can also given an optional
filename; otherwise, the ID will be used as the filename base, saving
to a file called L001K514.svg
in this case. To save to a file called
scarlatti-kirkpatrick-514.svg
, the callback would be:
saveHumdrumSvg('L001K514', "scarlatti-kirkpatrick-514.svg")
Here is the button styling code that was used in the example:
<style>
span.button {
background: #aa0000;
border-radius: 1rem;
font-family: Arial;
color: #fafafa;
font-size: 1rem;
padding: 0px 5px 0px 5px;
text-decoration: none;
margin-left: 1px;
margin-right: 1px;
}
span.button.demo {
font-size: 0.80rem;
padding: 0px 4px 0px 4px;
}
span.right {
display: block;
float: right;
}
span.button:hover:not(.demo) {
background: #009900;
text-shadow: 0px 0px 3px #00ff00;
box-shadow: 0px 0px 14px #008800;
cursor: pointer;
}
span.button.demo:hover {
cursor: default;
}
</style>
Here is a minimal but complete HTML file that can be used as a template for placing an SVG save button on a page. You can place your Humdrum data into this page and then save the resulting SVG images for other uses, such as figures in papers:
<html>
<head>
<title>My musical scales</title>
<script src="scripts/verovio-toolkit.js"></script>
<script src=""></script>
<script>var vrvToolkit = new verovio.toolkit()</script>
</head>
<body>
<div style="margins:auto; width:600px;">
<h1>My scales</h1>
My first scale:
<span class="button right" onclick="saveHumdrumSvg('c-major-scale')">Save SVG</span>
<script>
displayHumdrum({
source: "c-major-scale"
})
</script>
<script type="text/x-humdrum" id="c-major-scale">
**kern **fing
*M4/4 *
*k[] *
*C: *
4c 1
4d 2
4e 3
4f 1
4g 2
4a 3
4b 4
4cc 5
4b 4
4a 3
4g 2
4f 1
4e 3
4d 2
4c 1
== ==
*- *-
</script>
My second scale:
<span class="button right" onclick="saveHumdrumSvg('d-major-scale')">Save SVG</span>
<script>
displayHumdrum({
source: "c-major-scale",
target: "d-major-scale",
filter: "transpose -k d"
})
</script>
<script type="text/x-humdrum" id="d-major-scale"></script>
<style>
span.button {
background: #aa0000;
border-radius: 1rem;
font-family: Arial;
color: #fafafa;
font-size: 1rem;
padding: 0px 5px 0px 5px;
text-decoration: none;
margin-left: 1px;
margin-right: 1px;
}
span.right {
display: block;
float: right;
}
span.button:hover {
background: #009900;
text-shadow: 0px 0px 3px #00ff00;
box-shadow: 0px 0px 14px #008800;
cursor: pointer;
}
</style>
<div>
</body>
</html>
The first musical example in the template shows how to store the Humdrum data and add a button, the second example shows how to borrow the Humdrum data from the first example, and then filter it with the transpose tool to create music in D major.
Here is a snapshot of the resulting HTML rendering in a browser:
And here is the SVG image that will be saved by clicking on the save button for the second example:
When no arguments are given to the saveHumdrumSvg()
function, all SVG images created by the
Humdrum notation plugin will be saved. Each image is saved to a separate file based on the
ID of the Humdrum script element that contains the source data for the SVG image. For example,
click on the following button to save all images on the page to your local hard disk:
There are also more examples further below that will also be saved when clicking on the above button.
The HTML code for the button is:
<span class="button" onclick="saveHumdrumSvg()">Save all notation</span>
Similar to saveHumdrumSvg()
, another function called saveHumdrumText()
will save the Humdrum data that generated an SVG image. Below is an
example that now has two buttons to the right of each incipit: one to
save the SVG image and the other to save the Humdrum data:
Sonata in F minor (Andante), K. 238, L. 27
Transposed to G minor:
Transposed to E minor:
Here is the HTML code that was used to generate the above example:
Sonata in F minor (Andante), K. 238, L. 27
<span class="button right" onclick="saveHumdrumSvg('L027K238')">Save SVG</span>
<span class="button right" onclick="saveHumdrumText('L027K238')">Save Humdrum</span>
<script>
displayHumdrum({
source: "L027K238-fminor",
url: "https://raw.githubusercontent.com/craigsapp/scarlatti-keyboard-sonatas/master/kern/L027K238.krn",
scale: 30,
spacingStaff: 12,
incipit: true
})
</script>
<script type="text/x-humdrum" id="L027K238-fminor"></script>
Transposed to G minor:
<span class="button right" onclick="saveHumdrumSvg('L027K238-gminor')">Save SVG</span>
<span class="button right" onclick="saveHumdrumText('L027K238-gminor')">Save Humdrum</span>
<script>
displayHumdrum({
source: "L027K238-gminor",
url: "https://raw.githubusercontent.com/craigsapp/scarlatti-keyboard-sonatas/master/kern/L027K238.krn",
scale: 30,
spacingStaff: 12,
filter: "transpose -k g",
incipit: true
})
</script>
<script type="text/x-humdrum" id="L027K238-gminor"></script>
Transposed to E minor:
<span class="button right" onclick="saveHumdrumSvg('L027K238-eminor')">Save SVG</span>
<span class="button right" onclick="saveHumdrumText('L027K238-eminor')">Save Humdrum</span>
<script>
displayHumdrum({
source: "L027K238-eminor",
url: "https://raw.githubusercontent.com/craigsapp/scarlatti-keyboard-sonatas/master/kern/L027K238.krn",
scale: 30,
spacingStaff: 12,
filter: "transpose -k e",
incipit: true
})
</script>
<script type="text/x-humdrum" id="L027K238-eminor"></script>
Notice any filters located in the options used in displayHumdrum()
will be applied to the saved Humdrum data files. For example, each of
the downloaded Humdrum files will be in a different key. Also notice
that the options specify that only an incipit will be displayed, but
the entire Humdrum data file was downloaded from Github, and therefore
the entire score will be saved for each Humdrum file.
Similar to calling saveHumdrumSvg()
with no arguments, all Humdrum data will be saved to individual
files if saveHumdrumText()
is called with no arguments:
The HTML code for the above button:
<span class="button" onclick="saveHumdrumText()">Save all Humdrum data</span>
Compared to saving SVG images, the behavior of svgHumdrumText()
is different. The function will merge all Humdrum data into a single
multi-segment file called humdrum.txt
. This file can then be split
into separate Humdrum files by using the Humdrum Extras humsplit tool.