From 1dec25f165a6f91a5e3c24eecd2715e5e012108e Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Fri, 17 Dec 2021 15:56:45 +0100
Subject: [PATCH] feat: add support for extracting wav files

---
 extractors/WavExtractor.py  | 42 +++++++++++++++++++++++++++++++++++++
 extractors/get_extractor.py |  4 ++++
 2 files changed, 46 insertions(+)
 create mode 100644 extractors/WavExtractor.py

diff --git a/extractors/WavExtractor.py b/extractors/WavExtractor.py
new file mode 100644
index 0000000..b0a647c
--- /dev/null
+++ b/extractors/WavExtractor.py
@@ -0,0 +1,42 @@
+from typing import Optional
+
+from mutagen.wave import WAVE
+
+from extractors.MediaExtractor import MediaExtractor
+from models.TrackMeta import TrackMeta
+from util.extract_numbers import extract_numbers
+
+
+class WaveExtractor(MediaExtractor):
+    file: WAVE
+
+    def __init__(self, filename: str):
+        self.file = WAVE(filename)
+
+    def extract_tag(self, tag: str) -> Optional[str]:
+        if tag not in self.file.tags:
+            return None
+        return str(self.file.tags[tag])
+
+    def extract_tags(self) -> TrackMeta:
+        discnumber, disctotal = extract_numbers(self.extract_tag('TPOS'))
+        tracknumber, tracktotal = extract_numbers(self.extract_tag('TRCK'))
+        return TrackMeta(
+            album=self.extract_tag('TALB'),
+            albumsort=self.extract_tag('TSOA'),
+            albumartist=self.extract_tag('TPE2'),
+            albumartistsort=self.extract_tag('TSO2'),
+            artist=self.extract_tag('TPE1'),
+            artistsort=self.extract_tag('TSOP'),
+            catalognumber=self.extract_tag('TXXX:CATALOGNUMBER'),
+            discnumber=discnumber,
+            disctotal=disctotal,
+            label=self.extract_tag('TPUB'),
+            media=self.extract_tag('TMED'),
+            originaldate=self.extract_tag('TDOR'),
+            originalyear=self.extract_tag('TDRC'),
+            title=self.extract_tag('TIT2'),
+            titlesort=self.extract_tag('TSOT'),
+            tracknumber=tracknumber,
+            tracktotal=tracktotal,
+        )
diff --git a/extractors/get_extractor.py b/extractors/get_extractor.py
index 1d015cb..9796627 100644
--- a/extractors/get_extractor.py
+++ b/extractors/get_extractor.py
@@ -6,6 +6,7 @@ from extractors.FlacExtractor import FlacExtractor
 from extractors.MediaExtractor import MediaExtractor
 from extractors.Mp3Extractor import Mp3Extractor
 from extractors.Mp4Extractor import Mp4Extractor
+from extractors.WavExtractor import WaveExtractor
 
 
 def get_extractor(filename) -> Optional[MediaExtractor]:
@@ -19,5 +20,8 @@ def get_extractor(filename) -> Optional[MediaExtractor]:
         return AacExtractor(filename)
     elif filename.endswith(".mp4") or filename.endswith(".m4a"):
         return Mp4Extractor(filename)
+    elif filename.endswith(".aiff") or filename.endswith(".wav") \
+            or filename.endswith(".wave") or filename.endswith(".pcm"):
+        return WaveExtractor(filename)
     else:
         return None
-- 
GitLab