2016-11-05 100 views

回答

1

見官方github page

MFCC測試文件

public class MFCCTest { 

// private static int counter = 0; 

    @Test 
    public void MFCCForSineTest() throws UnsupportedAudioFileException{ 
     int sampleRate = 44100; 
     int bufferSize = 1024; 
     int bufferOverlap = 128; 
     final float[] floatBuffer = TestUtilities.audioBufferSine(); 
     final AudioDispatcher dispatcher = AudioDispatcherFactory.fromFloatArray(floatBuffer, sampleRate, bufferSize, bufferOverlap); 
     final MFCC mfcc = new MFCC(bufferSize, sampleRate, 40, 50, 300, 3000); 
     dispatcher.addAudioProcessor(mfcc); 
     dispatcher.addAudioProcessor(new AudioProcessor() { 

      @Override 
      public void processingFinished() { 
      } 

      @Override 
      public boolean process(AudioEvent audioEvent) { 
       return true; 
      } 
     }); 
     dispatcher.run(); 
    } 

} 

和TestUtilities audioBufferSine()

public class TestUtilities { 

    /** 
    * Constructs and returns a buffer of a two seconds long pure sine of 440Hz 
    * sampled at 44.1kHz. 
    * 
    * @return A buffer of a two seconds long pure sine (440Hz) sampled at 
    *   44.1kHz. 
    */ 
    public static float[] audioBufferSine() { 
     final double sampleRate = 44100.0; 
     final double f0 = 440.0; 
     final double amplitudeF0 = 0.5; 
     final double seconds = 4.0; 
     final float[] buffer = new float[(int) (seconds * sampleRate)]; 
     for (int sample = 0; sample < buffer.length; sample++) { 
      final double time = sample/sampleRate; 
      buffer[sample] = (float) (amplitudeF0 * Math.sin(2 * Math.PI * f0 * time)); 
     } 
     return buffer; 
    } 
0

你可以得到處理事件下的MFCC,我認爲這是對於每個幀

int sampleRate = 16000; 
    int bufferSize = 512; 
    int bufferOverlap = 128; 
    new AndroidFFMPEGLocator(this); 
    final List<float[]>mfccList = new ArrayList<>(200); 
    final AudioDispatcher dispatcher = AudioDispatcherFactory.fromPipe(audioFilePath, sampleRate, bufferSize, bufferOverlap); 
    final MFCC mfcc = new MFCC(bufferSize, sampleRate, 20, 50, 300, 3000); 
    dispatcher.addAudioProcessor(mfcc); 
    dispatcher.addAudioProcessor(new AudioProcessor() { 

     @Override 
     public void processingFinished() { 
     } 

     @Override 
     public boolean process(AudioEvent audioEvent) { 
      mfccList.add(mfcc.getMFCC()); 
      return true; 
     } 
    }); 
    dispatcher.run();