///|
fn main {
  let samples = try! @mspectrum.sine_wave(
    length=1024,
    sample_rate=8000.0,
    frequency=440.0,
  )
  let buffer = try! @audio.audio_buffer(1, 8000, samples)
  let spectrum_config = try! @analysis.SpectrumConfig::new(
    window_length=256,
    hop_size=128,
    window_kind=@mspectrum.Hann,
  )
  let spectrogram = try! @analysis.spectrogram(buffer, spectrum_config)
  let peak_config = try! @analysis.PeakConfig::new(
    frequency_radius=2,
    time_radius=0,
    min_magnitude=0.1,
    max_peaks_per_frame=2,
  )
  let peaks = try! @analysis.extract_peaks(spectrogram, peak_config)
  let fingerprint = try! @fp.fingerprint(
    peaks,
    @fp.HashConfig::new(),
    frame_count=spectrogram.magnitudes.length(),
    bin_count=spectrogram.frequencies.length(),
  )
  let encoded = try! @fp.encode(fingerprint)
  let decoded = try! @fp.decode(encoded)
  println("Fingerprint v1 example")
  println("peaks: \{peaks.length()}")
  println("hashes: \{decoded.hashes.length()}")
  println("encoded_bytes: \{encoded.length()}")
}