# Crate hertz [−] [src]

useful functions for working with frame-rates, sample-rates, other rates, time durations, frequencies, etc and for keeping a constant framerate.

`rate`, `sample rate`, `frame rate`, `fps`, `frequency`, etc express the same concept and are therefore used interchangeably.

you can use hertz to compute the time resolution and frequency range that can be meaningfully analyzed by a short-time fourier transform of a signal:

```extern crate hertz;

fn main() {
let sample_rate = 44100;
let window_size = 4096;
let step_size = 512;

// 11 hertz is the maximum frequency that can be meaningfully analyzed
assert_eq!(
11.,
hertz::rayleigh(sample_rate as f64, window_size as f64).round());

// 22050 hertz is the maximum frequency that can be meaningfully analyzed
assert_eq!(
22050.,
hertz::nyquist(sample_rate as f64).round());

// 12 ms is the time resolution we get when analyzing a 44100 hertz
// signal with a step size of 512
assert_eq!(
12.,
hertz::s_to_ms(hertz::cycles_per_second_to_seconds_per_cycle(
sample_rate as f64,
step_size as f64)).round());
}```

you can use hertz to keep a constant framerate in a game or other computer graphics application:

```fn main() {
let frames_per_second: usize = 60;

loop {
let instant_at_frame_start = std::time::Instant::now();

// here's where logic and rendering would go.
// this is never called more than frames_per_second
// times per second.

hertz::sleep_for_constant_rate(
frames_per_second, instant_at_frame_start);
}
}```

## Functions

 cycles_per_second_to_seconds_per_cycle window duration in seconds sample_rate in hertz fps_to_ns_per_frame when given frames per second (or sample rate) returns the duration of a single frame hertz_range frequency range that can be modeled when taking the short time fourier transform of a signal with `sample_rate` with a sliding window of `window_sizew`. equivalent to `rayleigh(sample_rate, window_size)..nyquist(sample_rate)` increase the window size to increase the lower frequency increase the sample rate to increase the upper frequency ms_to_ns milliseconds to nanoseconds ms_to_s milliseconds to seconds ns_to_ms nanoseconds to milliseconds ns_to_s nanoseconds to seconds nyquist maximum frequency in hertz that can be meaningfully analyzed with a given sample rate https://en.wikipedia.org/wiki/Short-time_Fourier_transform#Explanation rayleigh minimum frequency in hertz that can be meaningfully analyzed with a given sample rate and window size https://en.wikipedia.org/wiki/Short-time_Fourier_transform#Rayleigh_frequency s_to_ms seconds to milliseconds s_to_ns seconds to nanoseconds sleep_for_constant_rate useful for keeping a constant framerate