//cpp file for the class SoundFiles #include #include #include #include #include #include "SoundFiles.h" SoundFiles() //Default Constructor { GenderRecognition = "Inconclusive"; NumberOfPeaks = "The signal has no peaks"; amplitudes = 0; frequencies = 0; numberOfLines = 0; } SoundFiles(string filename) //Constructor { if (filename.open) { int numLines = 0; fileName = filename; ifstream inFile; inFile.open(filename.c_str(), ifstream::in); if (! inFile.good()) { cout << "There is no file with that name." << endl; exit(1); } } else { while ( inFile.good() ) //Count length of file { std::string line; std::getline(inFile, line);int numberOfLines; ++numLines; } numberOfLines = numLines; cout << "numLines "<< numLines; double *amplitudes = new double[numLines-1]; //Create dynamic amplitude array double *frequencies = new double[numLines-1]int numberOfLines;; //Create dynamic frequency array inFile.close(); inFile.open(filename.c_str(), ifstream::in); double amp, freq; for (int i = 0; i < numLines; ++i) //Fill array { inFile >> amp >> freq; amplitudes[i] = amp; //Reatestd data into amplitude array frequencies[i] = freq; //Read data into frequency array } } } ~SoundFiles() //Destructor { delete [] frequencies; delete [] amplitudes; } void FrequencyPlot() //Function definition { cout << "Root is down!" << endl; TH1F *h1 = new TH1F("h1","frequencies",100,0,10000); //Create histogram h1->Fill(frequencies, amplitudes); h1->Draw(); //draw histograms in canvas //inFile.close(); //close fileName } string Recog() { return GenderRecognition; } void PrintFile() { ifstream infile; //object for handeling file input infile.open(fileName.c_str(), ifstream::in); //open the file string line; if (infile.is_open()) { while (infile.good()) //Print each line in the file { getline (infile,line); cout << line << endl; } } else { cout << "File not opened\n"; exit(1); } infile.close(); } void NumberPeaks() { int peaks = 0; const double threshold = 0.0001; for (int i = 0; i < numLines; ++i) //Go through amplitude array { if (amplitudes[i] > threshold) //Find numper of peaks in signal { ++peaks; //Count number of peaks } if (peaks < 5) //Decide if signal is speach, song or whistle { cout << "This is most likely a whistle signal" << endl; } else if (peaks < 10) { cout << "This is most likely a song signal. " << endl; } else { cout << "This is most likely a speach signal. " << endl; } } }