#!/usr/bin/env python # Supporting Ben Gertzfield's cdrom-Interface using mciSendString on WIN32 # Frank David # This work is released under the GNU GPL, version 2 or later. import mci import string def toc_header(device): return (1, string.atoi(mci.mciSendString("status %s number of tracks" % device))) def toc_entry(device, track): mci.mciSendString("set %s time format msf" % device) mciString = "status %s position track %i" % (device, track) resultStr = mci.mciSendString(mciString) result = string.split(resultStr, ':', 2) r = [] for i in result: r.append(string.atoi(i)) return r def toc_entry_pos(device, track): return toc_entry(device, track) def toc_entry_len(device, track): mci.mciSendString("set %s time format msf" % device) mciString = "status %s length track %i" % (device, track) resultStr = mci.mciSendString(mciString) result = string.split(resultStr, ':', 2) r = [] for i in result: r.append(string.atoi(i)) return r def leadout(device): firstTrack, lastTrack = toc_header(device) trackPosMin, trackPosSecond, trackPosFrame = toc_entry_pos(device, lastTrack) trackLenMin, trackLenSecond, trackLenFrame = toc_entry_len(device, lastTrack) # calculate raw leadout leadoutMin, leadoutSecond, leadoutFrame = ( trackPosMin + trackLenMin, trackPosSecond + trackLenSecond, trackPosFrame + trackLenFrame) # add windows specific correction leadoutFrame = leadoutFrame + leadoutFrame # convert to minute, second, frame if leadoutFrame >= 75: leadoutFrame = leadoutFrame - 75; leadoutSecond = leadoutSecond + 1 if leadoutSecond >= 60: leadoutSecond = leadoutSecond - 60; leadoutMin = leadoutMin + 1 # return leadout as tuple return (leadoutMin, leadoutSecond, leadoutFrame) def open(device="cdaudio", flags="wait"): mci.mciSendString("open %s %s" % (device, flags)) return device