sig
  module Id3v1 :
    sig
      type tag = {
        mutable title : string;
        mutable artist : string;
        mutable album : string;
        mutable year : string;
        mutable comment : string;
        mutable tracknum : int;
        mutable genre : int;
      }
      val has_tag : string -> bool
      val read : string -> Mp3tag.Id3v1.tag
      val write : Mp3tag.Id3v1.tag -> string -> unit
      val merge : Mp3tag.Id3v1.tag -> Mp3tag.Id3v1.tag -> Mp3tag.Id3v1.tag
      val no_tag : Mp3tag.Id3v1.tag
    end
  module Id3v2 :
    sig
      type tag = (string * string) list
      val read : string -> Mp3tag.Id3v2.tag
      val write : Mp3tag.Id3v2.tag -> ?src:string -> string -> unit
      val merge : Mp3tag.Id3v2.tag -> Mp3tag.Id3v2.tag -> Mp3tag.Id3v2.tag
      val no_tag : Mp3tag.Id3v2.tag
    end
  val read_both_as_v1 : string -> Mp3tag.Id3v1.tag
  val read_both_as_v2 : string -> Mp3tag.Id3v2.tag
  val write_both_v1 : Mp3tag.Id3v1.tag -> ?src:string -> string -> unit
  val write_both_v2 : Mp3tag.Id3v2.tag -> ?src:string -> string -> unit
  val v2_of_v1 : Mp3tag.Id3v1.tag -> Mp3tag.Id3v2.tag
  val v1_of_v2 : Mp3tag.Id3v2.tag -> Mp3tag.Id3v1.tag
  val string_of_genre : int -> string
  val genre_of_string : string -> int
  val genres : string list
  type channel_mode = Stereo | Joint_stereo | Dual_channel_stereo | Mono
  and mp3_encoding = CBR | VBR
  and info = {
    duration : int;
    samplerate : int;
    mode : Mp3tag.channel_mode;
    bitrate : int;
    encoding : Mp3tag.mp3_encoding;
    filesize : int;
  }
  val info : string -> Mp3tag.info
end