示例#1
0
文件: seekbar.py 项目: Lomir/foobnix
 def update_seek_status(self, position_sec, duration_sec):
     duration_str = convert_seconds_to_text(duration_sec)
     position_str = convert_seconds_to_text(position_sec)
     
     seek_text = position_str + " / " + duration_str
     seek_persent = (position_sec + 0.0) / (duration_sec)                
                           
     self.progresbar.set_text(seek_text)
     if 0 <= seek_persent <= 1: 
         self.progresbar.set_fraction(seek_persent)
示例#2
0
 def update_seek_status(self, position_sec, duration_sec):
     duration_str = convert_seconds_to_text(duration_sec)
     position_str = convert_seconds_to_text(position_sec)
     seek_persent = (position_sec + 0.0) / (duration_sec)
     seek_text = position_str + " / " + duration_str
     
     if 0 <= seek_persent <= 1: 
         self.progressbar.set_text(seek_text)
         gobject.idle_add(self.progressbar.set_fraction, seek_persent)
     
     if self.seek_bar_movie:
         self.seek_bar_movie.update_seek_status(position_sec, duration_sec)
示例#3
0
    def update_seek_status(self, position_sec, duration_sec):
        duration_str = convert_seconds_to_text(duration_sec)
        position_str = convert_seconds_to_text(position_sec)

        seek_text = position_str + " / " + duration_str
        seek_persent = (position_sec + 0.0) / (duration_sec)

        self.progresbar.set_text(seek_text)
        if 0 <= seek_persent <= 1:
            self.progresbar.set_fraction(seek_persent)

        if self.seek_bar_movie:
            self.seek_bar_movie.update_seek_status(position_sec, duration_sec)
示例#4
0
    def find_tracks_by_url(self, url):
        logging.debug("Search By URL")

        index = url.rfind("#")
        if index > 0:
            url = url[:index]
        index = url.find("id=")
        if index < 0:
            return None

        id = url[index + 3:]
        id = int(id)
        if id > 0:
            results = self.get_result('audio.get', "uid=" + str(id))
        else:
            results = self.get_result('audio.get', "gid=" + str(abs(id)))

        childs = []
        for line in results:
            bean = FModel(line['artist'] + ' - ' + line['title'])
            bean.aritst = line['artist']
            bean.title = line['title']
            bean.time = convert_seconds_to_text(line['duration'])
            bean.path = line['url'].replace("https://", "http://")
            bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
            childs.append(bean)

        return childs
示例#5
0
    def find_tracks_by_query(self, query):
        def post():
            self.find_tracks_by_query(self, query)
            
        if self.is_show_authorization(post):
            return 
        
        logging.info("start search songs " + query)
        query = urllib.quote(query.encode("utf-8"))
        
        list = self.get_result("audio.search", "q=" + query)
        childs = []
        
        if not list:
            return childs

        for line in list[1:]:                      
            bean = FModel(line['artist'] + ' - ' + line['title'])
            bean.aritst = line['artist']
            bean.title = line['title']
            bean.time = convert_seconds_to_text(line['duration'])
            bean.path = line['url']
            childs.append(bean)
             
        return childs
示例#6
0
 def find_tracks_by_url(self, url):
     logging.debug("Search By URL")
     
     index = url.rfind("#")
     if index > 0:
         url = url[:index]
     index = url.find("id=")
     if index < 0:
         return None
     
     id = url[index+3:]
     id = int(id)
     if id > 0:
         results = self.api.get('audio.get',uid=id)
     else:
         results = self.api.get('audio.get',gid=abs(id))
         
     childs = []
     for line in results:
         bean = FModel(line['artist']+' - '+line['title'])
         bean.aritst = line['artist']
         bean.title = line['title']
         bean.time = convert_seconds_to_text(line['duration'])
         bean.path = line['url']
         childs.append(bean)
          
    
     return childs 
示例#7
0
    def update_seek_status(self, position_sec, duration_sec):
        if duration_sec == 0:
            seek_text = "00:00 / 00:00"
            seek_persent = 0.999
        else:
            duration_str = convert_seconds_to_text(duration_sec)
            position_str = convert_seconds_to_text(position_sec)
            seek_persent = (position_sec + 0.0) / duration_sec
            seek_text = position_str + " / " + duration_str

        if 0 <= seek_persent <= 1:
            self.progressbar.set_text(seek_text)
            self.progressbar.set_fraction(seek_persent)

        if self.seek_bar_movie:
            self.seek_bar_movie.update_seek_status(position_sec, duration_sec)
示例#8
0
 def get_common_beans(self):
     beans = []
     cue = self.parse()
     if not self.is_cue_valid():
         return []
     for i, track  in enumerate(cue.tracks):
         bean = FModel(text=track.performer + " - " + track.title, path=track.path)
         bean.artist = track.performer
         bean.tracknumber = i + 1
         bean.title = track.title
         bean.album = self.cue_file.title
         bean.name = bean.text
         bean.start_sec = track.get_start_time_sec()
         bean.duration_sec = track.duration
         bean.time = convert_seconds_to_text(track.duration)
         bean.is_file = True
         try:
             bean.info = foobnix.util.id3_util.normalized_info(get_mutagen_audio(track.path).info, bean)
         except Exception, e:
             logging.warn(str(e) + " " + bean.path)
             bean.info = ""
                                    
         if not bean.title or not bean.artist:
             bean = udpate_id3(bean)
         
         beans.append(bean)
示例#9
0
    def update_seek_status(self, position_sec, duration_sec):
        if duration_sec == 0:
            seek_text = "00:00 / 00:00"
            seek_persent = 0.999
        else:
            duration_str = convert_seconds_to_text(duration_sec)
            position_str = convert_seconds_to_text(position_sec)
            seek_persent = (position_sec + 0.0) / duration_sec
            seek_text = position_str + " / " + duration_str

        if 0 <= seek_persent <= 1:
            self.progressbar.set_text(seek_text)
            self.progressbar.set_fraction(seek_persent)

        if self.seek_bar_movie:
            self.seek_bar_movie.update_seek_status(position_sec, duration_sec)
示例#10
0
    def find_tracks_by_url(self, url):
        logging.debug("Search By URL")

        index = url.rfind("#")
        if index > 0:
            url = url[:index]
        index = url.find("id=")
        if index < 0:
            return None

        id = url[index + 3 :]
        id = int(id)
        if id > 0:
            results = self.get_result("audio.get", "uid=" + str(id))
        else:
            results = self.get_result("audio.get", "gid=" + str(abs(id)))

        childs = []
        for line in results:
            bean = FModel(line["artist"] + " - " + line["title"])
            bean.aritst = line["artist"]
            bean.title = line["title"]
            bean.time = convert_seconds_to_text(line["duration"])
            bean.path = line["url"]
            childs.append(bean)

        return childs
示例#11
0
    def find_tracks_by_url(self, url):
        logging.debug("Search By URL")

        index = url.rfind("#")
        if index > 0:
            url = url[:index]
        index = url.find("id=")
        if index < 0:
            return None

        id = url[index + 3:]
        id = int(id)
        if id > 0:
            results = self.get_result('audio.get', "uid=" + str(id))
        else:
            results = self.get_result('audio.get', "gid=" + str(abs(id)))

        childs = []
        for line in results:
            bean = FModel(line['artist'] + ' - ' + line['title'])
            bean.aritst = line['artist']
            bean.title = line['title']
            bean.time = convert_seconds_to_text(line['duration'])
            bean.path = line['url']
            childs.append(bean)

        return childs
示例#12
0
    def get_common_beans(self):
        beans = []
        cue = self.parse()
        if not self.is_cue_valid():
            return []
        for i, track  in enumerate(cue.tracks):
            bean = FModel(text=track.performer + " - " + track.title, path=track.path)
            bean.artist = track.performer
            bean.tracknumber = i + 1
            bean.title = track.title
            bean.album = self.cue_file.title
            bean.name = bean.text
            bean.start_sec = track.get_start_time_sec()
            bean.duration_sec = track.duration
            bean.time = convert_seconds_to_text(track.duration)
            bean.is_file = True
            try:
                bean.info = foobnix.util.id3_util.normalized_info(get_mutagen_audio(track.path).info, bean)
            except Exception, e:
                logging.warn(str(e) + " " + bean.path)
                bean.info = ""

            if not bean.title or not bean.artist:
                bean = udpate_id3(bean)

            beans.append(bean)
示例#13
0
def udpate_id3(bean):
    if bean and bean.path and os.path.isfile(bean.path):
        try:
            audio = get_mutagen_audio(bean.path)
        except Exception, e:
            logging.warn("ID3 NOT MP3" + str(e) + bean.path)
            return bean
        if audio:
            if isinstance(audio, MP4):
                if audio.has_key('\xa9ART'): bean.artist = audio["\xa9ART"][0]
                if audio.has_key('\xa9nam'): bean.title = audio["\xa9nam"][0]
                if audio.has_key('\xa9alb'): bean.album = audio["\xa9alb"][0]
                if audio.has_key('\xa9wrt'):
                    bean.composer = audio["\xa9wrt"][0]
                if audio.has_key('trkn'):
                    if not FC().numbering_by_order:
                        bean.tracknumber = audio['trkn'][0]
            else:
                if audio.has_key('artist'):
                    bean.artist = decode_cp866(audio["artist"][0])
                if audio.has_key('title'):
                    bean.title = decode_cp866(audio["title"][0])
                if audio.has_key('album'):
                    bean.album = decode_cp866(audio["album"][0])
                if audio.has_key('composer'):
                    bean.composer = decode_cp866(audio['composer'][0])
                if audio.has_key('tracknumber'):
                    if not FC().numbering_by_order:
                        bean.tracknumber = audio["tracknumber"][0]
                        bean.tracknumber

        duration_sec = bean.duration_sec

        if not bean.duration_sec and audio.info.length:
            duration_sec = int(audio.info.length)

        if audio.info.__dict__:
            bean.info = normalized_info(audio.info, bean)

        if bean.artist or bean.title:
            if bean.artist and bean.title:
                pass
            elif bean.artist:
                bean.title = _("Unknown title")
            elif bean.title:
                bean.artist = _("Unknown artist")
            bean.text = bean.artist + " - " + bean.title

        if bean.tracknumber:
            try:
                bean.tracknumber = int(bean.tracknumber)
            except:
                bean.tracknumber = ""

        bean = update_bean_from_normalized_text(bean)

        bean.time = convert_seconds_to_text(duration_sec)
示例#14
0
def update_id3(bean):
    if bean and bean.path and os.path.isfile(bean.path):
        try:
            audio = get_mutagen_audio(bean.path)
        except Exception as e:
            logging.warn("ID3 NOT FOUND IN " + str(e) + " " + bean.path)
            return bean
        if audio:
            if isinstance(audio, MP4):
                if '\xa9ART' in audio: bean.artist = audio["\xa9ART"][0]
                if '\xa9nam' in audio: bean.title = audio["\xa9nam"][0]
                if '\xa9alb' in audio: bean.album = audio["\xa9alb"][0]
                if '\xa9wrt' in audio: bean.composer = audio["\xa9wrt"][0]
                if 'trkn' in audio:
                    #if not FC().numbering_by_order:
                    bean.tracknumber = audio['trkn'][0]
            else:
                if 'artist' in audio:
                    bean.artist = correct_encoding(audio["artist"][0])
                if 'title' in audio:
                    bean.title = correct_encoding(audio["title"][0])
                if 'album' in audio:
                    bean.album = correct_encoding(audio["album"][0])
                if 'composer' in audio:
                    bean.composer = correct_encoding(audio['composer'][0])
                if 'cuesheet' in audio:
                    bean.cue = audio['cuesheet'][
                        0]  # correct_encoding is in cue parser
                if 'tracknumber' in audio:
                    #if not FC().numbering_by_order:
                    bean.tracknumber = audio["tracknumber"][0]

        if not bean.duration_sec and audio.info.length:
            bean.duration_sec = int(audio.info.length)

        if audio.info.__dict__:
            bean.info = normalized_info(audio.info, bean)

        if bean.artist or bean.title:
            if bean.artist and bean.title:
                pass
            elif bean.artist:
                bean.title = _("Unknown title")
            elif bean.title:
                bean.artist = _("Unknown artist")
            bean.text = bean.artist + " - " + bean.title
        '''
        if bean.tracknumber:
            try:
                bean.tracknumber = int(bean.tracknumber)
            except:
                bean.tracknumber = ""
        '''
        bean = update_bean_from_normalized_text(bean)
        bean.time = convert_seconds_to_text(bean.duration_sec)

    return bean
示例#15
0
 def find_track_by_id(self, id):
     result = self.get_result("audio.get", "audios=" + str(id))
     if not result:
         return None
     line = result[0]
     bean = FModel(line['artist'] + ' - ' + line['title'])
     bean.aritst = line['artist']
     bean.title = line['title']
     bean.time = convert_seconds_to_text(line['duration'])
     bean.path = line['url']
     bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
     return bean
示例#16
0
    def on_pointer_motion(self, widget, event):
        width = self.progressbar.get_allocation().width
        x = event.x
        duration = self.controls.media_engine.duration_sec
        seek_percent = (x + 0.0) / width
        sec = int(duration * seek_percent)
        sec = convert_seconds_to_text(sec)

        self.tooltip_label.set_text(sec)
        self.tooltip.show_all()
        unknown_var, x, y, mask = Gdk.get_default_root_window().get_pointer()
        self.tooltip.move(x + 5, y - 15)
示例#17
0
 def find_track_by_id(self, id):
     result = self.get_result("audio.get", "audios=" + str(id))
     if not result:
         return None
     line = result[0]
     bean = FModel(line['artist'] + ' - ' + line['title'])
     bean.aritst = line['artist']
     bean.title = line['title']
     bean.time = convert_seconds_to_text(line['duration'])
     bean.path = line['url']
     bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
     return bean
示例#18
0
    def on_pointer_motion(self, widget, event):
        width = self.progressbar.get_allocation().width
        x = event.x
        duration = self.controls.media_engine.duration_sec
        seek_percent = (x + 0.0) / width
        sec = int(duration * seek_percent)
        sec = convert_seconds_to_text(sec)

        self.tooltip_label.set_text(sec)
        self.tooltip.show_all()
        unknown_var, x, y, mask = Gdk.get_default_root_window().get_pointer()
        self.tooltip.move(x+5, y-15)
示例#19
0
 def on_pointer_motion(self, widget, event):
     width = widget.allocation.width
     x = event.x
     duration = self.controls.media_engine.duration_sec
     seek_percent = (x + 0.0) / width
     sec = int(duration * seek_percent)
     sec = convert_seconds_to_text(sec)
     self.tooltip_label.set_text(sec)
     self.tooltip.show_all()
     
     x, y, mask = gtk.gdk.get_default_root_window().get_pointer() #@UndefinedVariable @UnusedVariable
     self.tooltip.move(x+15, y+15)
示例#20
0
def udpate_id3(bean):
    if bean and bean.path and os.path.isfile(bean.path):
        try:
            audio = get_mutagen_audio(bean.path)            
        except Exception, e:
            logging.warn("ID3 NOT MP3" + str(e) + bean.path)
            return bean
        if audio:
            if isinstance(audio, MP4):
                if audio.has_key('\xa9ART'): bean.artist = audio["\xa9ART"][0]
                if audio.has_key('\xa9nam'): bean.title = audio["\xa9nam"][0]
                if audio.has_key('\xa9alb'): bean.album = audio["\xa9alb"][0]
                if audio.has_key('\xa9wrt'): bean.composer = audio["\xa9wrt"][0]
                if audio.has_key('trkn'): 
                    if not FC().numbering_by_order:
                        bean.tracknumber = audio['trkn'][0]
            else:
                if audio.has_key('artist'): bean.artist = decode_cp866(audio["artist"][0])
                if audio.has_key('title'): bean.title = decode_cp866(audio["title"][0])
                if audio.has_key('album'): bean.album = decode_cp866(audio["album"][0])
                if audio.has_key('composer'): bean.composer = decode_cp866(audio['composer'][0])
                if audio.has_key('tracknumber'):
                    if not FC().numbering_by_order:
                        bean.tracknumber = audio["tracknumber"][0]
                        bean.tracknumber
        
        duration_sec = bean.duration_sec
        
        if not bean.duration_sec and audio.info.length:
            duration_sec = int(audio.info.length)
        
        if audio.info.__dict__:
            bean.info = normalized_info(audio.info, bean)
                       
        if bean.artist or bean.title:
            if bean.artist and bean.title:
                pass
            elif bean.artist:
                bean.title = _("Unknown title")
            elif bean.title:
                bean.artist = _("Unknown artist")
            bean.text = bean.artist + " - " + bean.title
                    
        if bean.tracknumber:
            try:
                bean.tracknumber = int(bean.tracknumber)
            except:
                bean.tracknumber = ""
        
        bean = update_bean_from_normalized_text(bean)
            
        bean.time = convert_seconds_to_text(duration_sec)
示例#21
0
    def on_pointer_motion(self, widget, event):
        width = widget.allocation.width
        x = event.x
        duration = self.controls.media_engine.duration_sec
        seek_percent = (x + 0.0) / width
        sec = int(duration * seek_percent)
        sec = convert_seconds_to_text(sec)
        self.tooltip_label.set_text(sec)
        self.tooltip.show_all()

        x, y, mask = gtk.gdk.get_default_root_window().get_pointer(
        )  #@UndefinedVariable @UnusedVariable
        self.tooltip.move(x + 15, y + 15)
示例#22
0
 def task():
     old_iters = self.get_child_iters_by_parent(self.model, self.get_iter_from_bean(parent));
     childs = []
     for line in self.controls.vk_service.api.get('audio.get',uid=parent.user_id):
         bean = FModel(line['artist']+' - '+line['title'])
         bean.aritst = line['artist']
         bean.title = line['title']
         bean.time = convert_seconds_to_text(line['duration'])
         bean.path = line['url']
         childs.append(bean)
                 
     update_parent_for_beans(childs, parent)
     
     self.append_all(childs)            
     gobject.idle_add(self.remove_iters,old_iters)        
示例#23
0
 def task():
     for line in self.controls.vk_service.get_result('audio.get',"uid="+parent.user_id):
         logging.debug(line);
         bean = FModel(line['artist']+' - '+line['title'])
         
         bean.aritst = line['artist']
         bean.title = line['title']
         bean.time = convert_seconds_to_text(line['duration'])
         bean.path = line['url']
         bean.is_file = True
         
         row = self.get_row_from_bean(bean);
         self.model.append(p_iter, row)
     
     for rem in old_iters:
         self.model.remove(rem)   
示例#24
0
        def task():
            old_iters = self.get_child_iters_by_parent(
                self.model, self.get_iter_from_bean(parent))
            childs = []
            for line in self.controls.vk_service.api.get('audio.get',
                                                         uid=parent.user_id):
                bean = FModel(line['artist'] + ' - ' + line['title'])
                bean.aritst = line['artist']
                bean.title = line['title']
                bean.time = convert_seconds_to_text(line['duration'])
                bean.path = line['url']
                childs.append(bean)

            update_parent_for_beans(childs, parent)

            self.append_all(childs)
            gobject.idle_add(self.remove_iters, old_iters)
示例#25
0
        def task():
            for line in self.controls.vk_service.get_result(
                    'audio.get', "uid=" + parent.user_id):
                logging.debug(line)
                bean = FModel(line['artist'] + ' - ' + line['title'])

                bean.aritst = line['artist']
                bean.title = line['title']
                bean.time = convert_seconds_to_text(line['duration'])
                bean.path = line['url']
                bean.is_file = True

                row = self.get_row_from_bean(bean)
                self.model.append(p_iter, row)

            for rem in old_iters:
                self.model.remove(rem)
示例#26
0
 def find_track_by_id(self, id):
     if id is not None:
         parts = id.split("_")
         result = self.get_result("audio.get", "owner_id=%s&audio_ids=%s" % (str(parts[0]), str(parts[1])))
         line = result[1]
     else:
         result = self.get_result("audio.get", "audios=" + str(id))
         line = result[0]
     if not result:
         return None
     bean = FModel(line['artist'] + ' - ' + line['title'])
     bean.aritst = line['artist']
     bean.title = line['title']
     bean.time = convert_seconds_to_text(line['duration'])
     bean.path = line['url'].replace("https://", "http://")
     bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
     return bean
示例#27
0
 def get_user_tracks_as_beans(self, user_id):
     beans = []
     result = self.controls.vk_service.get_result('audio.get', "uid=" + user_id)
     if not result:
         beans = [FDModel(_("No results found")).add_is_file(True)]
     else:
         for line in result:
             bean = FModel(line['artist'] + ' - ' + line['title'])
             bean.aritst = line['artist']
             bean.title = line['title']
             bean.time = convert_seconds_to_text(line['duration'])
             bean.path = line['url']
             bean.aid = line['aid']
             bean.oid = line['owner_id']
             bean.is_file = True
             bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
             beans.append(bean)
     return beans
示例#28
0
 def get_common_beans(self):
     beans = []
     cue = self.parse()
     if not self.is_cue_valid():
         return []
     for i, track  in enumerate(cue.tracks):
         bean = FModel(text=track.performer + " - " + track.title, path=track.path)
         bean.artist = track.performer
         bean.tracknumber = i + 1
         bean.title = track.title
         bean.name = bean.text
         bean.start_sec = track.get_start_time_sec()
         bean.duration_sec = track.duration
         bean.time = convert_seconds_to_text(track.duration)
         bean.is_file = True
         beans.append(bean)
     
     return beans
示例#29
0
 def find_track_by_id(self, id):
     if id is not None:
         parts = id.split("_")
         result = self.get_result(
             "audio.get",
             "owner_id=%s&audio_ids=%s" % (str(parts[0]), str(parts[1])))
         line = result[1]
     else:
         result = self.get_result("audio.get", "audios=" + str(id))
         line = result[0]
     if not result:
         return None
     bean = FModel(line['artist'] + ' - ' + line['title'])
     bean.aritst = line['artist']
     bean.title = line['title']
     bean.time = convert_seconds_to_text(line['duration'])
     bean.path = line['url'].replace("https://", "http://")
     bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
     return bean
示例#30
0
 def get_user_tracks_as_beans(self, user_id):
     beans = []
     result = self.controls.vk_service.get_result('audio.get',
                                                  "uid=" + user_id)
     if not result:
         beans = [FDModel(_("No results found")).add_is_file(True)]
     else:
         for line in result:
             bean = FModel(line['artist'] + ' - ' + line['title'])
             bean.aritst = line['artist']
             bean.title = line['title']
             bean.time = convert_seconds_to_text(line['duration'])
             bean.path = line['url']
             bean.aid = line['aid']
             bean.oid = line['owner_id']
             bean.is_file = True
             bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
             beans.append(bean)
     return beans
示例#31
0
    def find_tracks_by_query(self, query):
        logging.info("start search songs " + query)
        query = urllib.quote(query.encode("utf-8"))

        list = self.get_result("audio.search", "q=" + query)
        childs = []

        if not list:
            return childs

        for line in list[1:]:
            bean = FModel(line['artist'] + ' - ' + line['title'])
            bean.aritst = line['artist']
            bean.title = line['title']
            bean.time = convert_seconds_to_text(line['duration'])
            bean.path = line['url'].replace("https://", "http://")
            bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
            childs.append(bean)

        return childs
示例#32
0
    def find_tracks_by_query(self, query):
        logging.info("start search songs " + query)
        query = urllib.quote(query.encode("utf-8"))

        list = self.get_result("audio.search", "q=" + query)
        childs = []

        if not list:
            return childs

        for line in list[1:]:
            bean = FModel(line['artist'] + ' - ' + line['title'])
            bean.aritst = line['artist']
            bean.title = line['title']
            bean.time = convert_seconds_to_text(line['duration'])
            bean.path = line['url']
            bean.vk_audio_id = "%s_%s" % (line['owner_id'], line['aid'])
            childs.append(bean)

        return childs
示例#33
0
def normalized_info(info, bean):
    list = info.pprint().split(", ")
    new_list = []
    bean.size = os.path.getsize(bean.path)
    new_list.append(list[0])
    if info.__dict__.has_key('channels'):
        new_list.append('Ch: ' + str(info.channels))
    if info.__dict__.has_key('bits_per_sample'):
        new_list.append(str(info.bits_per_sample) + ' bit')
    if info.__dict__.has_key('sample_rate'):
        new_list.append(str(info.sample_rate) + 'Hz')
    if info.__dict__.has_key('bitrate'):
        new_list.append(str(info.bitrate/1000) + ' kbps')
    else:
        kbps = int(round(bean.size*8/info.length/1000))
        new_list.append(str(kbps+1 if kbps % 2 else kbps) + ' kbps')
    if info.__dict__.has_key('length'):
        new_list.append(convert_seconds_to_text(int(info.length)))
    size = '%.2f MB' % (float(bean.size)/1024/1024)
    new_list.append(size)
    return " | ".join(new_list)
示例#34
0
def normalized_info(info, bean):
    list = info.pprint().split(", ")
    new_list = []
    bean.size = os.path.getsize(bean.path)
    new_list.append(list[0])
    if info.__dict__.has_key('channels'):
        new_list.append('Ch: ' + str(info.channels))
    if info.__dict__.has_key('bits_per_sample'):
        new_list.append(str(info.bits_per_sample) + ' bit')
    if info.__dict__.has_key('sample_rate'):
        new_list.append(str(info.sample_rate) + 'Hz')
    if info.__dict__.has_key('bitrate'):
        new_list.append(str(info.bitrate / 1000) + ' kbps')
    else:
        kbps = int(round(bean.size * 8 / info.length / 1000))
        new_list.append(str(kbps + 1 if kbps % 2 else kbps) + ' kbps')
    if info.__dict__.has_key('length'):
        new_list.append(convert_seconds_to_text(int(info.length)))
    size = '%.2f MB' % (float(bean.size) / 1024 / 1024)
    new_list.append(size)
    return " | ".join(new_list)
示例#35
0
def udpate_id3(bean):
    if bean and bean.path and os.path.isfile(bean.path):
        try:
            audio = get_mutagen_audio(bean.path)            
        except Exception, e:
            logging.warn("ID3 NOT MP3" + str(e) + bean.path)
            return bean
        
        if audio:
            if isinstance(audio, MP4):
                if audio.has_key('\xa9ART'): bean.artist = audio["\xa9ART"][0]
                if audio.has_key('\xa9nam'): bean.title = audio["\xa9nam"][0]
                if audio.has_key('\xa9alb'): bean.album = audio["\xa9alb"][0]
            else:
                if audio.has_key('artist'): bean.artist = decode_cp866(audio["artist"][0])
                if audio.has_key('title'): bean.title = decode_cp866(audio["title"][0])
                if audio.has_key('album'): bean.album = decode_cp866(audio["album"][0])
        #if audio and audio.has_key('tracknumber'): bean.tracknumber = audio["tracknumber"][0]
        #else: 
            #if audio and not audio.has_key('tracknumber'): 
        
        duration_sec = bean.duration_sec
        
        if not bean.duration_sec:
            if audio and audio.info and audio.info.length: duration_sec = int(audio.info.length)
        
        if audio and audio.info:
            bean.info = audio.info.pprint()

        if bean.artist and bean.title:
            bean.text = bean.artist + " - " + bean.title
        
        if bean.tracknumber:
            try:
                bean.tracknumber = int(bean.tracknumber)
            except:
                bean.tracknumber = ""
        
        bean = update_bean_from_normalized_text(bean)        
        bean.time = convert_seconds_to_text(duration_sec)
示例#36
0
    def find_tracks_by_query(self, query):
        if not self.is_connected():
            return []
        logging.info("start search songs" + query)
        page = self.search(query)
        if not page:
            return []

        results = self.api.get('audio.search', q=query, count=50)

        childs = []

        for i, line in enumerate(results):
            if i == 0:
                continue

            bean = FModel(line['artist'] + ' - ' + line['title'])
            bean.aritst = line['artist']
            bean.title = line['title']
            bean.time = convert_seconds_to_text(line['duration'])
            bean.path = line['url']
            childs.append(bean)

        return childs
示例#37
0
 def find_tracks_by_query(self, query):
     if not self.is_connected():
         return []
     logging.info("start search songs" + query)
     page = self.search(query)
     if not page:
         return []
      
     results = self.api.get('audio.search',q=query, count=50)
         
     childs = []
     
     for i, line in enumerate(results):
         if i ==0:
             continue
         
         bean = FModel(line['artist']+' - '+line['title'])
         bean.aritst = line['artist']
         bean.title = line['title']
         bean.time = convert_seconds_to_text(line['duration'])
         bean.path = line['url']
         childs.append(bean)
          
     return childs
示例#38
0
 def check(self, expected, argument):
     self.assertEquals(expected, convert_seconds_to_text(argument))
示例#39
0
 def check(self, expected, argument):
     self.assertEquals(expected, convert_seconds_to_text(argument))