2017-02-20 4 views
0

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.

Répondre

0

Résolu.

Même si je déclarais l'autorisation RECORD_AUDIO dans mon fichier manifeste android, je ne me suis pas rendu compte qu'il s'agissait d'une autorisation dangerous et donc l'autorisation devait être obtenue au moment de l'exécution car je ciblais Android 6.0 et supérieur.