4dde08a86c5e7f3022517c0fe66b0236a6d0950e
[mussorgsky] / src / mutagen_backend.py
1 #!/usr/bin/env python2.5
2 import mutagen
3
4 class MutagenBackend ():
5
6     #
7     # Maybe all this can be simplified using mutagen.File
8     #
9     def __init__ (self):
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 }
15
16     def get_supported_mimes (self):
17         return self.formats.keys ()
18
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)
22         else:
23             return False
24
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)
29         try:
30             audio.add_tags (ID3=EasyID3)
31             print "Adding tags to %s" % (filename)
32         except mutagen.id3.error:
33             # It already has tags!
34             pass
35
36         audio["artist"] = artist
37         audio["title"] = title
38         audio["album"] = album
39         try:
40             audio.save()
41             return True
42         except:
43             return False
44
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
51         try:
52             audio.save()
53             return True
54         except:
55             return False
56
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
62         try:
63             audio.save()
64             return True
65         except:
66             return False
67     
68 if __name__ == "__main__":
69
70     pass
71     ## TEST_FILE = "test-files/strange.mp3"
72     ## TEST_FILE_TO_BREAK = "test-files/strange-fixed.mp3"
73
74     ## out = open (TEST_FILE_TO_BREAK, 'w')
75     ## out.write (open (TEST_FILE,'r').read ())
76     ## out.close ()
77     
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")
81     
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")
85
86
87
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")
91
92
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")
97
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")