summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rwxr-xr-xcutter.py36
-rw-r--r--cutter/cue.py2
-rw-r--r--cutter/splitter.py27
4 files changed, 54 insertions, 13 deletions
diff --git a/TODO b/TODO
index 79ab0d8..4733a1f 100644
--- a/TODO
+++ b/TODO
@@ -9,3 +9,5 @@ OK 8. add charset coding argument
OK 9. prepare setup
OK 10. create default config on startup
OK 11. make cchardet optional
+12. manually convert files
+13. use python wave module
diff --git a/cutter.py b/cutter.py
index 78e6cf5..9fa0cff 100755
--- a/cutter.py
+++ b/cutter.py
@@ -9,6 +9,9 @@ from optparse import OptionParser, OptionGroup
import sys
import os
+import re
+
+re_range = re.compile("^(\d+)-(\d+)$")
try:
from cutter import config
@@ -100,6 +103,8 @@ def parse_args():
dest="bitrate", default=config.MP3_BITRATE,
help="audio bitrate (used for mp3)")
+ enc.add_option("--tracks", dest="tracks", help="select tracks")
+
parser.add_option_group(enc)
fname = OptionGroup(parser, "Filename options")
@@ -152,6 +157,29 @@ def option_check_range(option, value, min, max):
return True
+def tracks_parse(string):
+ tracks = set()
+
+ for item in string.split(","):
+ try:
+ value = int(item)
+ tracks.add(value)
+ except ValueError:
+ m = re_range.match(item)
+ if not m:
+ return None
+
+ start, end = int(m.group(1)), int(m.group(2))
+ if start <= 0 or end <= 0 or start == end:
+ return None
+
+ if start > end:
+ start, end = end, start
+
+ tracks.update(range(start, end + 1))
+
+ return None if len(tracks) == 0 else tracks
+
def process_options(opt):
def choose(a, b):
return a if a is not None else b
@@ -202,6 +230,14 @@ def process_options(opt):
if opt.use_tempdir is None:
opt.use_tempdir = config.USE_TEMPDIR
+ if opt.tracks is not None:
+ tracks = tracks_parse(opt.tracks)
+ if not tracks:
+ printerr("invalid tracks option \"%s\"", opt.tracks)
+ return False
+
+ opt.tracks = tracks
+
return True
def find_cuefile(path):
diff --git a/cutter/cue.py b/cutter/cue.py
index 043884b..a876eff 100644
--- a/cutter/cue.py
+++ b/cutter/cue.py
@@ -45,7 +45,7 @@ class File:
self._tracks.append(track)
def isaudio(self):
- return self.type == "WAVE"
+ return self.type in ("WAVE", "FLAC")
def has_audio_tracks(self):
return len(list(self.tracks())) > 0
diff --git a/cutter/splitter.py b/cutter/splitter.py
index 024a9ee..45cd0be 100644
--- a/cutter/splitter.py
+++ b/cutter/splitter.py
@@ -124,14 +124,7 @@ class Splitter:
printerr("invalid format option: %s", err)
sys.exit(1)
- def __init__(self, cue, opt):
- self.cue = cue
- self.opt = opt
- self.tracktotal = len(list(self.all_tracks()))
-
- self.enctype = formats.handler(opt.type, logger=printf)
- self.tag_supported = self.enctype.is_tag_supported()
-
+ def init_tags(self):
self.tags = {
"album": self.opt.album or self.cue.get("title"),
"date": self.opt.date or self.cue.get("date"),
@@ -144,13 +137,13 @@ class Splitter:
"albumartist": self.opt.albumartist
}
- tmp = self.format_by_tags(os.path.dirname(opt.fmt), self.tags, True)
+ tmp = self.format_by_tags(os.path.dirname(self.opt.fmt), self.tags, True)
- if opt.convert_chars:
+ if self.opt.convert_chars:
tmp = convert_characters(tmp)
- self.dest = os.path.join(opt.dir, tmp)
- track_fmt = os.path.basename(opt.fmt)
+ self.dest = os.path.join(self.opt.dir, tmp)
+ track_fmt = os.path.basename(self.opt.fmt)
tracknumber = 0
self.track_info = {}
@@ -160,6 +153,16 @@ class Splitter:
track, tracknumber, track_fmt
)
+ def __init__(self, cue, opt):
+ self.cue = cue
+ self.opt = opt
+ self.tracktotal = len(list(self.all_tracks()))
+
+ self.enctype = formats.handler(opt.type, logger=printf)
+ self.tag_supported = self.enctype.is_tag_supported()
+
+ self.init_tags()
+
def get_track_info(self, track, tracknumber, fmt):
tags = dict(self.tags)
tags.update({