/* tslint:disable */
/* eslint-disable */
export function writeToOsuGeneric(chart: GenericManiaChart): string;
export function writeToSmGeneric(chart: GenericManiaChart): string;
export function writeToQuaGeneric(chart: GenericManiaChart): string;
export function writeToFscGeneric(chart: GenericManiaChart): string;
export function parseFromOsuGeneric(raw_chart: string): GenericManiaChart;
export function parseFromSmGeneric(raw_chart: string): GenericManiaChart;
export function parseFromQuaGeneric(raw_chart: string): GenericManiaChart;
export function parseFromFscGeneric(raw_chart: string): GenericManiaChart;
export enum CatchHitobjectType {
  Empty = 0,
  Fruit = 1,
  Juice = 2,
  Banana = 3,
  Hyperfruit = 4,
  Unknown = 5,
}
export enum HitSoundType {
  Normal = 0,
  Clap = 1,
  Whistle = 2,
  Finish = 3,
}
export enum KeyType {
  Empty = 0,
  Normal = 1,
  SliderStart = 2,
  SliderEnd = 3,
  Mine = 4,
  Fake = 5,
  Unknown = 6,
}
export enum OsuHitobjectType {
  Empty = 0,
  HitCircle = 1,
  Slider = 2,
  Spinner = 3,
  Unknown = 4,
}
export enum TaikoHitobjectType {
  Empty = 0,
  Don = 1,
  Kat = 2,
  BonusDon = 3,
  BonusKat = 4,
  DrumRoll = 5,
  BonusDrumRoll = 6,
  Balloon = 7,
  Unknown = 8,
}
export enum TimingChangeType {
  Bpm = 0,
  Sv = 1,
  Stop = 2,
}
export class CatchHitobject {
  private constructor();
  free(): void;
  static empty(): CatchHitobject;
  static fruit(x_position: number): CatchHitobject;
  static juice(x_position: number): CatchHitobject;
  static banana(x_position: number, end_time: number): CatchHitobject;
  static hyperfruit(x_position: number): CatchHitobject;
  static unknown(): CatchHitobject;
  end_time(): number | undefined;
  is_hyperdash(): boolean;
  object_type: CatchHitobjectType;
  x_position: number;
  get end_time(): number | undefined;
  set end_time(value: number | null | undefined);
  hyperdash: boolean;
}
export class ChartInfo {
  private constructor();
  free(): void;
  static new(difficulty_name: string, hp: number, od: number, bg_path: string, video_path: string, song_path: string, audio_offset: number, preview_time: number, key_count: number): ChartInfo;
  static empty(): ChartInfo;
  difficulty_name: string;
  od: number;
  hp: number;
  bg_path: string;
  video_path: string;
  song_path: string;
  audio_offset: number;
  preview_time: number;
  key_count: number;
}
export class GenericManiaChart {
  private constructor();
  free(): void;
  metadata: Metadata;
  chartinfo: ChartInfo;
  timing_points: TimingPoints;
  hitobjects: HitObjects;
  get soundbank(): SoundBank | undefined;
  set soundbank(value: SoundBank | null | undefined);
}
export class HitObjects {
  private constructor();
  free(): void;
}
export class Key {
  private constructor();
  free(): void;
  static empty(): Key;
  static normal(): Key;
  static slider_start(value?: number | null): Key;
  static slider_end(): Key;
  static mine(): Key;
  static fake(): Key;
  static unknown(): Key;
  slider_end_time(): number | undefined;
  key_type: KeyType;
  get slider_end_time(): number | undefined;
  set slider_end_time(value: number | null | undefined);
}
export class KeySound {
  private constructor();
  free(): void;
  volume: number;
  hitsound_type: HitSoundType;
  get sample(): number | undefined;
  set sample(value: number | null | undefined);
  has_custom: boolean;
}
export class KeySoundRow {
  private constructor();
  free(): void;
  is_empty: boolean;
}
export class Metadata {
  private constructor();
  free(): void;
  title: string;
  alt_title: string;
  artist: string;
  alt_artist: string;
  creator: string;
  genre: string;
  tags: string[];
  source: string;
}
export class OsuHitobject {
  private constructor();
  free(): void;
  static empty(): OsuHitobject;
  static hit_circle(x: number, y: number): OsuHitobject;
  static slider(x: number, y: number): OsuHitobject;
  static spinner(end_time: number): OsuHitobject;
  static unknown(): OsuHitobject;
  with_new_combo(): OsuHitobject;
  with_combo_skip(skip: number): OsuHitobject;
  end_time(): number | undefined;
  is_new_combo(): boolean;
  combo_skip(): number;
  object_type: OsuHitobjectType;
  x: number;
  y: number;
  get end_time(): number | undefined;
  set end_time(value: number | null | undefined);
  new_combo: boolean;
  combo_skip: number;
}
export class SoundBank {
  free(): void;
  constructor();
  add_sound_sample(path: string): number;
  add_sound_sample_with_index(index: number, path: string): void;
  add_sound_effect(sound_effect: SoundEffect): void;
  get_sound_sample(index: number): string | undefined;
  get_index_sample(sample_path: string): number | undefined;
  get_sample_paths(): string[];
  contains_path(path: string): boolean;
  sample_count(): number;
  is_empty(): boolean;
  audio_tracks: string[];
  sound_effects: SoundEffect[];
}
export class SoundEffect {
  free(): void;
  constructor(time: number, volume: number, sample: number);
  time: number;
  volume: number;
  sample: number;
}
export class TaikoHitobject {
  private constructor();
  free(): void;
  static empty(): TaikoHitobject;
  static don(): TaikoHitobject;
  static kat(): TaikoHitobject;
  static bonus_don(): TaikoHitobject;
  static bonus_kat(): TaikoHitobject;
  static drum_roll(end_time: number): TaikoHitobject;
  static bonus_drum_roll(end_time: number): TaikoHitobject;
  static balloon(end_time: number): TaikoHitobject;
  static unknown(): TaikoHitobject;
  end_time(): number | undefined;
  note_type: TaikoHitobjectType;
  get end_time(): number | undefined;
  set end_time(value: number | null | undefined);
}
export class TimingPoints {
  private constructor();
  free(): void;
}
