Android应用程序不断崩溃audioEffect错误代码-1

我在我的应用程序的主要活动中添加了一些代码用于连续生成和回放正弦波,并创建了一个PresetReverb对象以在正弦波上测试它.但是,每次我启动它时,应用程序崩溃,它会在logcat中生成
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)

以下是活动的代码

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.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,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;
}


}

显然创建PresetReverb对象的行存在问题……但我无法弄清楚原因.究竟是什么导致我的应用程序崩溃?

解决方法

尝试添加
<uses-permission android:name="android.permission.MODIFY_AUdio_SETTINGS"/>

到您的清单文件中的权限列表.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...