///|
fn main {
  println("==================================================")
  println(" MoonMel Audio Pipeline Demonstration       ")
  println("==================================================")

  let sr = 16000
  let durations = [1, 10]

  for dur in durations {
    let num_samples = sr * dur
    let samples : Array[Double] = Array::make(num_samples, 0.0)
    let pi = 3.14159265358979323846264338327950288

    // Generate multi-tone synthetic test audio (440Hz + 1000Hz + 2500Hz)
    for i in 0..
        println(
          "  [STFT] Spectrum shape: [\{spec.n_rows} bins, \{spec.n_cols} frames]",
        )
      Err(e) => println("  [STFT] Error: \{e}")
    }

    // 2. Mel Spectrogram
    match @moonmel.mel_spectrogram(samples, config=cfg) {
      Ok(mel) =>
        println(
          "  [Mel] Filterbank shape: [\{mel.n_rows} mels, \{mel.n_cols} frames]",
        )
      Err(e) => println("  [Mel] Error: \{e}")
    }

    // 3. Log-Mel
    match @moonmel.log_mel_spectrogram(samples, config=cfg) {
      Ok(logmel) =>
        println(
          "  [Log-Mel] Matrix shape: [\{logmel.n_rows} mels, \{logmel.n_cols} frames]",
        )
      Err(e) => println("  [Log-Mel] Error: \{e}")
    }

    // 4. MFCC
    match @moonmel.mfcc(samples, config=cfg) {
      Ok(mfccs) =>
        println(
          "  [MFCC] Cepstrum shape: [\{mfccs.n_rows} mfccs, \{mfccs.n_cols} frames]",
        )
      Err(e) => println("  [MFCC] Error: \{e}")
    }
  }

  println("==================================================")
  println(" Demonstration complete.")
  println("==================================================")
}