首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >媒体录制器录制应用程序音频

媒体录制器录制应用程序音频
EN

Stack Overflow用户
提问于 2013-10-06 14:22:15
回答 1查看 585关注 0票数 0

我有一个应用程序,有几个按钮,有声音(soundPool),我需要写在闪存卡上,我通过MediaRecorder,但当我运行这个应用程序,然后打开录音播放,并单击停止录制应用程序崩溃你不告诉我是什么问题?我希望在recordStop方法中

代码语言:javascript
复制
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();
  }

}
EN

回答 1

Stack Overflow用户

发布于 2014-01-31 03:08:41

为什么你一开始就放了录音机?仅当您不想再访问录像机时,才应使用释放。尝试将释放移动到最后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19206039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档