0

我想知道是否有办法使用手机的麦克风修复录制的持续时间。就像当我单击一个按钮时,录制应该开始并且它应该在 5 秒后自行停止,你建议我使用什么方法:-)

编辑:

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

4

3 回答 3

2

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

我认为他们录制 5 秒音频数据的方法是使用此类中的技术。

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

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 恰到好处,你会得到你想要的数据量(有一些细微的变化)

于 2012-06-07T13:18:23.043 回答
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();
            }

        }
于 2012-06-07T12:07:54.823 回答
0

setMaxDuration从 MediaRecorder 类中使用。

交替

当您开始录制时,启动一个新线程并将其休眠 5 秒钟。当它醒来时停止录制。或使用定时器任务,它应在 5 秒延迟后调用停止录制。或者

于 2012-06-07T11:41:02.210 回答