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/x-vorbis+ogg" : self.__autoguess_writer,
15 "audio/ogg+vorbis" : self.__autoguess_writer }
17 def get_supported_mimes (self):
18 return self.formats.keys ()
20 def save_metadata_on_file (self, filename, mime, artist, title, album):
21 if (self.formats.has_key (mime)):
22 return self.formats[mime] (filename, artist, title, album)
26 def __id3_writer (self, filename, artist, title, album):
27 from mutagen.mp3 import MP3
28 from mutagen.easyid3 import EasyID3
29 audio = MP3 (filename, ID3=EasyID3)
31 audio.add_tags (ID3=EasyID3)
32 print "Adding tags to %s" % (filename)
33 except mutagen.id3.error:
34 # It already has tags!
37 audio["artist"] = artist
38 audio["title"] = title
39 audio["album"] = album
46 def __wma_writer (self, filename, artist, title, album):
47 from mutagen.asf import ASF
48 audio = ASF (filename)
49 audio["Author"] = artist
50 audio["Title"] = title
51 audio["WM/AlbumTitle"] = album
58 def __autoguess_writer (self, filename, artist, title, album):
59 audio = mutagen.File (filename)
60 audio["artist"] = artist
61 audio["title"] = title
62 audio["album"] = album
69 if __name__ == "__main__":
72 ## TEST_FILE = "test-files/strange.mp3"
73 ## TEST_FILE_TO_BREAK = "test-files/strange-fixed.mp3"
75 ## out = open (TEST_FILE_TO_BREAK, 'w')
76 ## out.write (open (TEST_FILE,'r').read ())
79 ## writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
80 ## "artist_test", "title_test", "album_test")
81 ## verify (TEST_FILE_TO_BREAK, "artist_test", "title_test", "album_test")
83 ## writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
84 ## "artist_test_2", "title_test_2", "album_2")
85 ## verify (TEST_FILE_TO_BREAK, "artist_test_2", "title_test_2", "album_2")
89 ## READONLY_FILE = "test-files/no-write.mp3"
90 ## assert not writer.save_metadata_on_file (READONLY_FILE, "audio/mpeg",
91 ## "artist_test", "title_test", "album_test")
94 ## WMA_FILE = "test-files/hooverphonic.wma"
95 ## assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
96 ## "artist_wma", "title_wma", "album_wma")
97 ## verify_wma (WMA_FILE, "artist_wma", "title_wma", "album_wma")
99 ## assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
100 ## "artist_wma_2", "title_wma_2", "album_wma_2")
101 ## verify_wma (WMA_FILE, "artist_wma_2", "title_wma_2", "album_wma_2")