[package]
name = "spectrum-analyzer"
description = """
A simple and fast `no_std` library to get the frequency spectrum of a digital signal (e.g. audio) using FFT.
It follows the KISS principle and consists of simple building blocks/optional features.
"""
version = "0.4.3"
authors = ["Philipp Schuster <phip1611@gmail.com>"]
edition = "2018"
keywords = ["fft", "spectrum", "frequencies", "audio", "dsp"]
categories = ["multimedia", "no-std"]
readme = "README.md"
license = "MIT"
homepage = "https://github.com/phip1611/spectrum-analyzer"
repository = "https://github.com/phip1611/spectrum-analyzer"
documentation = "https://docs.rs/spectrum-analyzer"

# fixes `no_std` build problems caused by wrong feature resolution of Cargo
# This works since Rust 1.51 (stable)
resolver = "2"

# room for mutliple fft implementations in the future, for example "rustfft" that needs STD
[features]
default = ["rustfft-complex"]
# best option for STD environments, most accurate and performant + more than 4096 samples!
rustfft-complex = ["rustfft"]
# a bit slower but more accurate: uses regular FFT with complex numbers
microfft-complex = ["microfft"]
# faster but less accurate: uses an FFT algorithm that only works on real numbers
microfft-real = ["microfft"]

[dependencies]
rustfft = { version = "5.0.1", optional = true }
microfft = { version = "0.3.1", optional = true }
# override num-complex dependency of microfft; otherwise build problems :(
num-complex = { version = "0.3", default-features = false }
float-cmp = "0.8.0" # approx. compare floats; not only in tests but also during runtime
# sin() cos() log10() etc for no_std-environments; as of Rust 1.51 the default
# functions are only part of the standard lib
libm = "0.2.1"

[dev-dependencies]
minimp3 = "0.5.1"
audio-visualizer = "0.2.2"

# otherwise FFT and other code is too slow
[profile.dev]
opt-level = 1
