2015-05-25 89 views
0

我的應用需要實現音頻捕捉功能。 我遵循了幾個教程和谷歌指南。所以我已經在下面的代碼。 它工作正常,直到第二次嘗試。當我捕捉到我的聲音時,它能夠回覆我所說的話。 在第二次嘗試中,當我認爲它必須重寫所創建的文件時,該應用程序崩潰。可能我忽略了一些方法。 你能幫助我嗎?音頻捕捉Android不工作

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

      inizializzaView(); 
      Media(); 
      SetListner(); 
     } 
public void inizializzaView(){ 

     Text=(TextView)findViewById(R.id.textview); 
     Registra=(Button)findViewById(R.id.bottonereg); 
     Ascolta=(Button)findViewById(R.id.bottoneascolta); 
     Stop=(Button)findViewById(R.id.bottonestop); 

     Stop.setEnabled(false); 
     Ascolta.setEnabled(true); 








    } 

    public void SetListner(){ 

     Registra.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 



        start(v); 


       } 
     }); 

     Stop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 



       stop(v); 


      } 
     }); 
     Ascolta.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       play(v); 


      } 
     }); 


    } 
    public void Media(){ 


     outputFile = Environment.getExternalStorageDirectory(). 
       getAbsolutePath() + "/recording.3gp";; 

// android voice recorder 

     media = new MediaRecorder(); 
     media.setAudioSource(MediaRecorder.AudioSource.MIC); 
     media.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     media.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
     media.setOutputFile(outputFile); 
    } 


    public void start(View view){ 
     try { 
      media.prepare(); 
      media.start(); 
     } catch (IOException e) { 
// TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Registra.setEnabled(false); 
     Stop.setEnabled(true); 
     Toast.makeText(getApplicationContext(), "Stai registrando Burlone !!!", Toast.LENGTH_LONG).show(); 

    } 
    public void stop(View view){ 
     media.stop(); 
     media.release(); 
     media = null; 
     Stop.setEnabled(false); 
     Registra.setEnabled(true); 
     Toast.makeText(getApplicationContext(), "Registrazione Terminata", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void play(View view) { 

     try{ 

      myPlayer = new MediaPlayer(); 

      myPlayer.setDataSource(outputFile); 

      myPlayer.prepare(); 

      myPlayer.start(); 
      myPlayer.release(); 



      Ascolta.setEnabled(true); 

      Stop.setEnabled(false); 





      Toast.makeText(getApplicationContext(), "Ascolta.......", 

        Toast.LENGTH_SHORT).show(); 

     } catch (Exception e) { 

      // TODO Auto-generated catch block 

      e.printStackTrace(); 

     } 

    } 

回答

0

我已經解決了!。 代碼需要執行。

public void start(View view){ 
     try { 
Media();// this creates a new object whenever you capture new voice. 
      media.prepare(); 
      media.start(); 
     } catch (IOException e) { 
// TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Registra.setEnabled(false); 
     Stop.setEnabled(true); 
     Toast.makeText(getApplicationContext(), "Stai registrando Burlone !!!", Toast.LENGTH_LONG).show(); 

    } 
    public void stop(View view){ 
     media.stop(); 
     media.release(); 
     media = null; 
     Stop.setEnabled(false); 
     Registra.setEnabled(true); 
     Toast.makeText(getApplicationContext(), "Registrazione Terminata", 
       Toast.LENGTH_LONG).show(); 
    }