1 #!/usr/bin/env python2.5
4 class MutagenBackend ():
7 self.formats = {"audio/mpeg": self.__id3_writer ,
8 "audio/x-ms-wma" : self.__wma_writer }
9 def get_supported_mimes (self):
10 return self.formats.keys ()
12 def save_metadata_on_file (self, filename, mime, artist, title, album):
13 if (self.formats.has_key (mime)):
14 return self.formats[mime] (filename, artist, title, album)
18 def __id3_writer (self, filename, artist, title, album):
19 from mutagen.mp3 import MP3
20 from mutagen.easyid3 import EasyID3
21 audio = MP3 (filename, ID3=EasyID3)
23 audio.add_tags (ID3=EasyID3)
24 print "Adding tags to %s" % (filename)
25 except mutagen.id3.error:
26 # It already has tags!
29 audio["artist"] = artist
30 audio["title"] = title
31 audio["album"] = album
38 def __wma_writer (self, filename, artist, title, album):
39 from mutagen.asf import ASF
40 audio = ASF (filename)
41 audio["Author"] = artist
42 audio["Title"] = title
43 audio["WM/AlbumTitle"] = album
53 if __name__ == "__main__":
55 # use id3lib for verification
58 def verify (filename, expected_artist, expected_title, expected_album):
59 from mutagen.easyid3 import EasyID3
60 audio = EasyID3 (filename)
61 assert audio["artist"][0] == expected_artist
62 assert audio["title"][0] == expected_title
63 assert audio["album"][0] == expected_album
65 def verify_wma (filename, expected_artist, expected_title, expected_album):
66 from mutagen.asf import ASF
67 audio = ASF (filename)
68 assert str(audio["Author"][0]) == expected_artist
69 assert str(audio["Title"][0]) == expected_title
70 assert str(audio["WM/AlbumTitle"][0]) == expected_album
73 writer = MutagenBackend ()
75 TEST_FILE = "test-files/strange.mp3"
76 TEST_FILE_TO_BREAK = "test-files/strange-fixed.mp3"
78 out = open (TEST_FILE_TO_BREAK, 'w')
79 out.write (open (TEST_FILE,'r').read ())
82 writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
83 "artist_test", "title_test", "album_test")
84 verify (TEST_FILE_TO_BREAK, "artist_test", "title_test", "album_test")
86 writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
87 "artist_test_2", "title_test_2", "album_2")
88 verify (TEST_FILE_TO_BREAK, "artist_test_2", "title_test_2", "album_2")
92 READONLY_FILE = "test-files/no-write.mp3"
93 assert not writer.save_metadata_on_file (READONLY_FILE, "audio/mpeg",
94 "artist_test", "title_test", "album_test")
97 WMA_FILE = "test-files/hooverphonic.wma"
98 assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
99 "artist_wma", "title_wma", "album_wma")
100 verify_wma (WMA_FILE, "artist_wma", "title_wma", "album_wma")
102 assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
103 "artist_wma_2", "title_wma_2", "album_wma_2")
104 verify_wma (WMA_FILE, "artist_wma_2", "title_wma_2", "album_wma_2")