summarylogtreecommitdiffstats
path: root/convert-samples.py
diff options
context:
space:
mode:
Diffstat (limited to 'convert-samples.py')
-rwxr-xr-xconvert-samples.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/convert-samples.py b/convert-samples.py
new file mode 100755
index 000000000000..ac45a1320e60
--- /dev/null
+++ b/convert-samples.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# convert all drumkit WAV files to FLAC
+#
+
+import os
+import sys
+from glob import glob
+from os.path import basename, exists, join, splitext
+from shutil import copyfile
+from subprocess import check_call, check_output, DEVNULL
+
+tempdir = os.environ.get("TMP", "/tmp")
+
+for drumkit in sys.argv[1:]:
+ drumkit_xml = join(drumkit, "drumkit.xml")
+
+ if not exists(drumkit_xml):
+ print("Drumkit {} not found. Skipping it.".format(drumkit))
+ continue
+
+ print("Converting samples to FLAC format in drumkit {}...".format(drumkit))
+
+ for orig in glob(join(drumkit, "*.[Ww][Aa][Vv]")) + glob(join(drumkit, "*.[Aa][Ii][Ff][Ff]")):
+ fn = basename(orig)
+ bn, ext = splitext(fn)
+ flac = "{}.flac".format(bn)
+
+ if exists(orig) and not exists(join(drumkit, flac)):
+ bbs = check_output(["soxi", "-b", orig]).strip()
+
+ if int(bbs) > 24:
+ print("Reducing sample size of '{}' to 24 bit ...".format(fn))
+ temp = check_output(["mktemp", join(tempdir, "hydrogen-drumkits.XXXXXX." + ext)]).strip()
+
+ try:
+ check_call(["sox", orig, "-b", "24", "-e", "signed-integer", temp])
+ except:
+ print("Could not reduce sample size of '{}'.".format(fn))
+ continue
+ else:
+ copyfile(temp, orig)
+ os.unlink(temp)
+
+ try:
+ check_call(["flac", "-s", "-8", "--keep-foreign-metadata", orig], stdout=DEVNULL,
+ stderr=DEVNULL)
+ except:
+ print("Could not convert '{}', keeping file in WAV format.".format(orig))
+ try:
+ os.unlink(join(drumkit, flac))
+ except: pass
+ else:
+ with open(drumkit_xml) as fp:
+ xml = fp.read()
+
+ with open(drumkit_xml, 'w') as fp:
+ fp.write(xml.replace(fn, flac))
+
+ os.unlink(orig)