schema_version: 0.3
type: filter
identifier: fft
title: FFT
version: 1
copyright: Meltytech, LLC
creator: Brian Matherly <code@brianmatherly.com>
license: LGPLv2.1
language: en
tags:
  - Audio
description: >
  An audio filter that computes the FFT of the audio.
  This filter does not modify the audio or the image. It only computes the FFT
  and stores the result in the "bins" property of the filter.
  
parameters:
  - identifier: window_size
    title: Window Size
    type: integer
    description: >
      The number of samples that the transform will be performed on. If
      window_size is less than the number of samples in a frame, extra samples 
      will be ignored. If window_size is more than the number of samples in a 
      frame, samples will be buffered from previous frames to fill the window.
      The buffering is performed as a sliding window so that the most recent 
      samples are always transformed.
    mutable: no
    readonly: no
    default: 2048
    
  - identifier: window_level
    title: Window Level
    type: float
    description: >
      The level of the sample window. 0 indicates that there are no samples in 
      the window. 1.0 indicates that the window is full.
      
      The transform of a window that is not full may show frequency spikes that
      are not really present in the audio.
    readonly: yes
    minimum: 0
    maximum: 1.0
    
  - identifier: bin_width
    title: Bin Width
    type: float
    description: >
      The width of each bin in Hz. 
    readonly: yes
    unit: Hz
    
  - identifier: bin_count
    title: Bin Count
    type: integer
    description: >
      The number of bins that are output from the transform.
    readonly: yes
    
  - identifier: bins
    title: Output Bins
    description: >
      A pointer to an array of floats that represent the magnitude of the output
      of the transform.
      
      bin[i] = sqrt( real[i]^2 + imag[i]^2 )
    readonly: yes
