Test models on a pitch-matching task

I built harPY to measure how models use audio and pitch controls to reach a target note. Connect a general-purpose model or pitch estimator through a Python actor.

Run a baseline comparison

harpy evaluate \
  --actor waveform-fft \
  --actor spectrum-peak \
  --suite smoke \
  --output runs/comparison.json

harpy summarize runs/comparison.json

Six shared episodes per actor.

Install and run →

Pitch estimation under noise

Play the source tone, the target note, and each method's final tone. Select Clean to hear the same episode without added noise.

Source: 333.073 Hz.
Target: A3, 220 Hz. Actors receive the target note, not its audio.

Read the experiment
Replay condition
FFT of the noisy capture with point-sampled spectrum values. The narrow peak lies near 333 Hz.
FFT curve · Spectrum samples

Final pitch error

Point-sampled spectrum
−402 cents
Waveform FFT
−2 cents

100 cents = one semitone. Negative values mean flat.
View all eight conditions

Listen: source, target, then each final tone. Reconstructed audio.

Listen individually & inspect the saved actions

The A3 reference is for you to hear; actors receive a symbolic target. Audio is reconstructed from recorded states, shortened to two seconds, and faded at each end.

Download audio (WAV)

Clean
Source · Target · Spectrum final · FFT final

Noise (10 dB SNR)
Source · Target · Spectrum final · FFT final

Initial state

States are derived from the saved actions. One fixed initial estimate per actor; this is not a captured per-step inference trace. Animation speed is illustrative.

Episode: spectrum-preservation-20260908-iid-09-01
Saved actor identities: legacy-point and quadratic-fft.
Replay data · Reconstruction provenance · Full noisy figure

Run it locally

Install the package, run a comparison, then add your own model or actor.

Getting started Contributing