summaryrefslogtreecommitdiff
path: root/cuedump.py
diff options
context:
space:
mode:
authormikeos <mike.osipov@gmail.com>2013-07-22 23:32:55 +0400
committermikeos <mike.osipov@gmail.com>2013-07-22 23:32:55 +0400
commit7410948eb8a5fcf386d66c4ac3d60bd935255606 (patch)
treec1125a96fa40eee869f300a0c5321c6d4e266844 /cuedump.py
parent2ac973dc16c036dba9cb4ad284c22d4a14d4b1ca (diff)
new tag options composer and albumartist, extended dump option
Diffstat (limited to 'cuedump.py')
-rw-r--r--cuedump.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/cuedump.py b/cuedump.py
new file mode 100644
index 0000000..660603e
--- /dev/null
+++ b/cuedump.py
@@ -0,0 +1,64 @@
+from os.path import basename
+import sys
+
+from cue import read_cue
+
+if sys.version_info.major == 2:
+ class Encoded:
+ def __init__(self, stream):
+ self.stream = stream
+
+ def write(self, msg):
+ self.stream.write(msg.encode("utf-8"))
+
+ def __getattr__(self, attr):
+ return getattr(self.stream, attr)
+
+ sys.stdout = Encoded(sys.stdout)
+
+def printf(fmt, *args):
+ sys.stdout.write(fmt % args)
+
+def msf(ts):
+ m = ts / (60 * 75)
+ s = ts / 75 % 60
+ f = ts % 75
+
+ return "%d:%d:%d" % (m, s, f)
+
+def quote(s):
+ return s if " " not in s else "\"%s\"" % s
+
+progname = basename(sys.argv[0])
+if len(sys.argv) != 2:
+ printf("Usage: %s cuefile\n", progname)
+ sys.exit(1)
+
+try:
+ cue = read_cue(sys.argv[1], on_error = lambda err:\
+ sys.stderr.write("** %s:%d: %s\n" % (progname, err.line, err))
+ )
+except Exception as err:
+ printf("%s: read_cue failed: %s: %s\n", progname, err.__class__.__name__, err)
+ sys.exit(1)
+
+printf("Cue attributes:\n")
+for k, v in cue.attrs():
+ printf("\t%s = %s\n", k, quote(v))
+
+for file in cue.files(filter_audio=False):
+ printf("File %s %s\n", quote(file.name), file.type)
+ for track in file.tracks(filter_audio=False):
+ printf("\tTrack %d\n", track.number)
+ pregap = track.get("pregap")
+ postgap = track.get("postgap")
+ for k, v in track.attrs():
+ if k not in ("pregap", "postgap"):
+ printf("\t\t%s = %s\n", k, quote(v))
+ if pregap is not None:
+ printf("\t\tPregap %s\n", msf(pregap))
+ for k, v in track.indexes():
+ printf("\t\tIndex %d %s\n", k, msf(v))
+ if postgap is not None:
+ printf("\t\tPostgap %s\n", msf(postgap))
+sys.exit(0)