diff --git a/libmat2/audio.py b/libmat2/audio.py index 1fd58fc..5f0c765 100644 --- a/libmat2/audio.py +++ b/libmat2/audio.py @@ -6,7 +6,7 @@ from typing import Dict, Union import mutagen -from . import abstract, parser_factory +from . import abstract, parser_factory, video class MutagenParser(abstract.AbstractParser): @@ -77,3 +77,14 @@ class FLACParser(MutagenParser): meta[name] = p.get_meta() if p else 'harmful data' # type: ignore os.remove(fname) return meta + + +class WAVParser(video.AbstractFFmpegParser): + mimetypes = {'audio/x-wav', } + meta_allowlist = {'AvgBytesPerSec', 'BitsPerSample', 'Directory', + 'Duration', 'Encoding', 'ExifToolVersion', + 'FileAccessDate', 'FileInodeChangeDate', + 'FileModifyDate', 'FileName', 'FilePermissions', + 'FileSize', 'FileType', 'FileTypeExtension', + 'MIMEType', 'NumChannels', 'SampleRate', 'SourceFile', + } diff --git a/tests/data/dirty.wav b/tests/data/dirty.wav new file mode 100644 index 0000000..cda715e Binary files /dev/null and b/tests/data/dirty.wav differ diff --git a/tests/test_libmat2.py b/tests/test_libmat2.py index 20e6a01..9d29094 100644 --- a/tests/test_libmat2.py +++ b/tests/test_libmat2.py @@ -127,6 +127,11 @@ class TestGetMeta(unittest.TestCase): self.assertEqual(meta['Model'], 'C7070WZ') self.assertEqual(meta['ModifyDate'], '2005:12:26 17:09:35') + def test_wav(self): + p = audio.WAVParser('./tests/data/dirty.wav') + meta = p.get_meta() + self.assertEqual(meta['Artist'], 'jvoisin') + def test_mp3(self): p = audio.MP3Parser('./tests/data/dirty.mp3') meta = p.get_meta() @@ -301,6 +306,11 @@ class TestCleaning(unittest.TestCase): 'parser': images.JPGParser, 'meta': {'Comment': 'Created with GIMP'}, 'expected_meta': {}, + }, { + 'name': 'wav', + 'parser': audio.WAVParser, + 'meta': {'Comment': 'Zomg, a comment!'}, + 'expected_meta': {}, }, { 'name': 'mp3', 'parser': audio.MP3Parser,