2013-08-08 21 views
7

Uygulamam için ana etkinliğimin içinde sürekli bir sinüs dalgası oynatma ve oynatma için bir kod koydum ve bir sinüs dalgası üzerinde test etmek için bir PresetReverb nesnesi oluşturdum. Ama, her zaman, uygulama çökmeleri başlatmak ve LogCat bu oluşturur:android uygulaması, audioEffect hata kodunu çökertmeye devam ediyor -1

package me.kevinossia.mystuff; 


import me.kevinossia.mystuff.tutorial.R; 
import android.app.Activity; 
import android.content.Intent; 
import android.media.AudioFormat; 
import android.media.AudioManager; 
import android.media.AudioTrack; 
import android.media.audiofx.PresetReverb; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainScreen extends Activity 
{ 
Thread t; 
int sr = 44100; 
boolean isRunning=true; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainscreen); 

    Button goBack = (Button) findViewById(R.id.back); 

    goBack.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Intent goBack = new Intent(getApplicationContext(), HomeScreen.class); 
      startActivity(goBack); 
     } 
    }); 

    t = new Thread() 
    { 
     public void run() 
     { 
      setPriority(Thread.MAX_PRIORITY); 
      int buffsize = AudioTrack.getMinBufferSize(sr, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); 

      AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sr, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, buffsize, AudioTrack.MODE_STREAM); 

      PresetReverb reverb = new PresetReverb(0,0); 

      audioTrack.attachAuxEffect(reverb.getId()); 
      reverb.setPreset(PresetReverb.PRESET_LARGEROOM); 
      reverb.setEnabled(true); 
      audioTrack.setAuxEffectSendLevel(1.0f); 

      short samples[] = new short[buffsize]; 
      int amp = 32767; 
      double twopi = 2*Math.PI; 
      double fr = 262.f; 
      double ph = 0.0; 

      audioTrack.play(); 

      while(isRunning) 
      { 
       fr = 262; 

       for(int i=0; i < buffsize; i++) 
       { 
        samples[i] = (short) (amp*Math.sin(ph)); 
        ph += twopi*fr/sr; 
       } 
       audioTrack.write(samples, 0, buffsize); 
      } 
      audioTrack.stop(); 
      audioTrack.release(); 

     } 
    }; 
    t.start(); 

} 
@Override 
public void onPause() 
{ 
    super.onPause(); 
    isRunning = false; 
    try 
    { 
     t.join(); 
    } catch (InterruptedException e) 
    { 
     e.printStackTrace(); 
    } 
    t = null; 
} 


} 

Anlaşılan hattıyla ilgili bir sorun vardır: İşte

08-08 14:36:10.566: E/AudioEffect(19466): set(): AudioFlinger could not create effect, status: -1 
08-08 14:36:10.566: E/AudioEffects-JNI(19466): AudioEffect initCheck failed -1 
08-08 14:36:10.566: E/AudioEffect-JAVA(19466): Error code -1 when initializing AudioEffect. 
08-08 14:36:10.566: W/dalvikvm(19466): threadid=11: thread exiting with uncaught exception (group=0x40ac2228) 
08-08 14:36:10.576: E/AndroidRuntime(19466): FATAL EXCEPTION: Thread-11436 
08-08 14:36:10.576: E/AndroidRuntime(19466): java.lang.RuntimeException: Cannot initialize effect engine for type: 47382d60-ddd8-11db-bf3a-0002a5d5c51bError: -1 
08-08 14:36:10.576: E/AndroidRuntime(19466): at android.media.audiofx.AudioEffect.<init>(AudioEffect.java:387) 
08-08 14:36:10.576: E/AndroidRuntime(19466): at android.media.audiofx.PresetReverb.<init>(PresetReverb.java:136) 
08-08 14:36:10.576: E/AndroidRuntime(19466): at me.kevinossia.mystuff.MainScreen$2.run(MainScreen.java:47) 

aktivite için koddur Bu PresetReverb nesnesini oluşturur ... ama nedenini anlayamıyorum. Uygulamamın tam olarak kilitlenmesine neden olan nedir?

+0

Bunu bir aygıtta veya emülatörde mi çalıştırıyorsunuz? – frogmanx

+0

HTC Vivid'de çalıştırıyorum. –

+0

Bunu manifestinize ekleyip test etmeyi deneyin. – frogmanx

cevap

14

deneyin Manifest'inizde dosyasında izin listesine

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 

ekledi.

+0

Android 6.0 çalıştıran Nexus 5 cihazımda çalışmadı – WideFide

+0

Nexus 9'umda Android 6.0 çalıştırıyordum – JellicleCat

+0

MODIFY_AUDIO_SETTINGS izni için dinamik izinler uygulamayı denediniz mi? API lvl 23 + 'ı hedeflediğiniz varsayılmaktadır. – frogmanx

İlgili konular