diff --git a/src/parsers/audio.py b/src/parsers/audio.py
new file mode 100644
index 0000000000000000000000000000000000000000..5c5c527c1e1f855d0e095933fa9344908459af53
--- /dev/null
+++ b/src/parsers/audio.py
@@ -0,0 +1,35 @@
+import subprocess
+import shutil
+import json
+
+import mutagen
+
+from . import abstract
+
+class MutagenParser(abstract.AbstractParser):
+    def get_meta(self):
+        f = mutagen.File(self.filename)
+        if f.tags:
+            return f.tags
+        return {}
+
+    def remove_all(self):
+        shutil.copy(self.filename, self.output_filename)
+        f = mutagen.File(self.output_filename)
+        f.delete()
+        f.save()
+        return True
+
+class MP3Parser(MutagenParser):
+    mimetypes = {'audio/mpeg', }
+
+    def get_meta(self):
+        metadata = {}
+        f = mutagen.File(self.filename)
+        if f.tags:
+            for key in f.tags:
+                metadata[key] = f.tags[key].text
+        return metadata
+
+class OGGParser(MutagenParser):
+    mimetypes = {'audio/ogg', }
diff --git a/tests/data/dirty.mp3 b/tests/data/dirty.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..7b6de6abe9ca6838235c17ecea58c33c8125105b
Binary files /dev/null and b/tests/data/dirty.mp3 differ
diff --git a/tests/data/dirty.ogg b/tests/data/dirty.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..b938099cfc25193c4d425239cc6969b0b6fd7045
Binary files /dev/null and b/tests/data/dirty.ogg differ
diff --git a/tests/test_libmat2.py b/tests/test_libmat2.py
index 1d316956332e5095cd528eccde9c9ecf15d30605..50a9a9709be7089631110402b73d6507d2a9ab71 100644
--- a/tests/test_libmat2.py
+++ b/tests/test_libmat2.py
@@ -5,7 +5,7 @@ import shutil
 import os
 
 from src import parsers
-from src.parsers import pdf, png, jpg
+from src.parsers import pdf, png, jpg, audio
 
 class TestGetMeta(unittest.TestCase):
     def test_pdf(self):
@@ -25,6 +25,17 @@ class TestGetMeta(unittest.TestCase):
         meta = p.get_meta()
         self.assertEqual(meta['Comment'], 'Created with GIMP')
 
+    def test_mp3(self):
+        p = audio.MP3Parser('./tests/data/dirty.mp3')
+        meta = p.get_meta()
+        self.assertEqual(meta['TXXX:I am a '], ['various comment'])
+
+    def test_ogg(self):
+        p = audio.OGGParser('./tests/data/dirty.ogg')
+        meta = p.get_meta()
+        self.assertEqual(meta['TITLE'], ['I am so'])
+
+
 class TestCleaning(unittest.TestCase):
     def test_pdf(self):
         shutil.copy('./tests/data/dirty.pdf', './tests/data/clean.pdf')
@@ -57,7 +68,6 @@ class TestCleaning(unittest.TestCase):
 
         os.remove('./tests/data/clean.png')
 
-
     def test_jpg(self):
         shutil.copy('./tests/data/dirty.jpg', './tests/data/clean.jpg')
         p = jpg.JPGParser('./tests/data/clean.jpg')
@@ -72,3 +82,33 @@ class TestCleaning(unittest.TestCase):
         self.assertEqual(p.get_meta(), {})
 
         os.remove('./tests/data/clean.jpg')
+
+    def test_mp3(self):
+        shutil.copy('./tests/data/dirty.mp3', './tests/data/clean.mp3')
+        p = audio.MP3Parser('./tests/data/clean.mp3')
+
+        meta = p.get_meta()
+        self.assertEqual(meta['TXXX:I am a '], ['various comment'])
+
+        ret = p.remove_all()
+        self.assertTrue(ret)
+
+        p = audio.MP3Parser('./tests/data/clean.mp3.cleaned')
+        self.assertEqual(p.get_meta(), {})
+
+        os.remove('./tests/data/clean.mp3')
+
+    def test_ogg(self):
+        shutil.copy('./tests/data/dirty.ogg', './tests/data/clean.ogg')
+        p = audio.OGGParser('./tests/data/clean.ogg')
+
+        meta = p.get_meta()
+        self.assertEqual(meta['TITLE'], ['I am so'])
+
+        ret = p.remove_all()
+        self.assertTrue(ret)
+
+        p = audio.OGGParser('./tests/data/clean.ogg.cleaned')
+        self.assertEqual(p.get_meta(), {})
+
+        os.remove('./tests/data/clean.ogg')