FFT unavailable


New member

I am unable to get an output to the FFT in the example program "FFT Test" after making a small change.
The only addition to the program is adding a line in void loop, serial.print(myFFT.available()). Adding this line causes the myFFT.available() to always return 0.

Any ideas on how to fix this?

My current hardware is the Teensy 4.1. I am also using the Audio Shield (for Teensy 4).
Here is the example program, with the change made.
// FFT Test
// Compute a 1024 point Fast Fourier Transform (spectrum analysis)
// on audio connected to the Left Line-In pin.  By changing code,
// a synthetic sine wave can be input instead.
// The first 40 (of 512) frequency analysis bins are printed to
// the Arduino Serial Monitor.  Viewing the raw data can help you
// understand how the FFT works and what results to expect when
// using the data to control LEDs, motors, or other fun things!
// This example code is in the public domain.

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

const int myInput = AUDIO_INPUT_LINEIN;
//const int myInput = AUDIO_INPUT_MIC;

// Create the Audio components.  These should be created in the
// order data flows, inputs/sources -> processing -> outputs
AudioInputI2S          audioInput;         // audio shield: mic or line-in
AudioSynthWaveformSine sinewave;
AudioAnalyzeFFT1024    myFFT;
AudioOutputI2S         audioOutput;        // audio shield: headphones & line-out

// Connect either the live input or synthesized sine wave
AudioConnection patchCord1(audioInput, 0, myFFT, 0);
//AudioConnection patchCord1(sinewave, 0, myFFT, 0);

AudioControlSGTL5000 audioShield;

void setup() {
  // Audio connections require memory to work.  For more
  // detailed information, see the MemoryAndCpuUsage example

  // Enable the audio shield and set the output volume.

  // Configure the window algorithm to use

  // Create a synthetic sine wave, for testing
  // To use this, edit the connections above

void loop() {
  float n;
  int i;
  int test;
  if (myFFT.available()) {
    // each time new FFT data is available
    // print it all to the Arduino Serial Monitor
    Serial.print("FFT: ");
    for (i=0; i<40; i++) {
      n = myFFT.read(i);
      if (n >= 0.01) {
        Serial.print(":) ");
      } else {
        Serial.print("  -  "); // don't print "0.00"
Here is the output on the serial monitor
Last edited:
If it actually compiles, then I assume the bolded line should read
Then, if you look at the source
bool available() {
	if (outputflag == true) {
		outputflag = false;
		return true;
	return false;
This means that available() will only return true once as it is reset to false each time.
It would be less confusing if its name reflected that's its stateful, such as receive().