示例#1
0
def get_track_data(path):
    try:
        md5 = get_md5sum(path)
        shortname = short_path(path)
        track_metadata[shortname] = track.track_from_md5(md5)
    except util.EchoNestAPIError:
        track_missing.append(path)
        print "Couldn't find track '%s'. Try song.search?" % shortname
示例#2
0
# Uncomment to set the API key explicitly. Otherwise Pyechonest will
# look in the ECHO_NEST_API_KEY environment variable for the key.
#from pyechonest import config
#config.ECHO_NEST_API_KEY='YOUR API KEY'

from pyechonest import track

c_major_file = track.track_from_filename('c_major.mp3', filetype='mp3')
c_major_md5 = track.track_from_md5(c_major_file.md5)
c_major_ra_md5 = track.track_from_reanalyzing_md5(c_major_file.md5)

for c_major in (c_major_md5, c_major_ra_md5):
    print 'track ID: %s' % c_major.id
    print 'segment pitches:'
    print('%8s    ' + '%-4s ' * 12) % ('start', 'C', 'C#', 'D', 'D#', 'E', 'F',
                                       'F#', 'G', 'G#', 'A', 'A#', 'B')
    for a_dict in c_major.segments:
        print('%8.2f    ' + '%4.2f ' * 12) % (
            (a_dict['start'], ) + tuple(a_dict['pitches']))
    print ''
    def run(self):

        log.info('maintenance walker')
        log.info('action: %s' % self.action)

        if self.action == 'check_media':

            from alibrary.models import Media


            if self.id:
                items = Media.objects.filter(id=self.id)
            else:
                items = Media.objects.filter()[0:self.limit]

            for item in items:

                delete = False

                if not item.master:
                    log.info('no master for: %s' % item)
                    if self.delete_missing:
                        log.info('delete item: %s' % item)
                        delete = True

                else:
                    log.debug('got master for: %s' % item)
                    log.debug('path: %s' % item.master.path)
                    #print item.master.path

                    if os.path.isfile(item.master.path):
                        size = b = os.path.getsize(item.master.path)
                        log.debug('filesize: %s' % size)
                        if size < 10:
                            log.debug('size too small or zero > delete: %s' % size)

                    else:
                        log.debug('file does not exist')
                        delete = True

                if delete and self.delete_missing:
                    log.info('delete item: %s' % item)
                    item.delete()

                if not delete:
                    item.status = 1
                    item.save()


        if self.action == 'echonest_media':

            from alibrary.models import Media

            if self.id:
                items = Media.objects.filter(id=self.id)
            else:
                items = Media.objects.filter(echonest_id=None)[0:self.limit]

            for item in items:
                log.info('analyze: %s' % item)
                item.echonest_analyze()


        if self.action == 'clean_playlists':

            from alibrary.models import PlaylistItem
            from alibrary.models import Media

            items = PlaylistItem.objects.all()

            for item in items:
                log.info('clean: %s' % item.pk)
                if not item.content_object:
                    log.info('no content object > delete: %s' % item.pk)
                    item.delete()
                # m = Media.objects.get(pk=item.)


        if self.action == 'self_check_playlists':

            from alibrary.models.playlistmodels import self_check_playlists

            # reset
            # ps = Playlist.objects.all()
            # ps.update(status=1)

            self_check_playlists()


        if self.action == 'degrade_playlists':
            from alibrary.models.playlistmodels import Playlist
            ps = Playlist.objects.filter(type='broadcast').exclude(status=1)

            ps.update(type='playlist', status=1)




        if self.action == 'map_tags':

            from alibrary.models import Media


            if self.id:
                items = Media.objects.filter(id=self.id)
            else:
                items = Media.objects.filter()[0:self.limit]

            for item in items:

                if item.tags.count() < 1:
                    print item
                    print 'map release tags'
                    if item.release and item.release.tags.count() > 0:
                        item.tags = item.release.tags
                        item.save()




        if self.action == 'echonest_media__':

            from alibrary.models import Media
            from pyechonest.util import EchoNestAPIError
            from pyechonest import track
            from pyechonest import config as echonest_config
            echonest_config.ECHO_NEST_API_KEY=ECHONEST_API_KEY

            if self.id:
                items = Media.objects.filter(id=self.id)
            else:
                items = Media.objects.filter(status=0)[0:self.limit]

            for item in items:
                log.info('analyze: %s' % item)




                #md5 = '96fa0180d225f14e9f8cbfffbf5eb81d'

                t = None

                if item.echonest_id:
                    try:
                        log.debug('query by echonest id: %s' % item.echonest_id)
                        t = track.track_from_id(item.echonest_id)
                    except EchoNestAPIError, e:
                        print e

                if not t:
                    try:
                        f = open(item.master.path)
                        md5 = md5_for_file(f);
                        log.debug('query by md5: %s' % md5)
                        t = track.track_from_md5(md5)
                    except EchoNestAPIError, e:
                        print e


                if not t:
                    try:
                        log.debug('query by file: %s' % item.master.path)
                        f = open(item.master.path)
                        t = track.track_from_file(f, 'mp3')
                    except EchoNestAPIError, e:
                        print e
# Uncomment to set the API key explicitly. Otherwise Pyechonest will
# look in the ECHO_NEST_API_KEY environment variable for the key.
#from pyechonest import config
#config.ECHO_NEST_API_KEY='YOUR API KEY'

from pyechonest import track

c_major_file = track.track_from_filename('c_major.mp3', filetype='mp3')
c_major_md5 = track.track_from_md5(c_major_file.md5)
c_major_ra_md5 = track.track_from_reanalyzing_md5(c_major_file.md5)

for c_major in (c_major_md5, c_major_ra_md5):
    print 'track ID: %s' % c_major.id
    print 'segment pitches:'
    print ('%8s    ' + '%-4s ' * 12) % ('start', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B')
    for a_dict in c_major.segments:
        print ('%8.2f    ' + '%4.2f ' * 12) % ((a_dict['start'], ) + tuple(a_dict['pitches']))
    print ''