@@ -917,30 +917,40 @@ def _render_bitrate(self):
917917 format = self ['format' ]
918918 tags = self ['tags' ]
919919 if format == 'MP3' :
920- if tags [ 'encoder_settings' ] == ' -V 0' :
920+ if ' -V 0' in tags [ 'encoder_settings' ] :
921921 return 'V0(VBR)'
922- elif tags [ 'encoder_settings' ] == ' -V 2' :
922+ elif ' -V 2' in tags [ 'encoder_settings' ] :
923923 return 'V2(VBR)'
924- elif tags ['bitrate' ] == 192000 :
925- return '192'
926- elif tags ['bitrate' ] == 256000 :
927- return '256'
928- elif tags ['bitrate' ] == 320000 :
929- return '320'
924+ elif tags ['bitrate_mode' ] in [mutagen .mp3 .BitrateMode .CBR ,
925+ mutagen .mp3 .BitrateMode .UNKNOWN ]:
926+ if abs (tags ['bitrate' ]- 192000 ) < 100 :
927+ return '192'
928+ elif abs (tags ['bitrate' ]- 256000 ) < 100 :
929+ return '256'
930+ elif abs (tags ['bitrate' ]- 320000 ) < 100 :
931+ return '320'
930932
931933 elif 'FLAC' in format :
932934 return 'Lossless'
933935
934- raise Exception ('Unrecognized format/bitrate' )
936+ log .debug ("format:{}\n tags:{}" , format , tags )
937+ raise RuntimeError ('Unrecognized format/bitrate' )
935938
936939 @form_field ('media' )
937940 def _render_media (self ):
938941 media = self ['summary' ]['media' ]
942+ if len (media ) > 1 :
943+ log .debug (media )
944+ media = media [0 ]
939945
940- if len (media ) == 1 :
941- return media [0 ]
946+ if media == 'CD' :
947+ return media
948+ elif media == 'Digital Media' :
949+ return 'Web'
950+ elif "vinyl" in media .lower ():
951+ return 'Vinyl'
942952
943- raise Exception ( 'Handle this' )
953+ raise NotImplementedError ( media )
944954
945955 def _render_mediainfo_path (self ):
946956 assert os .path .isdir (self ['path' ])
@@ -953,41 +963,56 @@ def _render_mediainfo_path(self):
953963 return full_path
954964 raise Exception ('No media file found' )
955965
956- def _render_songlist (self ):
957- # from musicbrainz release
966+ def _render_tracklist (self ):
967+ release , _ = self ['release' ]
968+ full_tracklist = []
969+ mediumlist = release ['medium-list' ]
970+
971+ for medium in mediumlist :
972+ log .debug ('medium {}' , medium .keys ())
973+ if len (mediumlist ) > 1 :
974+ title = "{} {}" .format (medium ['format' ], medium ['position' ])
975+ if 'title' in medium :
976+ title += ": {}" .format (medium ['title' ])
977+ else :
978+ title = medium ['format' ]
979+
980+ tracklist = [
981+ (t ['number' ], t ['recording' ]['title' ],
982+ timedelta (milliseconds = int (t ['recording' ]['length' ])))
983+ for t in medium ['track-list' ]]
984+ full_tracklist .append ((title , tracklist ))
958985
959- return None
986+ return full_tracklist
960987
961988 def _render_tags (self ):
962989 tags = mutagen .File (self ['mediainfo_path' ], easy = True )
963990 # if type(tags) == mutagen.mp3.MP3:
964991 # tags = mutagen.mp3.MP3(self['mediainfo_path'], ID3=EasyID3)
965992
966- print (dir (tags .info ))
993+ print ('tagsdir' , dir (tags .info ))
967994 try :
968- print (tags .info .encoder_settings )
995+ print ('encoder' , tags .info .encoder_settings )
969996 except AttributeError :
970997 pass
971- log .debug (type (tags ))
972- log .debug (tags .pprint ())
998+ log .debug ('type tags' , type (tags ))
999+ log .debug ('tags' , tags .pprint ())
9731000
9741001 return {'artist' : tags .get ('albumartist' , tags ['artist' ])[0 ],
9751002 'title' : tags ['album' ][0 ],
9761003 'rid' : tags .get ('musicbrainz_albumid' , [None ])[0 ],
9771004 'format' : type (tags ).__name__ ,
9781005 'bitrate' : tags .info .bitrate ,
1006+ 'bitrate_mode' : tags .info .bitrate_mode ,
9791007 'bits_per_sample' : getattr (tags .info , 'bits_per_sample' ,
9801008 None ),
9811009 'encoder_settings' : getattr (tags .info , 'encoder_settings' ,
9821010 None ),
9831011 }
9841012
985- def _render_summary (self ):
986- # identify self:
987- # - num tracks todo
988- # - scan for mb tags
1013+ def _render_release (self ):
9891014 tags = self ['tags' ]
990- print (tags )
1015+ # print(tags)
9911016 if tags ['rid' ]:
9921017 log .info ('Found MusicBrainz release in tags' )
9931018 release = mb .musicbrainzngs .get_release_by_id (
@@ -1006,17 +1031,17 @@ def _render_summary(self):
10061031 query = tags ['title' ]
10071032 rg , release = mb .find_release (query , artist = query_artist )
10081033
1009- print ('rg' , rg )
1010- print ('r' , release )
1034+ # identify self:
1035+ # - num tracks todo
1036+ # - scan for mb tags
1037+ #print('rg', rg)
1038+ #print('r', release)
10111039
1012- for medium in release ['medium-list' ]:
1013- for track in medium ['track-list' ]:
1014- print (track ['number' ],
1015- track ['recording' ]['title' ],
1016- timedelta (milliseconds = int (
1017- track ['recording' ]['length' ])))
1040+ return release , rg
1041+
1042+ def _render_summary (self ):
1043+ release , rg = self ['release' ]
10181044
1019- print (rg .keys ())
10201045 return {
10211046 'artist' : rg ['artist-credit-phrase' ],
10221047 'title' : rg ['title' ],
@@ -1042,11 +1067,42 @@ def _render_year(self):
10421067
10431068 @form_field ('tags' )
10441069 def _render_form_tags (self ):
1070+ _defaults = ['acoustic' ,'alternative' ,'ambient' ,'blues' ,'classic.rock' ,
1071+ 'classical' ,'country' ,'dance' ,'dubstep' ,'electronic' ,
1072+ 'experimental' ,'folk' ,'funk' ,'hardcore' ,'heavy.metal' ,
1073+ 'hip.hop' ,'indie' ,'indie.pop' ,'instrumental' ,'jazz' ,
1074+ 'metal' ,'pop' ,'post.hardcore' ,'post.rock' ,
1075+ 'progressive.rock' ,'psychedelic' ,'punk' ,'reggae' ,'rock' ,
1076+ 'soul' ,'trance' ,'trip.hop' ]
1077+
10451078 return self ['summary' ]['tags' ]
10461079
1080+ def _render_section_information (self ):
1081+ pass
1082+
1083+ def _render_section_tracklist (self ):
1084+ s = ""
1085+ for title , tracks in self ['tracklist' ]:
1086+ s += title
1087+ s += "[table]"
1088+ for i , tt , l in tracks :
1089+ s += "[tr]"
1090+ s += "[td]" + i + "[/td]"
1091+ s += "[td]" + tt + "[/td]"
1092+ s += "[td]" + str (l ) + "[/td]"
1093+ s += "[/tr]"
1094+ s += "[/table]"
1095+ return s
1096+
10471097 @form_field ('album_desc' )
10481098 def _render_description (self ):
1049- return 'album description'
1099+ sections = [("Information" , self ['section_information' ]),
1100+ ("Track list" , self ['section_tracklist' ])]
1101+
1102+ description = "\n " .join (bb .section (* s ) for s in sections )
1103+ description += bb .release
1104+
1105+ return description
10501106
10511107 @form_field ('artist' )
10521108 def _render_artist (self ):
0 commit comments