Public feed #886953

Miscellany

public text v1 · immutable
Raw Edit
·published 2008-02-01 01:30 UTC
rendered paste body
#!/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()