sig
  exception SDLcdrom_exception of string
  exception Trayempty
  type cdrom_drive
  type cdrom_drive_status =
      CD_TRAYEMPTY
    | CD_STOPPED
    | CD_PLAYING
    | CD_PAUSED
  type track_type = TRACK_AUDIO | TRACK_DATA
  type track = {
    id : int;
    kind : Sdlcdrom.track_type;
    length : int;
    offset : int;
  }
  type cdrom_info = {
    num_tracks : int;
    curr_track : int;
    curr_frame : int;
    tracks : Sdlcdrom.track array;
  }
  val get_num_drives : unit -> int
  val drive_name : int -> string
  val cd_open : int -> Sdlcdrom.cdrom_drive
  val cd_close : Sdlcdrom.cdrom_drive -> unit
  val cd_status : Sdlcdrom.cdrom_drive -> Sdlcdrom.cdrom_drive_status
  val cd_info : Sdlcdrom.cdrom_drive -> Sdlcdrom.cdrom_info
  val msf_of_frames : int -> int * int * int
  val frames_of_msf : int * int * int -> int
  val cd_play_tracks :
    Sdlcdrom.cdrom_drive ->
    start_track:int ->
    start_frame:int -> num_tracks:int -> num_frames:int -> unit
  val cd_play_track : Sdlcdrom.cdrom_drive -> Sdlcdrom.track -> unit
  val cd_pause : Sdlcdrom.cdrom_drive -> unit
  val cd_resume : Sdlcdrom.cdrom_drive -> unit
  val cd_stop : Sdlcdrom.cdrom_drive -> unit
  val cd_eject : Sdlcdrom.cdrom_drive -> unit
end