Je tente de (re) créer un tuner acoustique que j'ai codé il y a quelque temps en utilisant une fourche du projet Original TarsosDSP le rendant utilisable avec Android. Cette fois-ci j'utilise le projet TarsosDSP pour Android mis à jour par JorenSix et pour autant que je sache, je n'ai pas changé quelque chose de structurellement important dans mon code précédent, mais je reçois l'erreur suivante lorsque j'essaie d'exécuter l'application:TarsosDSP pour Android AudioRecord Objet non initialisé à partir du projet LibGDX
E/AudioRecord: AudioFlinger could not create record track, status: -1
E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1.
E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
D/libEGL: eglTerminate EGLDisplay = 0x7f90cf2e28
E/AndroidRuntime: FATAL EXCEPTION: GLThread 2218
Process: com.fraserjohnstone.tuner, PID: 19923
java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
at android.media.AudioRecord.startRecording(AudioRecord.java:943)
at be.tarsos.dsp.io.android.AudioDispatcherFactory.fromDefaultMicrophone(Unknown Source)
at com.fraserjohnstone.tuner.screens.TunerScreen.initTuner(TunerScreen.java:238)
at com.fraserjohnstone.tuner.screens.TunerScreen.show(TunerScreen.java:123)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at com.fraserjohnstone.tuner.screens.SplashScreen.goToTunerScreen(SplashScreen.java:148)
at com.fraserjohnstone.tuner.screens.SplashScreen.render(SplashScreen.java:131)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.fraserjohnstone.tuner.Tuner.render(Tuner.java:73)
at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:459)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1649)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1354)
E/AndroidGraphics: waiting for pause synchronization took too long; assuming deadlock and killing
J'INITIALISATION le tuner dans la méthode initTuner() qui est appelée à partir du constructeur:
private void initTuner(){
if(dispatcher == null){
//set initial tuner values
algo = PitchEstimationAlgorithm.FFT_YIN;
currentHertz = 440.00;
sampleRate = 44100;
bufferSize = 2048;
sampleOverlap = 1536;
offsetInCents = 0;
sharpOrFlat = "";
targetNote = "A";
targetRotation = 0;
dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(sampleRate, bufferSize, sampleOverlap);
PitchDetectionHandler printPitch = new PitchDetectionHandler() {
@Override
public void handlePitch(PitchDetectionResult pitchDetectionResult, AudioEvent audioEvent) {
double pitch = pitchDetectionResult.getPitch();
if(pitch != -1 && !audioEvent.isSilence(silenceThreshold)){
audioDetected = true;
currentHertz = pitch;
}
else{
audioDetected = false;
offsetInCents = 0.00;
}
}
};
AudioProcessor audioProcessor = new PitchProcessor(algo, sampleRate, bufferSize, printPitch);
dispatcher.addAudioProcessor(audioProcessor);
new Thread(dispatcher,"Audio Dispatcher").start();
}
}
Et mon fichier manifeste Android:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fraserjohnstone.tuner"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="24" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/GdxTheme" >
<activity
android:name="com.fraserjohnstone.tuner.AndroidLauncher"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Toute aide serait appréciée.