#!/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()