J'ai cherché partout et je ne pouvais pas comprendre comment extraire la fonctionnalité MFCC en utilisant TarsosDSP sur Android. Je sais comment obtenir FFT d'un fichier. Toute aide?Comment obtenir MFCC avec TarsosDSP?
2
A
Répondre
1
Voir officiel github page
fichier test 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();
}
}
et 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
vous pouvez obtenir le MFCC en cas de processus, je pense qu'il est pour chaque cadre
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();