Serial Monitor Outputting Random Symbols

I’m trying to combine a program that uses timer1 to measure capacitance and use timer2 with the TMRpcm library to output a sound based on what capacitance the program reads. The capacitance and SD output work fine on their own but stop working when I try to combine them.

This is my code:

#include <SD.h>
#include <TMRpcm.h>
#include <SPI.h>
#define steps 256
#define SD_ChipSelectPin 4

TMRpcm tmrpcm;

void setup ()
{
  tmrpcm.speakerPin = 3;
  tmrpcm.setVolume(1);
  pinMode (9, OUTPUT); 
  Serial.begin(9600);
  if (!SD.begin(SD_ChipSelectPin)){
    Serial.println("SD fail");
    return;
  }
  Serial.println("SD no fail");
  tmrpcm.play("123500.wav");
  Serial.println(tmrpcm.isPlaying());
}

void loop () {
  float values[steps];
  float alpha;
  int maxPos, maxVal;
  if (Serial.available()) {
    alpha = (float)Serial.read() / 255.0f;
  }
  maxPos = 0;
  maxVal = 0;
  for (int i = 0; i < steps; i++) {
    TCCR1A = 0;
    TCCR1B = 0;
    TCCR1A |= (1 << COM1A0);
    TCCR1B |= (1 << WGM12);
    TCCR1B &= 0xFE;                       // turns off timer
    TCNT1 = 0;                            // resets timer counter register
    OCR1A = i;                            // sets new frequency step
    TCCR1B |= 0x01;                       // turns on timer
    float curVal = analogRead(0);
    values[i] = values[i] * alpha + curVal * (1 - alpha);  // exponential moving avg
    if (values[i] > maxVal) {                              // finds the signal peak
      maxVal = values[i];
      maxPos = i;
    }
  }
  Serial.print(maxPos, DEC);
  Serial.print(" ");
  Serial.println(maxVal, DEC);
  delay(200);

}

I attached what a picture of the error code as well.

error.png

Is the baud rate on the Serial monitor set to 9600?

yes

What is this supposed to do?

    alpha = (float)Serial.read() / 255.0f;


    float curVal = analogRead(0);         // Does analogRead() return a float? Hint: No.


    values[i] = values[i] * alpha + curVal * (1.0 - alpha);  // exponential moving avg

I would put Serial.println() calls after each of the 3 statements above to see if you're getting what you think you are.

  if (Serial.available()) {
    alpha = (float)Serial.read() / 255.0f;
  }

If there is no serial data to read, what is the value in alpha? You haven't a clue. Local variables are NOT initialized, unless YOU provide an initial value, which you didn't.