0

В моем приложении со многими действиями я пытаюсь сделать запись в одном виде и сохранить ее в файлах телефона. Затем в другом действии я хочу воспроизвести этот файл. Я думаю, что у меня может быть проблема с тем, как я сохраняю исходный файл, потому что он падает во втором действии, когда он хочет прочитать файл. Я не уверен, как сохранить в одном действии, а затем прочитать этот аудиофайл в следующем действии. Я включил то, что, по моему мнению, был соответствующим кодом из обоих видов деятельности.Запись и сохранение аудио в одном виде и воспроизведение звука в другом действии

//This is the Activity that simply records and then saves the audio file 

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Context mContext = getApplicationContext(); 
     createTempFile("Status_Recorder.txt", "INPROGRESS"); 

     /* 
      * Create the file where the audio tone that is recorded will be saved 
      * 
      */ 
     try{ 
      FileOutputStream fOut = openFileOutput("audio_test_right.3gp" , MODE_WORLD_READABLE); 

     }catch(IOException e) { 
      e.printStackTrace(); 
      exit_function(); 
     } 

     path = mContext.getFilesDir()+"/audio_test_right.3gp"; 

     start_recording(); 
} 


    //Method to Start the Recording 
    private void start_recording() { 
     //Intialize the recorder 
     try{ 
     speaker_recorder = new MediaRecorder(); 
     speaker_recorder.reset(); 
     } catch(Exception e){ 
      Log.e(log_tag,"Recorder Initialization Failed"); 
      createTempFile("Status.txt", "COMPLETED-RECORDER FAILED"); 
     } 

     //Setting for the Recorder 
     try{ 
     Log.i(log_tag,"Setting the recorder"); 
     speaker_recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     speaker_recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     speaker_recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     speaker_recorder.setOutputFile(path); 
     } catch(Exception e){ 
      Log.e(log_tag,"Recording Settings Failed"); 
      createTempFile("Status.txt", "COMPLETED-RECORDER FAILED"); 
     } 
     //Prepare the Recorder 
     try{ 
      Log.i(log_tag,"Preparing the Recorder"); 
      speaker_recorder.prepare(); 
     } catch(Exception e){ 
      Log.e(log_tag,"Recording failed"); 
      createTempFile("Status.txt", "COMPLETED-RECORDER FAILED"); 
      exit_function(); 
     } 

     //Start the Recorder 
     try { 
      Log.i(log_tag,"Starting the recorder"); 
      title_text = ((TextView) findViewById(R.id.textView)); 
      title_text.setTextColor(Color.RED); 
      title_text.setText("RECORDING"); 
      speaker_recorder.start(); 
//   Thread.sleep(10000); 
      mHandler.postDelayed(new Runnable() { 
       public void run() { 
        createTempFile("Status_Recorder.txt", "COMPLETED-RECORDER FAILED"); 
        exit_function(); 
       } 
      }, timer); 

     } catch (Exception e) { 
      Log.e(log_tag,"Recorder start failed"); 
      createTempFile("Status.txt", "COMPLETED-RECORDER FAILED"); 
      exit_function(); 
     } 

} 

    private void exit_function() { 
     if (speaker_recorder != null) { 
      speaker_recorder.release(); 
     } 
     onDestroy(); 
    } 

    @Override 
    /* 
    * (non-Javadoc) 
    * @see android.app.Activity#onDestroy() 
    * Function invoked before we exit the application . Reset all the volume 
    * and stream values in this function 
    */ 
    protected void onDestroy() { 
     Log.i(log_tag,"Entered onDestroy()"); 
     super.onDestroy(); 
     this.finish(); 

    } 

    /* 
    * Function to create the a text file in the application directory context. This function 
    * takes the file name and the string that is to be written in it as the input. This function is invoked 
    * to create the Result.txt file. 
    */ 
    private void createTempFile(String filename, String text) { 

     try { 
      FileOutputStream fOut = openFileOutput(filename , MODE_WORLD_READABLE); 
      OutputStreamWriter osw = new OutputStreamWriter(fOut); 
      osw.write(text); 
      osw.flush(); 
      osw.close(); 

     } catch(IOException e) { 
      e.printStackTrace(); 
     } 

    } 

// Это вторая активность, но он выходит из строя, когда он попадает в mp.setDataSource (путь); потому что я предполагаю, что не может найти путь

private void playSound(boolean speakers) { 
     mContext = getApplicationContext(); 
//  audioManager.setMicrophoneMute(true); 
     path = mContext.getFilesDir() + "/audio_test_right.3gp"; 
     audioManager.setSpeakerphoneOn(true); 
     try { 
      mp.setDataSource(path); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     if (speakers) { 
      mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 

     } else { 
      mp.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 

     } 
     mp.start(); 
     mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       createTempFile("Status_RightSpeaker.txt", "COMPLETED"); 
       exit_function(); 
      } 
     }); 
    } 


    } 

ответ

0

Итак, у меня есть рабочий код для Вашего вопроса

Этого метода при поставке с true будет начать запись еще будет остановить записи. Таким образом, вы можете сделать это на первом занятии

private void startOrStopRecording(boolean record){ 
    if (record) { 
     // Record the audio 
     mMediaRecorder = new MediaRecorder(); 
     mMediaRecorder.reset(); 
     mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     mMediaRecorder.setOutputFile(getFilesDir().getAbsolutePath() + "/audio_test.3gp"); 

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

     mMediaRecorder.start(); 
    }else{ 
     // Stop recording 
     if (mMediaRecorder != null){ 
      mMediaRecorder.stop(); 
      mMediaRecorder.release(); 
      mMediaRecorder = null; 
     } 
    } 
} 

Этот метод при поставке с true начинает играть звук еще остановить. Таким образом, вы можете реализовать его на второй деятельности

ПРИМЕЧАНИЕ String mFile = getFilesDir().getAbsolutePath() + "/audio_test.3gp";

private void playOrStop(boolean play){ 
    mPlayer = new MediaPlayer(); 
    try{ 
     if (play){ 
      mPlayer.setDataSource(mFile); 
      mPlayer.prepare(); 
      mPlayer.start(); 
     }else { 
      mPlayer.stop(); 
      mPlayer.release(); 
      mPlayer = null; 
     } 
    }catch (IOException e){ 
     Log.e("Mtali", e.getMessage()); 
    } 
} 

Обязательно добавьте разрешения

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

бонусной

Вы можете использовать ToggleButton для

START & СТОП ЗАПИСЬ

JAVA

final ToggleButton recordButton = (ToggleButton) findViewById(R.id.record_button); 
recordButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     startOrStopRecording(isChecked); 
    } 
}); 

XML

<ToggleButton 
    android:id="@+id/record_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOff="@string/start_playback_string" 
    android:textOn="@string/stop_playback_string"/> 

включение и выключение воспроизведения

JAVA

ToggleButton button = (ToggleButton) findViewById(R.id.play_button); 
button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     playOrStop(isChecked); 
    } 
}); 

XML

<ToggleButton 
     android:id="@+id/play_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:textOff="@string/start_playback_string" 
     android:textOn="@string/stop_playback_string"/> 
+0

Вы удивительны !!! Я пытаюсь наткнуться на этот Android-материал, и вы продолжаете спасать мою жизнь. Огромное спасибо!!!! – Toby