Skip to content

Commit

Permalink
Merge pull request #50 from postlund/wave_support
Browse files Browse the repository at this point in the history
Add support for WAVE files
  • Loading branch information
sampsyo authored Sep 1, 2021
2 parents 780648c + 832f3d8 commit 7b42bde
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 1 deletion.
5 changes: 4 additions & 1 deletion mediafile.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
'asf': 'Windows Media',
'aiff': 'AIFF',
'dsf': 'DSD Stream File',
'wav': 'WAVE',
}

PREFERRED_IMAGE_EXTENSIONS = {'jpeg': 'jpg'}
Expand Down Expand Up @@ -777,7 +778,7 @@ def serialize(self, image):
class MP3StorageStyle(StorageStyle):
"""Store data in ID3 frames.
"""
formats = ['MP3', 'AIFF', 'DSF']
formats = ['MP3', 'AIFF', 'DSF', 'WAVE']

def __init__(self, key, id3_lang=None, **kwargs):
"""Create a new ID3 storage style. `id3_lang` is the value for
Expand Down Expand Up @@ -1591,6 +1592,8 @@ def __init__(self, filething, id3v23=False):
self.type = 'aiff'
elif type(self.mgfile).__name__ == 'DSF':
self.type = 'dsf'
elif type(self.mgfile).__name__ == 'WAVE':
self.type = 'wav'
else:
raise FileTypeError(self.filename, type(self.mgfile).__name__)

Expand Down
Binary file added test/rsrc/backup.wav
Binary file not shown.
Binary file added test/rsrc/empty.wav
Binary file not shown.
Binary file added test/rsrc/full.wav
Binary file not shown.
Binary file added test/rsrc/unparseable.wav
Binary file not shown.
65 changes: 65 additions & 0 deletions test/test_mediafile.py
Original file line number Diff line number Diff line change
Expand Up @@ -952,6 +952,71 @@ class AIFFTest(ReadWriteTestBase, unittest.TestCase):
}


class WAVETest(ReadWriteTestBase, unittest.TestCase):
extension = 'wav'
audio_properties = {
'length': 1.0,
'bitrate': 88200,
'format': u'WAVE',
'samplerate': 44100,
'bitdepth': 16,
'channels': 1,
}

full_initial_tags = {
'title': u'full',
'artist': u'the artist',
'album': u'the album',
'genre': u'the genre',
'track': 2,
'tracktotal': 3,
}

tag_fields = [
'title',
'artist',
'album',
'genre',
'track',
'original_year',
'original_month',
'original_day',
'original_date',
]

# Only a small subset of fields are supported by LIST/INFO
# metadata format in WAVE, so some fields have been removed
# from the inherited test cases below. Concerned fields are
# commented above each test case.

# Missing fields: disc, disctotal
def test_write_counters_without_total(self):
mediafile = self._mediafile_fixture('full')
self.assertEqual(mediafile.track, 2)
self.assertEqual(mediafile.tracktotal, 3)

# Missing fields: date, year
def test_delete_year(self):
mediafile = self._mediafile_fixture('full')

self.assertIsNotNone(mediafile.original_year)

delattr(mediafile, 'original_year')
mediafile.save()
mediafile = MediaFile(mediafile.filename)
self.assertIsNone(mediafile.original_year)

# Missing fields: disctotal
def test_delete_packed_total(self):
mediafile = self._mediafile_fixture('full')

delattr(mediafile, 'tracktotal')

mediafile.save()
mediafile = MediaFile(mediafile.filename)
self.assertEqual(mediafile.track, self.full_initial_tags['track'])


# Check whether we have a Mutagen version with DSF support. We can
# remove this once we require a version that includes the feature.
try:
Expand Down

0 comments on commit 7b42bde

Please sign in to comment.