Beispiel #1
0
def importMP3s(mp3_list, file_name): 
    ''' load an xml file into an MP3File list '''

    tag_reader = findxml.XMLReader(xmlFile=file_name)

    mp3_nodes = tag_reader.getTheseNodes('mp3')

    tmp_sort = []
    
    for node in mp3_nodes:
        orig_artist = findxml.safeChildGet(node, 'originalartist').strip()
        clean_artist = findxml.safeChildGet(node, 'cleanartist').strip()
        orig_track = findxml.safeChildGet(node, 'originaltrack').strip()
        clean_track = findxml.safeChildGet(node, 'cleantrack').strip()
        orig_album = findxml.safeChildGet(node, 'originalalbum').strip()
        clean_album = findxml.safeChildGet(node, 'cleanalbum').strip()
        orig_tracknum = findxml.safeChildGet(node, 'originaltracknum').strip()
        clean_tracknum = findxml.safeChildGet(node, 'cleantracknum').strip()
        path = findxml.safeChildGet(node, 'path').strip()

        artist = clean_artist if clean_artist else orig_artist
        track = clean_track if clean_track else orig_track
        album = clean_album if clean_album else orig_album
        tracknum = clean_tracknum if clean_tracknum else orig_tracknum

        mylog.INFO('orig_artist: \'%s\' clean_artist: \'%s\' track: %s album: %s tracknum: %s' %
                   (orig_artist, clean_artist, track, album, tracknum))

        orig_mp3 = Track(_artist=artist, _name=track, _album=album, 
                         _track_num=tracknum, _path=path)

        mp3_list.append(MP3File(orig_track=orig_mp3.copy(), my_path=path))


    tag_reader.close()
Beispiel #2
0
def FindMusic(my_dir, callback, only_artist_str=''):
    '''Given a directory, will populate a list with all the *.mp3 files found in
    that directory (recursively) and read their current tag info. Usually the 
    first step in any use case. 

    my_dir -> directory to search for *.mp3
    callback -> a function pointer funct(str) used to return status info 
    only_artist_str -> optional tag to only find artists matching this string

    returns -> mp3_list, a list of MP3File objects
    '''

    mp3_list = []

    fileio.MP3Finder(my_dir, mp3_list, callback)

    new_mp3_list = []

    for mp3_file in mp3_list:

        fn = mp3_file.orig_track.path
        is_dup = mp3_file.is_dup

        callback('processing: %s' % fn)

        
        # load up the id3 tags from the mp3s in our xml list 
        try:
            id3_reader = fileio.Id3tool(fn)


            orig_mp3 = Track(_artist=id3_reader.readTag('artist'),
                             _name=id3_reader.readTag('title'),
                             _album=id3_reader.readTag('album'),
                             _track_num=id3_reader.readTag('tracknumber'),
                             _path=fn)


            if only_artist_str:
                srch = strtool.sanitizeTrackStr(only_artist_str)
                artist = strtool.sanitizeTrackStr(mp3_obj.orig_track.artist)

                if not re.search(srch, artist, re.IGNORECASE):
                    mylog.DBG1(6,'skipping artist %s for match %s' % (srch, artist))
                    continue

            new_mp3_list.append(MP3File(orig_track=orig_mp3.copy(), 
                                my_path=fn, is_dup_flag=is_dup))


        except:
            mylog.ERR('ID3 read failed on \'%s\'\n' % fn)

            new_mp3_list.append(MP3File(my_path=fn, is_dup_flag=is_dup))

    del mp3_list

    return new_mp3_list