From 10a50690b33ca7fefc7768d156eb2b75544082ea Mon Sep 17 00:00:00 2001 From: mikeos Date: Mon, 30 Sep 2013 02:21:16 +0400 Subject: add ogg support --- formats/flac.py | 8 +------- formats/mp3.py | 15 +++------------ formats/ogg.py | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 19 deletions(-) create mode 100644 formats/ogg.py (limited to 'formats') diff --git a/formats/flac.py b/formats/flac.py index 258b122..35db1e4 100644 --- a/formats/flac.py +++ b/formats/flac.py @@ -20,7 +20,6 @@ class FlacHandler(BaseHandler): def tag(self, path, tags): args = ["metaflac", "--remove-all-tags", "--import-tags-from=-", path] - self.log("Tag [%s] : ", path) proc = subprocess.Popen(args, stdin = subprocess.PIPE) for k, v in tags.items(): @@ -28,12 +27,7 @@ class FlacHandler(BaseHandler): proc.stdin.write(to_bytes("%s=%s\n" % (k.upper(), v))) proc.stdin.close() - if proc.wait(): - self.log("FAILED\n") - return False - - self.log("OK\n") - return True + return proc.wait() is 0 def init(): return FlacHandler diff --git a/formats/mp3.py b/formats/mp3.py index c668b47..cbd912f 100644 --- a/formats/mp3.py +++ b/formats/mp3.py @@ -59,9 +59,9 @@ class ID3Tagger: off = self.__offset.get(tag) if off: struct.pack_into("30s", self.v1, off, value) - elif tag is "date": + elif tag == "date": struct.pack_into("4s", self.v1, 93, value) - elif tag is "tracknumber": + elif tag == "tracknumber": number = int(value.partition(b"/")[0]) struct.pack_into("B", self.v1, 126, number) @@ -99,7 +99,7 @@ class Mp3Handler(BaseHandler): return self.build() - def do_tag(self, path, tags): + def tag(self, path, tags): tagger = ID3Tagger() for k, v in tags.items(): @@ -112,14 +112,5 @@ class Mp3Handler(BaseHandler): tagger.write(path) return True - def tag(self, path, tags): - self.log("Tag [%s] : ", path) - if self.do_tag(path, tags): - self.log("OK\n") - return True - - self.log("FAILED\n") - return False - def init(): return Mp3Handler diff --git a/formats/ogg.py b/formats/ogg.py new file mode 100644 index 0000000..c7352c2 --- /dev/null +++ b/formats/ogg.py @@ -0,0 +1,33 @@ +from formats.__base__ import * +from utils import to_bytes + +import subprocess + +class OggHandler(BaseHandler): + name = "ogg" + ext = "ogg" + + def encode(self, opt, info): + self.add("cust ext=%s sox -" % self.ext) + + if opt.compression is not None: + self.add("-C %d" % opt.compression) + + self.add_sox_args(opt, info) + self.add("%f") + + return self.build() + + def tag(self, path, tags): + args = ["vorbiscomment", "--raw", "--write", path] + + proc = subprocess.Popen(args, stdin = subprocess.PIPE) + for k, v in tags.items(): + if v is not "": + proc.stdin.write(to_bytes("%s=%s\n" % (k.upper(), v))) + proc.stdin.close() + + return proc.wait() is 0 + +def init(): + return OggHandler -- cgit v1.2.3-70-g09d2