-added OGG support as well as cue_in unit tests for mp3 and ogg files

This commit is contained in:
martin 2010-12-31 12:20:17 -05:00
parent c24a152eba
commit 9f26a70ca9
4 changed files with 106 additions and 53 deletions

View file

@ -11,7 +11,7 @@ import os
import logging
from mutagen.mp3 import MP3
from mutagen.oggvorbis import OggVorbis
class CueFile():
@ -24,56 +24,67 @@ class CueFile():
logger = logging.getLogger("cue_file.cue")
logger.debug("cue file: %s %s %s %s", src, dst, cue_in, cue_out)
# mutagen
audio = MP3(src)
dur = round(audio.info.length, 3)
if src.lower().endswith('.mp3'):
# mutagen
audio = MP3(src)
dur = round(audio.info.length, 3)
logger.debug("duration by mutagen: %s", dur)
cue_out = round(float(dur) - cue_out, 3)
str_cue_in = str(timedelta(seconds=cue_in)).replace(".", "+") # hh:mm:ss+mss, eg 00:00:20+000
str_cue_out = str(timedelta(seconds=cue_out)).replace(".", "+") #
"""
now a bit a hackish part, don't know how to do this better...
need to cut the digits after the "+"
"""
ts = str_cue_in.split("+")
try:
if len(ts[1]) == 6:
ts[1] = ts[1][0:3]
str_cue_in = "%s+%s" % (ts[0], ts[1])
except Exception, e:
pass
ts = str_cue_out.split("+")
try:
if len(ts[1]) == 6:
ts[1] = ts[1][0:3]
str_cue_out = "%s+%s" % (ts[0], ts[1])
except Exception, e:
pass
#sys.stderr.write(str(timedelta(seconds=cue_in)).replace(".", "+") + '\n\n')
logger.debug("in: %s", str_cue_in)
logger.debug("out: %s", str(str_cue_out) )
logger.debug("duration by mutagen: %s", dur)
cue_out = round(float(dur) - cue_out, 3)
str_cue_in = str(timedelta(seconds=cue_in)).replace(".", "+") # hh:mm:ss+mss, eg 00:00:20+000
str_cue_out = str(timedelta(seconds=cue_out)).replace(".", "+") #
"""
now a bit a hackish part, don't know how to do this better...
need to cut the digits after the "+"
"""
ts = str_cue_in.split("+")
try:
if len(ts[1]) == 6:
ts[1] = ts[1][0:3]
str_cue_in = "%s+%s" % (ts[0], ts[1])
except Exception, e:
pass
ts = str_cue_out.split("+")
try:
if len(ts[1]) == 6:
ts[1] = ts[1][0:3]
str_cue_out = "%s+%s" % (ts[0], ts[1])
except Exception, e:
pass
logger.debug("in: %s", str_cue_in)
logger.debug("out: %s", str(str_cue_out) )
# command = 'mp3cut -o %s -t %s-%s %s' % (dst, str_cue_in, str_cue_out, src);
# logger.info("command: %s", command)
# os.system(command + ' >/dev/null')
#
# command = 'mp3val -f %s' % (dst);
# logger.info("command: %s", command)
# os.system(command + ' >/dev/null')
command = 'mp3cut -o %s -t %s-%s %s' % (dst + '.tmp.mp3', str_cue_in, str_cue_out, src);
logger.info("command: %s", command)
print command
os.system(command + ' > /dev/null 2>&1')
command = 'mp3cut -o %s -t %s-%s %s' % (dst + '.tmp.mp3', str_cue_in, str_cue_out, src);
logger.info("command: %s", command)
os.system(command + ' >/dev/null')
command = 'lame -b 32 %s %s' % (dst + '.tmp.mp3', dst);
logger.info("command: %s", command)
os.system(command + ' >/dev/null')
command = 'lame -b 32 %s %s' % (dst + '.tmp.mp3', dst);
logger.info("command: %s", command)
print command
os.system(command + ' > /dev/null 2>&1')
elif src.lower().endswith('.ogg'):
audio = OggVorbis(src)
dur = audio.info.length
sys.stderr.write('duration: ' + str(dur) + '\n')
cue_out = float(dur) - cue_out
#convert input format of ss.mmm to milliseconds and to string<
str_cue_in = str(int(round(cue_in*1000)))
#convert input format of ss.mmm to milliseconds and to string
str_cue_out = str(int(round(cue_out*1000)))
command = 'oggCut -s %s -e %s %s %s' % (str_cue_in, str_cue_out, src, dst)
logger.info("command: %s", command)
os.system(command + ' > /dev/null 2>&1')
else:
logger.debug("in: %s", 'File name with invalid extension. File will not be cut\n')
return dst