내 응용 프로그램의 주요 활동 내에서 사인파를 연속 생성하고 재생하기위한 코드를 입력하고 사인파에서 테스트하기 위해 PresetReverb 객체를 만들었습니다. 그러나, 때마다 나는, 응용 프로그램 충돌을 시작하고,이 로그 캣이 생성됩니다android 앱이 계속 충돌합니다 .Effect 오류 코드 -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;
}
}
은 분명히 라인에 문제가있는 것입니다 : 여기
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)
이 활동에 대한 코드입니다 그것은 PresetReverb 객체를 생성합니다 ... 그러나 나는 이유를 알 수 없습니다. 정확히 내 앱이 충돌하는 원인은 무엇입니까?
기기 또는 에뮬레이터에서 실행 중이십니까? – frogmanx
HTC Vivid에서 실행 중입니다. –