##
20.3.1 Player Objects

Player objects (returned by `open()`) have the following methods:

`allowremoval`()
  Unlocks the eject button on the CD-ROM drive permitting the user to eject the caddy if desired.

`bestreadsize`()
  Returns the best value to use for the num_frames parameter of the `readda()` method. Best is defined as the value that permits a continuous flow of data from the CD-ROM drive.

`close`()
  Frees the resources associated with the player object. After calling `close()`, the methods of the object should no longer be used.

`eject`()
  Ejects the caddy from the CD-ROM drive.

`getstatus`()
  Returns information pertaining to the current state of the CD-ROM drive. The returned information is a tuple with the following values: state, track, rtime, atime, ttime, first, last, scsi_audio, cur_block. rtime is the time relative to the start of the current track; atime is the time relative to the beginning of the disc; ttime is the total time on the disc. For more information on the meaning of the values, see the man page CDgetstatus(3dm). The value of state is one of the following: `ERROR`, `NODISC`, `READY`, `PLAYING`, `PAUSED`, `STILL`, or `CDROM`.

`gettrackinfo`(track)
  Returns information about the specified track. The returned information is a tuple consisting of two elements, the start time of the track and the duration of the track.

`msftoblock`(min, sec, frame)
  Converts a minutes, seconds, frames triple representing a time in absolute time code into the corresponding logical block number for the given CD-ROM drive. You should use `msftoframe()` rather than `msftoblock()` for comparing times. The logical block number differs from the frame number by an offset required by certain CD-ROM drives.

`play`(start, play)
  Starts playback of an audio CD in the CD-ROM drive at the specified track. The audio output appears on the CD-ROM drive's headphone and audio jacks (if fitted). Play stops at the end of the disc. start is the number of the track at which to start playing the CD; if play is 0, the CD will be set to an initial paused state. The method `togglepause()` can then be used to commence play.

`playabs`(minutes, seconds, frames, play)
  Like `play()`, except that the start is given in minutes, seconds, and frames instead of a track number.

`playtrack`(start, play)
  Like `play()`, except that playing stops at the end of the track.

`playtrackabs`(track, minutes, seconds, frames, play)
  Like `play()`, except that playing begins at the specified absolute time and ends at the end of the specified track.

`preventremoval`()
  Locks the eject button on the CD-ROM drive thus preventing the user from arbitrarily ejecting the caddy.

`readda`(num_frames)
  Reads the specified number of frames from an audio CD mounted in the CD-ROM drive. The return value is a string representing the audio frames. This string can be passed unaltered to the `parseframe()` method of the parser object.

`seek`(minutes, seconds, frames)
  Sets the pointer that indicates the starting point of the next read of digital audio data from a CD-ROM. The pointer is set to an absolute time code location specified in minutes, seconds, and frames. The return value is the logical block number to which the pointer has been set.

`seekblock`(block)
  Sets the pointer that indicates the starting point of the next read of digital audio data from a CD-ROM. The pointer is set to the specified logical block number. The return value is the logical block number to which the pointer has been set.

`seektrack`(track)
  Sets the pointer that indicates the starting point of the next read of digital audio data from a CD-ROM. The pointer is set to the specified track. The return value is the logical block number to which the pointer has been set.

`stop`()
  Stops the current playing operation.

`togglepause`()
  Pauses the CD if it is playing, and makes it play if it is paused.