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