music21.vexflow.toMusic21j

Convert a music21 object into JSON and send it to the browser for music21j to use.

VexflowPickler

class music21.vexflow.toMusic21j.VexflowPickler

VexflowPickler methods

VexflowPickler.fromObject(thisObject, mode=None)
VexflowPickler.fromStream(thisStream, mode=None)
VexflowPickler.getHTML(dataSplit, title=None, defaults=None)

Get the complete HTML page to pass to the browser:

>>> vfp = vexflow.toMusic21j.VexflowPickler()
>>> print(vfp.getHTML('{"hi": "hello"}', 'myPiece'))
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <!-- for MSIE 10 on Windows 8 -->
    <meta http-equiv="X-UA-Compatible" content="requiresActiveX=true"/>
    <title>myPiece</title>
    <script data-main='https://www.music21.org/music21j/src/music21'
            src='https://www.music21.org/music21j/ext/require/require.js'></script>
    <script>
    require(['music21'], function() {
                    var pickleIn = {"hi": "hello"};
                    var jpc = new music21.fromPython.Converter();
                    streamObj = jpc.run(pickleIn);
                    streamObj.renderOptions.events.resize = "reflow";
                streamObj.appendNewCanvas();
                });
    </script>
    </head>
    <body>
    </body>
    </html>
VexflowPickler.getJSBody(dataSplit, defaults=None)

Get the javascript code without the <script> tags to render the JSON

>>> vfp = vexflow.toMusic21j.VexflowPickler()
>>> print(vfp.getJSBody('{"hi": "hello"}'))
        require(['music21'], function() {
            var pickleIn = {"hi": "hello"};
            var jpc = new music21.fromPython.Converter();
            streamObj = jpc.run(pickleIn);
            streamObj.renderOptions.events.resize = "reflow";
        streamObj.appendNewCanvas();
        });
VexflowPickler.getJSBodyScript(dataSplit, defaults=None)

Get the <script>…</script> tag to render the JSON

>>> vfp = vexflow.toMusic21j.VexflowPickler()
>>> print(vfp.getJSBodyScript('{"hi": "hello"}'))
   <script>
        require(['music21'], function() {
            var pickleIn = {"hi": "hello"};
            var jpc = new music21.fromPython.Converter();
            streamObj = jpc.run(pickleIn);
            streamObj.renderOptions.events.resize = "reflow";
        streamObj.appendNewCanvas();
        });
    </script>
VexflowPickler.getLoadTemplate(urls=None)

Gets the <script> tag for loading music21 from require.js

>>> vfp = vexflow.toMusic21j.VexflowPickler()
>>> vfp.getLoadTemplate()
"<script data-main='https://www.music21.org/music21j/src/music21'
    src='https://www.music21.org/music21j/ext/require/require.js'></script>"
>>> d = {'m21URI': 'file:///tmp/music21', 'requireURI': 'http://requirejs.com/require.js'}
>>> vfp.getLoadTemplate(d)
"<script data-main='file:///tmp/music21' src='http://requirejs.com/require.js'></script>"
VexflowPickler.splitLongJSON(jsonString, chunkSize=110)

Functions

music21.vexflow.toMusic21j.fromObject(thisObject, *, mode='html', local=False)

returns a string of data for a given Music21Object such as a Score, Note, etc. that can be displayed in a browser using the music21j package. Called by .show(‘vexflow’).

>>> n = note.Note('C#4')
>>> print(vexflow.toMusic21j.fromObject(n))
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <!-- for MSIE 10 on Windows 8 -->
    <meta http-equiv="X-UA-Compatible" content="requiresActiveX=true"/>
    <title>Music21 Fragment</title>
    <script data-main='https://www.music21.org/music21j/src/music21'
            src='https://www.music21.org/music21j/ext/require/require.js'></script>
    <script>
        require(['music21'], function() {
            var pickleIn = '{"m21Version": {"py/tuple": [1, 9, 2]}, "stream":
{"_mutable": true, "_activeSite": null, "' +
'_priority": 0, "_elements": [], "_cache": {}, "definesExplicitPageBreaks":
false, "_unlinkedDuration": null, "' +
'id": ..., "_duration": null, "py/object": "music21.stream.Stream",
"streamStatus": {"py/object": "music' +
'21.stream.streamStatus.StreamStatus", "_enharmonics": null,
"_dirty": null, "_concertPitch": null, "_accidentals"' +
': null, "_ties": null, "_rests": null, "_ornaments": null,
"_client": null, "_beams": null, "_measures": nu' +
...
'd": null}, "definesExplicitSystemBreaks": false, ...}}';
            var jpc = new music21.fromPython.Converter();
            streamObj = jpc.run(pickleIn);
            streamObj.renderOptions.events.resize = "reflow";
            streamObj.appendNewCanvas();
        });
    </script>

</head>
<body>
</body>
</html>
  • Changed in v8: mode and useLocal are keyword only.