Skip to content

Commit 7b42bde

Browse files
authored
Merge pull request #50 from postlund/wave_support
Add support for WAVE files
2 parents 780648c + 832f3d8 commit 7b42bde

File tree

6 files changed

+69
-1
lines changed

6 files changed

+69
-1
lines changed

mediafile.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
'asf': 'Windows Media',
7878
'aiff': 'AIFF',
7979
'dsf': 'DSD Stream File',
80+
'wav': 'WAVE',
8081
}
8182

8283
PREFERRED_IMAGE_EXTENSIONS = {'jpeg': 'jpg'}
@@ -777,7 +778,7 @@ def serialize(self, image):
777778
class MP3StorageStyle(StorageStyle):
778779
"""Store data in ID3 frames.
779780
"""
780-
formats = ['MP3', 'AIFF', 'DSF']
781+
formats = ['MP3', 'AIFF', 'DSF', 'WAVE']
781782

782783
def __init__(self, key, id3_lang=None, **kwargs):
783784
"""Create a new ID3 storage style. `id3_lang` is the value for
@@ -1591,6 +1592,8 @@ def __init__(self, filething, id3v23=False):
15911592
self.type = 'aiff'
15921593
elif type(self.mgfile).__name__ == 'DSF':
15931594
self.type = 'dsf'
1595+
elif type(self.mgfile).__name__ == 'WAVE':
1596+
self.type = 'wav'
15941597
else:
15951598
raise FileTypeError(self.filename, type(self.mgfile).__name__)
15961599

test/rsrc/backup.wav

86.3 KB
Binary file not shown.

test/rsrc/empty.wav

86.2 KB
Binary file not shown.

test/rsrc/full.wav

87.3 KB
Binary file not shown.

test/rsrc/unparseable.wav

86.2 KB
Binary file not shown.

test/test_mediafile.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -952,6 +952,71 @@ class AIFFTest(ReadWriteTestBase, unittest.TestCase):
952952
}
953953

954954

955+
class WAVETest(ReadWriteTestBase, unittest.TestCase):
956+
extension = 'wav'
957+
audio_properties = {
958+
'length': 1.0,
959+
'bitrate': 88200,
960+
'format': u'WAVE',
961+
'samplerate': 44100,
962+
'bitdepth': 16,
963+
'channels': 1,
964+
}
965+
966+
full_initial_tags = {
967+
'title': u'full',
968+
'artist': u'the artist',
969+
'album': u'the album',
970+
'genre': u'the genre',
971+
'track': 2,
972+
'tracktotal': 3,
973+
}
974+
975+
tag_fields = [
976+
'title',
977+
'artist',
978+
'album',
979+
'genre',
980+
'track',
981+
'original_year',
982+
'original_month',
983+
'original_day',
984+
'original_date',
985+
]
986+
987+
# Only a small subset of fields are supported by LIST/INFO
988+
# metadata format in WAVE, so some fields have been removed
989+
# from the inherited test cases below. Concerned fields are
990+
# commented above each test case.
991+
992+
# Missing fields: disc, disctotal
993+
def test_write_counters_without_total(self):
994+
mediafile = self._mediafile_fixture('full')
995+
self.assertEqual(mediafile.track, 2)
996+
self.assertEqual(mediafile.tracktotal, 3)
997+
998+
# Missing fields: date, year
999+
def test_delete_year(self):
1000+
mediafile = self._mediafile_fixture('full')
1001+
1002+
self.assertIsNotNone(mediafile.original_year)
1003+
1004+
delattr(mediafile, 'original_year')
1005+
mediafile.save()
1006+
mediafile = MediaFile(mediafile.filename)
1007+
self.assertIsNone(mediafile.original_year)
1008+
1009+
# Missing fields: disctotal
1010+
def test_delete_packed_total(self):
1011+
mediafile = self._mediafile_fixture('full')
1012+
1013+
delattr(mediafile, 'tracktotal')
1014+
1015+
mediafile.save()
1016+
mediafile = MediaFile(mediafile.filename)
1017+
self.assertEqual(mediafile.track, self.full_initial_tags['track'])
1018+
1019+
9551020
# Check whether we have a Mutagen version with DSF support. We can
9561021
# remove this once we require a version that includes the feature.
9571022
try:

0 commit comments

Comments
 (0)