Je suis en train d'essayer de mettre en œuvre un code en utilisant Android pour détecter le moment où un certain nombre de plages de fréquences audio sont lus via le microphone du téléphone. J'ai mis en place la classe à l'aide de l' AudioRecord
classe:
int channel_config = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int format = AudioFormat.ENCODING_PCM_16BIT;
int sampleSize = 8000;
int bufferSize = AudioRecord.getMinBufferSize(sampleSize, channel_config, format);
AudioRecord audioInput = new AudioRecord(AudioSource.MIC, sampleSize, channel_config, format, bufferSize);
L'audio est ensuite lu dans:
short[] audioBuffer = new short[bufferSize];
audioInput.startRecording();
audioInput.read(audioBuffer, 0, bufferSize);
L'exécution d'une FFT est là que j'ai coincé, comme je l'ai très peu d'expérience dans ce domaine. J'ai essayé d'utiliser cette classe:
FFT en Java et Complexe de la classe pour aller avec elle
Je suis ensuite envoyer les valeurs suivantes:
Complex[] fftTempArray = new Complex[bufferSize];
for (int i=0; i<bufferSize; i++)
{
fftTempArray[i] = new Complex(audio[i], 0);
}
Complex[] fftArray = fft(fftTempArray);
Cela pourrait facilement être moi malentendu comment cette classe est destinée à travailler, mais les valeurs renvoyées sauter dans tous les sens et ne sont pas représentatives d'un même fréquence, même dans le silence. Quelqu'un est-il au courant de la façon d'effectuer cette tâche, ou suis-je de compliquer à l'excès des questions pour essayer de le récupérer uniquement un petit nombre de gammes de fréquences plutôt que de le dessiner comme une représentation graphique?