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 }