#include "Note.h"
#include <Math.h>
//TODO: Decide what frequency will be played for the Note passed in. Switch Statement?

/*Default Note Constructor*/
Note::Note() {
	mName = ""; 
	mFreq = 0; 
	mDuration = 0;
	mOctave = -1; 
}

/*Constructor with Parameters*/
Note::Note(std::string name, int freq) {
	mName = name; 
	mFreq = freq;
	mDuration = 0;
	mOctave = -1; 
}

/*Getters for member variables*/
std::string Note::getName() {
	return mName;
}

/*Assigns and returns note frequnecy*/
int Note::getFreq() {
	if (mName == "C")
		mFreq = 131;
	else if (mName == "C#")
		mFreq = 139;
	else if (mName == "D")
		mFreq = 147;
	else if (mName == "D#")
		mFreq = 156;
	else if (mName == "E")
		mFreq = 165;
	else if (mName == "F")
		mFreq = 175;
	else if (mName == "F#")
		mFreq = 185;
	else if (mName == "G")
		mFreq = 196;
	else if (mName == "G#")
		mFreq = 208;
	else if (mName == "A")
		mFreq = 220;
	else if (mName == "A#")
		mFreq = 233;
	else if (mName == "B")
		mFreq = 248;
	else
		mFreq = -1;
	return mFreq;
}

/*Going up one octave based on the frequencies above means
  that the frequency is doubled (roughly). The parameter specifies 
  how many octaves above the base note the new note will be.
  Must be double for pow()*/
int Note::getOct(double octave) { 
	int scalar = pow(2.0, octave);
	mOctave = mFreq*scalar;
	return mOctave;
}

int Note::getDur() {
	return mDuration; 
}


/*Changes mOctave to parameter passed in*/
void Note::changeOctave(int octave) {
	mOctave = octave;
}
/*Changes mDuration to parameter passed in*/
void Note::changeDuration(int duration) {
	mDuration = duration; 
}


