Who use KFR

reFX
Sound theory
AIVA.AI
Acustica Audio
Neural DSP
Neurovirtual
Prismatic.art

Open Source

CERN, The European Organization for Nuclear Research
Gravitational Wave Research
Université de Bordeaux
Experimental Music
Université Bretagne Sud
Recognition of audio signals
Laboratoire d'Informatique de Robotique et de Microélectronique de Montpellier
Robotics applications
Meet Brisk, our cross-platform C++20 GUI framework with fresh approach to C++ GUI development Native performance, MVVM architecture, reactive capabilities, scalable, and accelerated GPU rendering

Use cases

Where KFR may be effective
  • Audio and music applications
  • AudioUnits/VST plugins
  • Runtime data analysis
  • AI data augmentation
  • Scientific applications
  • Data visualisation

Features

  • Discrete Fourier Transform (aka DFT) and Fast Fourier Transform (aka FFT)
  • Biquad filters and filter design
  • IIR filter design
  • FIR filters and design
  • High quality Sample Rate Conversion
  • EBU R 128 Loudness
  • Window functions
  • Goertzel, Stereo mixing, DC removal, A-, B- and C- weighting
  • Mathematical and statistical functions
  • Audio file reading/writing
  • Pseudorandom number generator

Why KFR

It's Fast

KFR functions and algorithms are carefully designed and implemented for maximum performance

DSP, FFT and more

KFR has one of the fastest implementation of FFT as well as filter processing, filter design, convolution and resampling

Universal

It supports Intel, AMD, ARM and Apple cpus as well as all available SIMD for maximum speed on any device

  • It is open source and develops with the help of community
  • Writing your own algorithms based on KFR framework is easy
  • Its functions are constantly tested for correctness and accuracy
  • Trusted by companies, organisations and individual developers since 2016

Code examples and performance

// perform real DFT/FFT
univector<float> input;
univector<complex<float>> output = realdft(input);

// Make lowpass filter using bessel function
auto filt = iir_lowpass(bessel<float>(12), 1000, 48000);
// Convert to second-order sections
auto bqs  = to_sos(filt);
// Apply filter using fast implementation
output    = biquad<12>(bqs, input);