使用麦克风记录数据一段固定的时间

时间:2012-06-07 11:23:57

标签: android audio microphone recording

我想知道是否有办法使用移动麦克风来确定录制的持续时间。就像当我点击一个按钮时,录音应该开始,它应该在5秒后自行停止,你建议我使用什么方法: - )

编辑:

很抱歉混淆但是我使用AudioRecorder类来记录数据,我不认为MediaRecorder类功能正常工作(/根本没有)。

3 个答案:

答案 0 :(得分:2)

如果您只是使用计时器,我认为您的应用程序读取时,您不能准确控制缓冲区中的数据量。

我认为录制5秒音频数据的方法是使用this class中的技术。

那里的代码仔细设置音频缓冲区的大小,以便在记录数据一段时间后回调。这是从该课程中剪掉的。

public boolean startRecordingForTime(int millisecondsPerAudioClip,
            int sampleRate, int encoding)
    {
        float percentOfASecond = (float) millisecondsPerAudioClip / 1000.0f;
        int numSamplesRequired = (int) ((float) sampleRate * percentOfASecond);
        int bufferSize =
                determineCalculatedBufferSize(sampleRate, encoding,
                        numSamplesRequired);

        return doRecording(sampleRate, encoding, bufferSize,
                numSamplesRequired, DEFAULT_BUFFER_INCREASE_FACTOR);
    }

然后你的代码就这样做了:

while (continueRecording)
        {
            int bufferResult = recorder.read(readBuffer, 0, readBufferSize);
//do stuff
        }

因为readBufferSize恰到好处,你将得到你想要的数据量(略有变化)

答案 1 :(得分:1)

这就是你所需要的一切。

@Override
    public void onClick(View view)
    {
        if (view.getId() == R.id.Record)
        {
            new Timer().schedule(new TimerTask()
            {

                @Override
                public void run()
                {
                    runOnUiThread(new Runnable()
                    {

                        @Override
                        public void run()
                        {
                            mediaRecorder.stop();
                            mediaRecorder.reset();
                            mediaRecorder.release();
                            files.setEnabled(true);
                            record.setEnabled(true);
                            stop.setEnabled(false);

                        }
                    });

                }
            }, 5000);

            record.setEnabled(false);
            files.setEnabled(false);
            stop.setEnabled(true);
            try
            {
                File file = new File(Environment.getExternalStorageDirectory(),
                        "" + new Random().nextInt(50) + ".3gp");
                adapter.add(file.getAbsolutePath());
                adapter.notifyDataSetChanged();
                mediaRecorder = new MediaRecorder();
                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                mediaRecorder
                        .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                mediaRecorder
                        .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                mediaRecorder.setOutputFile(file.getAbsolutePath());
                mediaRecorder.prepare();
                mediaRecorder.start();
                stop.setEnabled(true);
            } catch (IllegalStateException e)
            {
                e.printStackTrace();
            } catch (IOException e)
            {
                e.printStackTrace();
            }

        }

答案 2 :(得分:0)

使用MediaRecorder类中的setMaxDuration

交替

当你开始录制时开始一个新线程并让它进入睡眠状态5秒钟。当它醒来时停止录音。 或使用一个时间任务,在5秒延迟后调用停止记录。 或