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 "audio/x-flac" : self.__flac_writer }
11 def get_supported_mimes (self):
12 return self.formats.keys ()
14 def save_metadata_on_file (self, filename, mime, artist, title, album):
15 if (self.formats.has_key (mime)):
16 return self.formats[mime] (filename, artist, title, album)
20 def __id3_writer (self, filename, artist, title, album):
21 from mutagen.mp3 import MP3
22 from mutagen.easyid3 import EasyID3
23 audio = MP3 (filename, ID3=EasyID3)
25 audio.add_tags (ID3=EasyID3)
26 print "Adding tags to %s" % (filename)
27 except mutagen.id3.error:
28 # It already has tags!
31 audio["artist"] = artist
32 audio["title"] = title
33 audio["album"] = album
40 def __wma_writer (self, filename, artist, title, album):
41 from mutagen.asf import ASF
42 audio = ASF (filename)
43 audio["Author"] = artist
44 audio["Title"] = title
45 audio["WM/AlbumTitle"] = album
52 def __flac_writer (self, filename, artist, title, album):
53 from mutagen.flac import FLAC
54 audio = FLAC (filename)
55 audio["artist"] = artist
56 audio["title"] = title
57 audio["album"] = album
65 if __name__ == "__main__":
68 def verify (filename, expected_artist, expected_title, expected_album):
69 from mutagen.easyid3 import EasyID3
70 audio = EasyID3 (filename)
71 assert audio["artist"][0] == expected_artist
72 assert audio["title"][0] == expected_title
73 assert audio["album"][0] == expected_album
75 def verify_wma (filename, expected_artist, expected_title, expected_album):
76 from mutagen.asf import ASF
77 audio = ASF (filename)
78 assert str(audio["Author"][0]) == expected_artist
79 assert str(audio["Title"][0]) == expected_title
80 assert str(audio["WM/AlbumTitle"][0]) == expected_album
82 def verify_flac (filename, expected_artist, expected_title, expected_album):
83 from mutagen.flac import FLAC
84 audio = FLAC (filename)
85 assert audio["artist"][0] == expected_artist
86 assert audio["title"][0] == expected_title
87 assert audio["album"][0] == expected_album
89 writer = MutagenBackend ()
91 TEST_FILE = "test-files/empty.flac"
92 TEST_FILE_TO_BREAK = "test-files/test-result.flac"
94 out = open (TEST_FILE_TO_BREAK, 'w')
95 out.write (open (TEST_FILE,'r').read ())
98 writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/x-flac",
99 "artist_test", "title_test", "album_test")
100 verify_flac (TEST_FILE_TO_BREAK, "artist_test", "title_test", "album_test")
102 writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/x-flac",
103 "artist_test_2", "title_test_2", "album_2")
104 verify_flac (TEST_FILE_TO_BREAK, "artist_test_2", "title_test_2", "album_2")
106 #os.unlink (TEST_FILE_TO_BREAK)
110 ## TEST_FILE = "test-files/strange.mp3"
111 ## TEST_FILE_TO_BREAK = "test-files/strange-fixed.mp3"
113 ## out = open (TEST_FILE_TO_BREAK, 'w')
114 ## out.write (open (TEST_FILE,'r').read ())
117 ## writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
118 ## "artist_test", "title_test", "album_test")
119 ## verify (TEST_FILE_TO_BREAK, "artist_test", "title_test", "album_test")
121 ## writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
122 ## "artist_test_2", "title_test_2", "album_2")
123 ## verify (TEST_FILE_TO_BREAK, "artist_test_2", "title_test_2", "album_2")
127 ## READONLY_FILE = "test-files/no-write.mp3"
128 ## assert not writer.save_metadata_on_file (READONLY_FILE, "audio/mpeg",
129 ## "artist_test", "title_test", "album_test")
132 ## WMA_FILE = "test-files/hooverphonic.wma"
133 ## assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
134 ## "artist_wma", "title_wma", "album_wma")
135 ## verify_wma (WMA_FILE, "artist_wma", "title_wma", "album_wma")
137 ## assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
138 ## "artist_wma_2", "title_wma_2", "album_wma_2")
139 ## verify_wma (WMA_FILE, "artist_wma_2", "title_wma_2", "album_wma_2")