plectrum

Plectrum: instrument tuner for Android
Log | Files | Refs | README | LICENSE

MultichannelToMono.java (1908B)


      1 /*
      2 *      _______                       _____   _____ _____  
      3 *     |__   __|                     |  __ \ / ____|  __ \ 
      4 *        | | __ _ _ __ ___  ___  ___| |  | | (___ | |__) |
      5 *        | |/ _` | '__/ __|/ _ \/ __| |  | |\___ \|  ___/ 
      6 *        | | (_| | |  \__ \ (_) \__ \ |__| |____) | |     
      7 *        |_|\__,_|_|  |___/\___/|___/_____/|_____/|_|     
      8 *                                                         
      9 * -------------------------------------------------------------
     10 *
     11 * TarsosDSP is developed by Joren Six at IPEM, University Ghent
     12 *  
     13 * -------------------------------------------------------------
     14 *
     15 *  Info: http://0110.be/tag/TarsosDSP
     16 *  Github: https://github.com/JorenSix/TarsosDSP
     17 *  Releases: http://0110.be/releases/TarsosDSP/
     18 *  
     19 *  TarsosDSP includes modified source code by various authors,
     20 *  for credits and info, see README.
     21 * 
     22 */
     23 
     24 package be.tarsos.dsp;
     25 
     26 public class MultichannelToMono implements AudioProcessor{
     27 	
     28 	private int channels;
     29 	private boolean mean;
     30 	
     31 	public MultichannelToMono(int numberOfChannels,boolean meanOfchannels){
     32 		channels = numberOfChannels;
     33 		mean = meanOfchannels;
     34 	}
     35 
     36 	@Override
     37 	public boolean process(AudioEvent audioEvent) {
     38 		float[] buffer = audioEvent.getFloatBuffer();
     39 		float[] newBuffer = new float[buffer.length/channels];
     40 		
     41 		if(mean){
     42 			if(channels==2){
     43 				for(int i = 0 ; i < buffer.length ; i = i + channels){
     44 					newBuffer[i/channels]=(buffer[i]+buffer[i+1])/2.0f;
     45 				}	
     46 			}else{
     47 				for(int i = 0 ; i < buffer.length ; i = i + channels){
     48 					double sum = 0;
     49 					for(int j = 0; j < channels;j++){
     50 						sum = sum + buffer[i+j];
     51 					}
     52 					newBuffer[i/channels]=(float) (sum/channels);
     53 				}	
     54 			}
     55 		}else{
     56 			for(int i = 0 ; i < buffer.length ; i = i + channels){
     57 				newBuffer[i/channels]=buffer[i];
     58 			}
     59 		}
     60 		
     61 		audioEvent.setFloatBuffer(newBuffer);
     62 		return true;
     63 	}
     64 
     65 	@Override
     66 	public void processingFinished() {
     67 	}
     68 }