1 #!/usr/bin/env python2.5
4 class MutagenBackend ():
7 # Maybe all this can be simplified using mutagen.File
10 self.formats = {"audio/mpeg": self.__id3_writer ,
11 "audio/x-ms-wma" : self.__wma_writer ,
12 "audio/x-flac" : self.__autoguess_writer ,
13 "audio/ogg" : self.__autoguess_writer ,
14 "audio/ogg+vorbis" : self.__autoguess_writer }
16 def get_supported_mimes (self):
17 return self.formats.keys ()
19 def save_metadata_on_file (self, filename, mime, artist, title, album):
20 if (self.formats.has_key (mime)):
21 return self.formats[mime] (filename, artist, title, album)
25 def __id3_writer (self, filename, artist, title, album):
26 from mutagen.mp3 import MP3
27 from mutagen.easyid3 import EasyID3
28 audio = MP3 (filename, ID3=EasyID3)
30 audio.add_tags (ID3=EasyID3)
31 print "Adding tags to %s" % (filename)
32 except mutagen.id3.error:
33 # It already has tags!
36 audio["artist"] = artist
37 audio["title"] = title
38 audio["album"] = album
45 def __wma_writer (self, filename, artist, title, album):
46 from mutagen.asf import ASF
47 audio = ASF (filename)
48 audio["Author"] = artist
49 audio["Title"] = title
50 audio["WM/AlbumTitle"] = album
57 def __autoguess_writer (self, filename, artist, title, album):
58 audio = mutagen.File (filename)
59 audio["artist"] = artist
60 audio["title"] = title
61 audio["album"] = album
68 if __name__ == "__main__":
71 ## TEST_FILE = "test-files/strange.mp3"
72 ## TEST_FILE_TO_BREAK = "test-files/strange-fixed.mp3"
74 ## out = open (TEST_FILE_TO_BREAK, 'w')
75 ## out.write (open (TEST_FILE,'r').read ())
78 ## writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
79 ## "artist_test", "title_test", "album_test")
80 ## verify (TEST_FILE_TO_BREAK, "artist_test", "title_test", "album_test")
82 ## writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
83 ## "artist_test_2", "title_test_2", "album_2")
84 ## verify (TEST_FILE_TO_BREAK, "artist_test_2", "title_test_2", "album_2")
88 ## READONLY_FILE = "test-files/no-write.mp3"
89 ## assert not writer.save_metadata_on_file (READONLY_FILE, "audio/mpeg",
90 ## "artist_test", "title_test", "album_test")
93 ## WMA_FILE = "test-files/hooverphonic.wma"
94 ## assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
95 ## "artist_wma", "title_wma", "album_wma")
96 ## verify_wma (WMA_FILE, "artist_wma", "title_wma", "album_wma")
98 ## assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
99 ## "artist_wma_2", "title_wma_2", "album_wma_2")
100 ## verify_wma (WMA_FILE, "artist_wma_2", "title_wma_2", "album_wma_2")