2013-08-08 39 views
7

Tôi đặt một số mã trong cho thế hệ liên tục và phát lại một sóng sin bên trong hoạt động chính của tôi cho ứng dụng của tôi và tạo ra một đối tượng PresetReverb để kiểm tra nó trên sóng sin. Nhưng, mỗi khi tôi khởi động nó, treo ứng dụng, và nó tạo ra này trong logcat:ứng dụng android giữ crashing âm thanhEffect mã lỗi -1

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) 

Đây là mã cho hoạt động này:

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


} 

Rõ ràng có một vấn đề với dòng tạo đối tượng PresetReverb ... nhưng tôi không thể hiểu tại sao. Chính xác điều gì khiến ứng dụng của tôi gặp sự cố?

+0

Bạn có đang chạy trên thiết bị hoặc trình giả lập không? – frogmanx

+0

Tôi đang chạy trên HTC Vivid. –

+0

thử thêm điều này vào tệp kê khai và kiểm tra của bạn. – frogmanx

Trả lời

14

Hãy thử thêm

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

vào danh sách cho phép của bạn trong file manifest của bạn.

+0

Không hoạt động trên Nexus 5 của tôi chạy Android 6.0 – WideFide

+0

Đã không hoạt động trên Nexus 9 chạy Android 6.0 – JellicleCat

+0

Bạn đã thử triển khai các quyền động cho quyền MODIFY_AUDIO_SETTINGS? Điều này giả định bạn đang nhắm mục tiêu API lvl 23+. – frogmanx