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?"