2013-10-06 5 views
0

소리가있는 버튼이있는 응용 프로그램이 있습니다 (soundPool) 플래시 카드에 쓸 필요가 있습니다. MediaRecorder을 통해 만들었지 만 응용 프로그램을 실행 한 다음 녹음 재생을 멈추고 녹음 응용 프로그램 중지를 클릭하면 문제가 무엇인지 알려주지 않습니다. 나는 방법에 recordStop미디어 레코더 응용 프로그램 오디오 녹음

public class MainActivity extends Activity { 


    int kickSound; 
    SoundPool mSoundPool; 
    AssetManager assets; 

    private MediaRecorder mediaRecorder; 
    private MediaPlayer mediaPlayer; 
    private String fileName; 

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

    mSoundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0); 
    assets = getAssets(); 

    kickSound = loadSound("snare_trap.ogg"); 

    ImageButton kick = (ImageButton)this.findViewById(R.id.imageButton1); 
    kick.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN){ 
       playSound(kickSound); 
      } 
      return false; 
     } 
    }); 


    fileName = Environment.getExternalStorageDirectory() + "/record.3gpp"; 
    } 

    protected void playSound(int sound) { 

     if (sound > 0) 
      mSoundPool.play(sound, 1, 1, 1, 0, 1); 
     } 


     private int loadSound(String fileName) { 
      AssetFileDescriptor afd = null; 
      try { 
       afd = assets.openFd(fileName); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       Toast.makeText(this, "Couldn't load file '" + fileName + "'", Toast.LENGTH_SHORT).show(); 
       return -1; 
      } 
      return mSoundPool.load(afd, 1); 
      } 


    public void recordStart(View v) { 
    try { 
     releaseRecorder(); 

     File outFile = new File(fileName); 
     if (outFile.exists()) { 
     outFile.delete(); 
     } 

     mediaRecorder = new MediaRecorder(); 
     mediaRecorder.setAudioSource(AudioManager.STREAM_MUSIC); 
     mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     mediaRecorder.setOutputFile(fileName); 
     mediaRecorder.prepare(); 
     mediaRecorder.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    } 

    public void recordStop(View v) { 
     mediaRecorder.stop(); 
    } 


    public void playStart(View v) { 
    try { 
     releasePlayer(); 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setDataSource(fileName); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    public void playStop(View v) { 
    if (mediaPlayer != null) { 
     mediaPlayer.stop(); 
    } 
    } 

    private void releaseRecorder() { 
    if (mediaRecorder != null) { 
     mediaRecorder.release(); 
     mediaRecorder = null; 
    } 
    } 

    private void releasePlayer() { 

     mediaPlayer.release(); 
     mediaPlayer = null; 
    } 


    @Override 
    protected void onDestroy() { 
    super.onDestroy(); 
    releasePlayer(); 
    releaseRecorder(); 
    } 

} 

답변

0

왜 당신이 밖으로 시작하는 레코더를 풀어줄 것으로 기대? 해제는 더 이상 레코더에 액세스하지 않으려는 경우에만 사용해야합니다. 릴리스를 끝까지 이동해보십시오.