Public feed
#886953
#!/usr/bin/env python
import os, sys, string
try:
cuefile = open(sys.argv[1],"r")
except:
try:
print "wasn't able to open cue file:",sys.argv[1]
except:
print "no cue file specified"
sys.exit()
lines = [line.strip() for line in cuefile]
totaltracks=0
intrack=0
GENRE=""
DATE=""
DISCID=""
ARTIST='"Unknown Artist"'
ALBUM='"Unknown Album"'
FILE=""
TITLE=[]
INDEX=[]
BLOCKS=[]
for i in lines:
if "GENRE" in i: GENRE = '"'+i[i.find("GENRE")+6:]+'"'
if "DATE" in i: DATE = '"'+i[i.find("DATE")+5:]+'"'
if "DISCID" in i: DISCID= '"'+i[i.find("DISCID")+7:]+'"'
if "PERFORMER" in i: ARTIST= i[i.find("PERFORMER")+10:]
if "FILE" in i: FILE = i[i.find("FILE")+5:i.find("WAVE")].strip()
if ("TRACK" in i) and FILE:
if len(INDEX) > len(TITLE):
TITLE.append('Unknown Track')
totaltracks += 1
intrack=1
gotindex=0
if "TITLE" in i:
if intrack == 0:
ALBUM = i[i.find("TITLE")+6:]
else:
TITLE.append(i[i.find("TITLE")+6:].strip('"'))
if "INDEX" in i:
if gotindex == 0:
itime=(i[i.find("INDEX")+9:])
INDEX.append( itime[:itime.rfind(":")]+"."+itime[itime.rfind(":")+1:] )
gotindex=1
else:
itime=(i[i.find("INDEX")+9:])
INDEX[-1:] = [( itime[:itime.rfind(":")]+"."+itime[itime.rfind(":")+1:] )]
# EOF with noname tracktitles
if len(INDEX) > len(TITLE):
TITLE.append('Unknown Track')
if string.lower(FILE[-6:-1]) == ".flac":
filetype="flac"
execstring = "flac -d -c "+FILE
elif string.lower(FILE[-5:-1]) == ".wav":
filetype="wav"
execstring = "cat "+FILE
elif string.lower(FILE[-5:-1]) == ".ape":
filetype="ape"
execstring = "mac "+FILE+" - -d"
else:
print "raw filetype unknown! can't make oggs of this!"
sys.exit(1)
INDEX.append("99:99.00")
for i in INDEX:
mm = int(i[:i.find(":")])
ss = int(i[i.find(":")+1:i.rfind(".")])
ms = int(i[i.rfind(".")+1:])
bb = ((mm*60+ss)*75+ms)
BLOCKS.append(bb)
print "CD Information:"
print "Artist:",ARTIST
print " Album:",ALBUM
print "DiscID:",DISCID
print "Tracks:",totaltracks
print
print "Opening",FILE,"for RAW data:", execstring
raw = os.popen(execstring,"r") #,"b",524288)
trash=raw.read(44)
for i in range(totaltracks):
print "Now working on track %02d" % (i+1),
print "which starts at",INDEX[i],":",TITLE[i]," CD sector",BLOCKS[i]
if i+1 < totaltracks:
end=1
else:
end=0
FTITLE = string.replace(TITLE[i],'"','\\"')
FTITLE = string.replace(FTITLE,'$','\$')
FTITLE = string.replace(FTITLE,'`','\`')
FILENAME = ARTIST.strip('"')+"- "+ALBUM.strip('"')+" [%02d-" % (i+1)
FILENAME+= "%02d] " % totaltracks
FILENAME+= FTITLE+".flac"
# FILENAME = "%02d-" % (i+1)
# FILENAME+= "%02d" % totaltracks
# FILENAME+= ".flac"
FILENAME = string.replace(FILENAME,'/','_')
# OGGENC="echo - -r -q4 -o \""+FILENAME+"\" -N "+str(i+1)+" -t \""+FTITLE+"\" -l "+ALBUM+" -a "+ARTIST
FLAC="flac - -8 --force-raw-format --endian=little --sign=signed --channels=2 --bps=16 --sample-rate=44100 -o \""+FILENAME+"\" -T TRACKNUMBER=\""+str(i+1)+"\" -T TITLE=\""+FTITLE+"\" -T ALBUM="+ALBUM+" -T ARTIST="+ARTIST+""
print FLAC
# if DATE != "": OGGENC += " -d "+DATE
# if DISCID != "": OGGENC += " -c DISCID="+DISCID
ogg = os.popen(FLAC,"w") #,"b",524288)
for curblock in range(BLOCKS[i+1]-BLOCKS[i]):
try:
ogg.write(raw.read(2352))
except:
print "couldn't write any more."
break
ogg.close()