根据点击事件录制和保存音频

时间:2013-11-29 06:32:17

标签: android onclick audio-recording

我想创建应用程序,当我点击一次按钮时,录音应该开始特定时间(比如说20秒),然后它应该自动停止录音并要求用户用编辑文本保存音频到输入音频名称。

现在问题是我想要实现的是当用户双击同一个按钮时,录音应该开始40秒然后它应该在40秒后自动停止然后它要求用户输入名称音频。

所以我很困惑如何实现当用户点击一次然后录制开始20秒并且如果双击录制开始40秒。

如果任何人有任何想法或样品申请或任何其他,请帮助我。我已经搜索了很多但没有从任何地方获得任何解决方案。

4 个答案:

答案 0 :(得分:0)

您可以使用此方法..

public void recordAudio(String fileName) {
        final MediaRecorder recorder = new MediaRecorder();
        ContentValues values = new ContentValues(3);
        values.put(MediaStore.MediaColumns.TITLE, fileName);
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        recorder.setOutputFile("/sdcard/sound/" + fileName);
        try {
          recorder.prepare();
        } catch (Exception e){
            e.printStackTrace();
        }

        final ProgressDialog mProgressDialog = new ProgressDialog(MyActivity.this);
        mProgressDialog.setTitle(R.string.lbl_recording);
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        mProgressDialog.setButton("Stop recording", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            mProgressDialog.dismiss();
            recorder.stop();
            recorder.release();
            }
        });

        mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
            public void onCancel(DialogInterface p1) {
                recorder.stop();
                recorder.release();
            }
        });
        recorder.start();
        mProgressDialog.show();
    }

点击此链接以供参考 1)http://www.devlper.com/2010/12/android-audio-recording-part-1/

2)http://www.devlper.com/2010/12/android-audio-recording-part-2/ 享受.. !!!

答案 1 :(得分:0)

你可以用两种方式做到这一点。您可以check double click on the button和另一个check long item click

使用OnItemLongClickListener:

  • 长按是UI准则中推荐的互动,双击不是。
  • 这是用户的期望;用户可能找不到双击动作,因为他们不会去寻找它
  • 已经是handled in the API
  • 实施双触摸会影响单次触摸的处理,因为在处理之前你必须等待每一次触摸都会变成双触摸。

要使用的示例双击侦听器:

private static final long DOUBLE_PRESS_INTERVAL = 250; // in millis
private long lastPressTime;

private boolean mHasDoubleClicked = false;

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {    

        // Get current time in nano seconds.
        long pressTime = System.currentTimeMillis();


        // If double click...
        if (pressTime - lastPressTime <= DOUBLE_PRESS_INTERVAL) {
            Toast.makeText(getApplicationContext(), "Double Click Event", Toast.LENGTH_SHORT).show();
            mHasDoubleClicked = true;
        }
        else {     // If not double click....
            mHasDoubleClicked = false;
            Handler myHandler = new Handler() {
                 public void handleMessage(Message m) {
                      if (!mHasDoubleClicked) {
                            Toast.makeText(getApplicationContext(), "Single Click Event", Toast.LENGTH_SHORT).show();
                      }
                 }
            };
            Message m = new Message();
            myHandler.sendMessageDelayed(m,DOUBLE_PRESS_INTERVAL);
        }
        // record the last time the menu button was pressed.
        lastPressTime = pressTime;      
        return true;
    }

答案 2 :(得分:0)

希望Bellow代码保存音频

mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    if (Build.VERSION.SDK_INT >= 10) {
        mRecorder.setAudioSamplingRate(44100);
        mRecorder.setAudioEncodingBitRate(96000);
        mRecorder.setMaxDuration(24000);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    } else {
        mRecorder.setAudioSamplingRate(8000);
        mRecorder.setAudioEncodingBitRate(12200);
        mRecorder.setMaxDuration(24000);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    }
    String path = mFileName + String.valueOf(count) + ".amr";
    mRecorder.setOutputFile(path);
    try {
        mRecorder.prepare();
        mRecorder.start();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

在轰鸣声片段中改变时间。你应该给毫米时间

    mRecorder.setMaxDuration(24000); 

答案 3 :(得分:0)

http://androidcodeexamples.blogspot.in/2012/06/voice-recording-in-android.html

请点击此链接。

代码中的更改:对于按钮启动单击事件,请定义布尔变量

在StartButton点击事件上更改布尔变量值。

如果布尔变量为真,则设置recordTime 20s,否则记录时间40秒并开始记录。

当您再次开始录制时,请停止录制并重置录制器。

希望这可能有用。