使用麦克风在固定持续时间的记录数据(Recording data using microphone

2019-09-17 20:38发布

我想知道是否有使用手机的麦克风录音固定的时间的一种方式。 就像当我点击一个按钮,记录应该开始和自己的5秒钟后,应立即停止,你打算用什么方法我用:-)

编辑:

很抱歉的混乱,但我使用AudioRecorder类来记录数据,而我不认为MediaRecorder类功能的正常使用(/全部)为同一。

Answer 1:

如果你只是使用计时器,我不认为你可以准确地控制自己的数据是,当你的应用程序读取它的缓冲区内。

我认为他们的方法来录制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正好,你会得到你想要的数据量(有一些轻微的变化)



Answer 2:

这是你所需要的东西。

@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();
            }

        }


Answer 3:

使用setMaxDuration从MediaRecorder类。

交替

当你开始录制开始一个新的线程,并把它睡觉,持续5秒。 当它醒来停止录制。 或者使用一个TimerTask这将延迟5秒后调用停止录制。 要么



文章来源: Recording data using microphone for a fixed duration