Skip to content Skip to sidebar Skip to footer

How To Get Mfcc With Tarsosdsp?

I searched everywhere and I couldn't figure out how to extract MFCC feature using TarsosDSP on Android. I know how to get FFT out of a file. Any help?

Solution 1:

See official github page

MFCC Test file

publicclassMFCCTest {

//  private static int counter = 0;@TestpublicvoidMFCCForSineTest()throws UnsupportedAudioFileException{
        intsampleRate=44100;
        intbufferSize=1024;
        intbufferOverlap=128;
        finalfloat[] floatBuffer = TestUtilities.audioBufferSine();
        finalAudioDispatcherdispatcher= AudioDispatcherFactory.fromFloatArray(floatBuffer, sampleRate, bufferSize, bufferOverlap);
        finalMFCCmfcc=newMFCC(bufferSize, sampleRate, 40, 50, 300, 3000);
        dispatcher.addAudioProcessor(mfcc);
        dispatcher.addAudioProcessor(newAudioProcessor() {

            @OverridepublicvoidprocessingFinished() {
            }

            @Overridepublicbooleanprocess(AudioEvent audioEvent) {
                returntrue;
            }
        });
        dispatcher.run();
    }

}

and TestUtilities audioBufferSine()

publicclassTestUtilities {

    /**
     * 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.
     */publicstaticfloat[] audioBufferSine() {
        finaldouble sampleRate = 44100.0;
        finaldouble f0 = 440.0;
        finaldouble amplitudeF0 = 0.5;
        finaldouble seconds = 4.0;
        finalfloat[] buffer = newfloat[(int) (seconds * sampleRate)];
        for (int sample = 0; sample < buffer.length; sample++) {
            finaldouble time = sample / sampleRate;
            buffer[sample] = (float) (amplitudeF0 * Math.sin(2 * Math.PI * f0 * time));
        }
        return buffer;
    }

Solution 2:

you can get the mfcc under the process event, i think that it is for each frame

intsampleRate=16000;
    intbufferSize=512;
    intbufferOverlap=128;
    newAndroidFFMPEGLocator(this);
    final List<float[]>mfccList = newArrayList<>(200);
    InputStreaminStream=newFileInputStream(audioFilePath);
   AudioDispatcherdispatcher=newAudioDispatcher(newUniversalAudioInputStream(inStream, newTarsosDSPAudioFormat(sampleRate, bufferSize, 1, true, true)), bufferSize, bufferOverlap);
    finalMFCCmfcc=newMFCC(bufferSize, sampleRate, 20, 50, 300, 3000);
    dispatcher.addAudioProcessor(mfcc);
    dispatcher.addAudioProcessor(newAudioProcessor() {

        @OverridepublicvoidprocessingFinished() {
        }

        @Overridepublicbooleanprocess(AudioEvent audioEvent) {
            mfccList.add( mfcc.getMFCC());
            returntrue;
        }
    });
    dispatcher.run();

Post a Comment for "How To Get Mfcc With Tarsosdsp?"