Esempio n. 1
0
    def show(self, obj, fmt, app=None, subformats=None, **keywords):
        '''
        show using the appropriate subformat.
        '''
        if subformats is None:
            subformats = ['vexflow']

        if subformats and subformats[0] == 'vexflow':
            return self.vfshow(obj)
            #subformats = ['lilypond','png']
        if subformats:
            helperFormat = subformats[0]
            helperSubformats = subformats[1:]
        else:
            helperFormat = "musicxml"
            helperSubformats = []

        if not helperSubformats:
            helperSubformats = ['png']

        from music21 import converter

        helperConverter = converter.Converter()
        helperConverter.setSubconverterFromFormat(helperFormat)
        helperSubConverter = helperConverter.subConverter

        if helperFormat in ('musicxml', 'xml', 'lilypond', 'lily'):
            ### hack to make musescore excerpts -- fix with a converter class in MusicXML
            savedDefaultTitle = defaults.title
            savedDefaultAuthor = defaults.author
            defaults.title = ''
            defaults.author = ''

            if 'Opus' not in obj.classes:
                fp = helperSubConverter.write(obj,
                                              helperFormat,
                                              subformats=helperSubformats)

                defaults.title = savedDefaultTitle
                defaults.author = savedDefaultAuthor
                if helperSubformats[0] == 'png':
                    from music21.ipython21 import objects as ipythonObjects
                    ipo = ipythonObjects.IPythonPNGObject(fp)
                    return ipo
            else:
                from IPython.display import Image, display  # @UnresolvedImport
                for s in obj.scores:
                    fp = helperSubConverter.write(s,
                                                  helperFormat,
                                                  subformats=helperSubformats)

                    if helperSubformats[0] == 'png':
                        from music21.ipython21 import objects as ipythonObjects  # @Reimport
                        ipo = ipythonObjects.IPythonPNGObject(fp)
                        display(Image(filename=ipo.fp, retina=True))
                defaults.title = savedDefaultTitle
                defaults.author = savedDefaultAuthor
                return None
        elif helperFormat == 'midi':
            import base64
            from IPython.display import HTML, display  # @UnresolvedImport @Reimport
            fp = helperSubConverter.write(obj,
                                          helperFormat,
                                          subformats=helperSubformats)
            with open(fp, 'rb') as f:
                binaryMidiData = f.read()
            binaryBase64 = base64.b64encode(binaryMidiData)
            s = common.SingletonCounter()
            outputId = "midiPlayerDiv" + str(s())
            display(
                HTML("""
                <div id='""" + outputId + """'></div>
                <link rel="stylesheet" href="http://artusi.xyz/music21j/css/m21.css" 
                    type="text/css" />
                <script>
                require.config({
                    paths: {'music21': 'http://artusi.xyz/music21j/src/music21'} 
                }); 
                require(['music21'], function() { 
                               mp = new music21.miditools.MidiPlayer();
                               mp.addPlayer('#""" + outputId + """'); 
                               mp.base64Load('data:audio/midi;base64,""" +
                     binaryBase64.decode('utf-8') + """'); 
                        });
                </script>"""))
Esempio n. 2
0
        if WEAKREF_ACTIVE and self.siteWeakref is not None:
            siteIdValue = self.siteWeakref
            try:
                currentSite = GLOBAL_SITE_STATE_DICT[siteIdValue]
                del GLOBAL_SITE_STATE_DICT[siteIdValue]
            except KeyError:
                currentSite = None
                self.isDead = True
            self.site = currentSite


_NoneSiteRef = SiteRef()
_NoneSiteRef.globalSiteIndex = -2  # -1 is used elsewhere...
_NoneSiteRef.siteIndex = -2

_singletonCounter = common.SingletonCounter()


class Sites(common.SlottedObjectMixin):
    '''
    An object, stored within a Music21Object, that stores (weak) references to
    a collection of objects that may be contextually relevant to this object.

    Most of these objects are locations (also called sites), or Streams that
    contain this object.

    All defined contexts are stored as dictionaries in a dictionary. The
    outermost dictionary stores objects.
    '''

    ### CLASS VARIABLES ###
Esempio n. 3
0
    def show(self, obj, fmt, app=None, subformats=None, **keywords): # pragma: no cover
        '''
        show using the appropriate subformat.
        '''
        if subformats is None:
            subformats = ['vexflow']

        if subformats and subformats[0] == 'vexflow':
            return self.vfshow(obj)
            #subformats = ['lilypond', 'png']
        if subformats:
            helperFormat = subformats[0]
            helperSubformats = subformats[1:]
        else:
            helperFormat = "musicxml"
            helperSubformats = []

        if not helperSubformats:
            helperSubformats = ['png']

        from music21 import converter

        helperConverter = converter.Converter()
        helperConverter.setSubconverterFromFormat(helperFormat)
        helperSubConverter = helperConverter.subConverter

        from IPython.display import Image, display, HTML # @UnresolvedImport

        if helperFormat in ('musicxml', 'xml', 'lilypond', 'lily'):
            ### hack to make musescore excerpts -- fix with a converter class in MusicXML
            from music21.ipython21 import objects as ipythonObjects

            savedDefaultTitle = defaults.title
            savedDefaultAuthor = defaults.author
            defaults.title = ''
            defaults.author = ''


            if 'Opus' not in obj.classes:
                scores = [obj]
            else:
                scores = list(obj.scores)

            for s in scores:
                fp = helperSubConverter.write(s, helperFormat,
                                              subformats=helperSubformats, **keywords)

                if helperSubformats[0] == 'png':
                    if not str(environLocal['musescoreDirectPNGPath']).startswith('/skip'):
                        ipo = ipythonObjects.IPythonPNGObject(fp)
                        display(Image(data=ipo.getData(), retina=True))
                    else:
                        # smallest transparent pixel
                        pngData64 = (b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA'
                                     + b'6fptVAAAACklEQVQYV2P4DwABAQEAWk1v8QAAAABJRU5ErkJggg==')
                        pngData = base64.b64decode(pngData64)
                        display(Image(data=pngData, retina=True))

            defaults.title = savedDefaultTitle
            defaults.author = savedDefaultAuthor
            return None

        elif helperFormat == 'midi':
            fp = helperSubConverter.write(obj, helperFormat, subformats=helperSubformats)
            with open(fp, 'rb') as f:
                binaryMidiData = f.read()

            binaryBase64 = base64.b64encode(binaryMidiData)
            s = common.SingletonCounter()
            outputId = "midiPlayerDiv" + str(s())
            display(HTML("""
                <div id='""" + outputId + """'></div>
                <link rel="stylesheet" href="http://artusi.xyz/music21j/css/m21.css"
                    type="text/css" />
                <script>
                require.config({
                    paths: {'music21': 'http://artusi.xyz/music21j/src/music21'}
                });
                require(['music21'], function() {
                               mp = new music21.miditools.MidiPlayer();
                               mp.addPlayer('#""" + outputId + """');
                               mp.base64Load('data:audio/midi;base64,""" +
                                   binaryBase64.decode('utf-8') + """');
                        });
                </script>"""))