/*
*
      
_______
                       
_____
   
_____ _____
  

*
     
|__
   
__|
                     
|
  
__ \ / ____|__ \
 

*
        
| | __ _ _ __ ___
  
______| || | (___ | |__) |
*
        
| |/ _` | '__/ __|/ _ \/ __| |
  
| |\___ \|___/
 

*
        
| | (_| | |
  
\__ \ (_) \__ \ |__| |____) | |
     

*
        
|_|\__,_|_|
  
|___/\___/|___/_____/|_____/|_|
     

*
                                                         

* -------------------------------------------------------------
*
* TarsosDSP is developed by Joren Six at IPEM, University Ghent
*
  

* -------------------------------------------------------------
*
*
  
Info: http://0110.be/tag/TarsosDSP
*
  
Github: https://github.com/JorenSix/TarsosDSP
*
  
Releases: http://0110.be/releases/TarsosDSP/
*
  

*
  
TarsosDSP includes modified source code by various authors,
*
  
for credits and info, see README.
*
 

*/

package be.tarsos.dsp.example.catify;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.pitch.PitchDetectionHandler;
import be.tarsos.dsp.pitch.PitchDetectionResult;
import be.tarsos.dsp.pitch.PitchProcessor;
import be.tarsos.dsp.pitch.PitchProcessor.PitchEstimationAlgorithm;

class CatSample{
	
double duration;
	
ArrayList<Float> pitches;
	
float avgPitch = 0;
	
AudioFormat format ;
	
File file;
	
public CatSample(File file){
		
this.file=file;
		
pitches = new ArrayList<Float>();
		
try {
			
format = AudioSystem.getAudioFileFormat(file).getFormat();
			
duration = AudioSystem.getAudioFileFormat(file).getFrameLength()/format.getFrameRate();
			
AudioDispatcher dispatcher = AudioDispatcherFactory.fromFile(file,1024, 0);
			
dispatcher.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.FFT_YIN, format.getSampleRate(), 1024, new PitchDetectionHandler() {
				
@Override
				
public void handlePitch(PitchDetectionResult pitchDetectionResult,AudioEvent audioEvent) {
					
if(pitchDetectionResult.isPitched())
					
pitches.add(pitchDetectionResult.getPitch());
				
}
			
}));
			
dispatcher.run();
			
for(Float pitch:pitches){
				
avgPitch+=pitch;
			
}
			
avgPitch = avgPitch/pitches.size();
			

		
} catch (UnsupportedAudioFileException e) {
			
// TODO Auto-generated catch block
			
e.printStackTrace();
		
} catch (IOException e) {
			
// TODO Auto-generated catch block
			
e.printStackTrace();
		
}
	
}
	

	
public double getDuration(){
		
return duration;
	
}
	

	
public float getAvgPitch(){
		
return avgPitch;
	
}
	

	
public String toString(){
		
return ""+avgPitch;
	
}

	
public double getSampleRate() {
		
return format.getSampleRate();
	
}

	
public File getFile() {
		
return file;
	
}

	
public AudioFormat getFormat() {
		
return format;
	
}
}