2016-02-13 43 views
-1

我不確定此代碼爲什麼會一直崩潰。我甚至無法打開它。有什麼建議?
我正嘗試進行多軌錄音。在這裏我包含了4個音軌按鈕(播放,停止和錄製)。程序在運行時發生崩潰(使用mediaRecoder和播放器)

package com.audiwave.joe.multitrackaudio; 

    import android.content.DialogInterface; 
    import android.media.MediaPlayer; 
    import android.media.MediaRecorder; 
    import android.os.Environment; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.widget.Button; 
    import java.io.File; 
    import java.io.IOException; 

    public class MainActivity extends AppCompatActivity { 
     //MediaPlayer 
     private MediaPlayer mediaPlayer; 
     private MediaRecorder recorder; 

     //FileName 
     private String OUTPUTFILE; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      //Buttons 
      final Button track1= (Button) findViewById(R.id.track_1); 
      final Button track2= (Button) findViewById(R.id.track_2); 
      final Button track3= (Button) findViewById(R.id.track_3); 
      final Button track4= (Button) findViewById(R.id.track_4); 
      final Button Record= (Button) findViewById(R.id.Record); 
      final Button Play= (Button) findViewById(R.id.Play); 
      final Button Stop= (Button) findViewById(R.id.Stop); 

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

      OUTPUTFILE= Environment.getExternalStorageDirectory()+"/audiorecorder.3gp"; 

      //track 1 recording 
      track1.setOnClickListener(new View.OnClickListener(){ 
       public void onClick(View v){ 
        if(R.id.Record==1){ 
         try{ 
          startRecording(); 
         } catch (Exception e){ 
          e.printStackTrace(); 
         } 
        } 
       } 
      }); 

      //track 2 recording 
      track2.setOnClickListener(new View.OnClickListener(){ 
       public void onClick(View v){ 
        if(R.id.Record==1){ 
         try{ 
          startRecording(); 
         } catch (Exception e){ 
          e.printStackTrace(); 
         } 
        } 
       } 
      }); 

      //track 3 recording 
      track3.setOnClickListener(new View.OnClickListener(){ 
       public void onClick(View v){ 
        if(R.id.Record==1){ 
         try{ 
          startRecording(); 
         } catch (Exception e){ 
          e.printStackTrace(); 
         } 
        } 
       } 
      }); 

      //track 4 recording 
      track4.setOnClickListener(new View.OnClickListener(){ 
       public void onClick(View v){ 
        if(R.id.Record==1){ 
         try{ 
          startRecording(); 
         } catch (Exception e){ 
          e.printStackTrace(); 
         } 
        } 
       } 
      }); 

      //Play recording 
      Play.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        try 
        { 
         mediaPlayer=new MediaPlayer(); 
         mediaPlayer.setDataSource(OUTPUTFILE); 
         mediaPlayer.prepare(); 
         mediaPlayer.start(); 
        } 
        catch(Exception e){ 
         e.printStackTrace(); 
        } 
       } 
      }); 

      //Stop recording 
      Stop.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        if (mediaPlayer != null) 
         mediaPlayer.stop(); 
       } 
      }); 
     } 


     private void startRecording() { 
      File outFile= new File(OUTPUTFILE); 
      recorder= new MediaRecorder(); 
      recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
      recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB); 
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      recorder.setOutputFile(OUTPUTFILE); 

      //prepare recorder 
      try{ 
       recorder.prepare(); 
      } catch (IOException e){ 
       e.printStackTrace(); 
      } 

      //start recorder 
      recorder.start(); 

     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.menu_main, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      // Handle action bar item clicks here. The action bar will 
      // automatically handle clicks on the Home/Up button, so long 
      // as you specify a parent activity in AndroidManifest.xml. 
      int id = item.getItemId(); 

      //noinspection SimplifiableIfStatement 
      if (id == R.id.action_settings) { 
       return true; 
      } 

      return super.onOptionsItemSelected(item); 
     } 

    } 
+0

你真的應該告訴我們你的logcat輸出。你甚至沒有說錯誤是什麼。 – csmckelvey

+0

當控制檯崩潰時,會出現什麼類型的錯誤? – GAntoine

+0

也許這些按鈕必須在'onCreate'方法之外聲明,然後只在'setContent' –

回答

0

你應該這樣做:

實際需要之前設置視圖初始化UI部件。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

     //Buttons 
     final Button track1= (Button) findViewById(R.id.track_1); 
     final Button track2= (Button) findViewById(R.id.track_2); 
     final Button track3= (Button) findViewById(R.id.track_3); 
     final Button track4= (Button) findViewById(R.id.track_4); 
     final Button Record= (Button) findViewById(R.id.Record); 
     final Button Play= (Button) findViewById(R.id.Play); 
     final Button Stop= (Button) findViewById(R.id.Stop); 

    // Other stuff 
} 

希望這會幫助你。

相關問題