Frequency detection crate (
from to on 22 Jun 20:53

I’ve needed to detect a frequency of an audio signal a couple of times in my life, but I cannot for the love of me remember what does the FFT output actually mean. So I took this knowledge out of my latest project and packed it up in this crate.

Also this is my first potentially useful published crate, so if I missed anything, please let me know!


threaded - newest on 22 Jun 23:23 collapse

    /// # Panics
    /// - if `samples.len()` does not match the `sample_count` passed to [Self::new]
    /// - if there are `NaN`s in the sample slice

Since this is library code, why not make the function return a Result? on 23 Jun 01:28 next collapse

Yup, libraries should usually let the consumer chose what to do with an error, not crash the program without a choice in the matter. The only real exception is performance critical low level code such as the core of a graphics or audio driver. Though in those cases crashing also often isn’t an option, you just power through and hope things aren’t too screwed up. on 23 Jun 05:59 collapse

Thanks for the tip! Updated on 23 Jun 15:29 collapse

The new version seems to fix that since your comment was written, but it will stil panics if less than 2 samples are provided, unless the crate it wraps panics at an earlier point.

let peak = buf
            .take(self.sample_count / 2)
            .max_by_key(|(_, s)| (s.abs() * 1000.0) as u32)
            .expect("to have at least 1 sample"); on 23 Jun 18:16 collapse

You should have mentioned OP.

@fil on 24 Jun 19:05 collapse

Excellent catch! Added validation for the new params