Using music21
with the Jupyter (iPython) Notebook¶
Setting up the Jupyter environment¶
To get music21
to work it’s best to have a good pip installation
first. Then you should be able to simply install jupyter (and IPython if
you don’t have it):
$ sudo pip install jupyter $ sudo pip install ipython
Using the web-based Jupyter Notebook¶
Start jupyter in a directory you want to save files by typing.
`$ jupyter notebook`
Now in the webbrowser you can type commands such as the ones below:
from music21 import *
c = chord.Chord("C4 E4 G4")
c.isConsonant()
True
All other normal music21
commands will work as they should
Displaying graphics inline¶
By default, you cannot be sure that justing call .show() will work because it might open up your MusicXML reader locally...
c.show()
<music21.ipython21.objects.IPythonPNGObject at 0x1054dcf60>
Nor does just generating a lilypond PNG or PDF work as you’d like – this will display it on the screen but not in your browser:
c.show('lily.pdf')
Instead do this:
%load_ext music21.ipython21
Now this will work:
c.show()

If you don’t want to do that, then instead do this...
from IPython.core.display import Image
Image(filename=c.write('lily.png'))
SVG is much faster, but it doesn’t work, sadly...
Image(filename=c.write('lily.svg'))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-a78ad09b705c> in <module>()
----> 1 Image(filename=c.write('lily.svg'))
/Users/cuthbert/anaconda/lib/python3.5/site-packages/IPython/core/display.py in __init__(self, data, url, filename, format, embed, width, height, retina, unconfined, metadata)
743
744 if self.embed and self.format not in self._ACCEPTABLE_EMBEDDINGS:
--> 745 raise ValueError("Cannot embed the '%s' image format" % (self.format))
746 self.width = width
747 self.height = height
ValueError: Cannot embed the 'svg' image format
Whole pieces will show properly also now that the extension module is loaded
b = corpus.parse('bach/bwv66.6')
b.show()

And that is basically it! We use sphinx
for interwiki links, which,
sadly, won’t show up on the notebook, but should render properly.
But I did make a sphinx-markdown Notebook extension. When it’s ready, I’ll put it up. Make a directory “sphinx-markdown” in a “usability” directory in “nbextensions” (mine is at “~/Library/Jupyter/nbextensions”). And put this file there as “main.js”: [https://gist.github.com/mscuthbert/6411762f98f3536712e0]
Check to see if it exists:
import notebook
notebook.nbextensions.check_nbextension('usability/sphinx-markdown', user=True)
True
Load it with:
E = notebook.nbextensions.EnableNBExtensionApp()
E.toggle_nbextension('usability/sphinx-markdown/main')
Enabling notebook extension usability/sphinx-markdown/main...
- Validating: [32mOK[0m
False
Save, and reload. Then test it with a markdown cell like:
For more information, see, installing IPython/Jupyter for Music21.
And you should get this output:
For more information, see, installing IPython/Jupyter for Music21. :-)
It works!