簡體   English   中英

使用麥克風錄制數據固定時間

[英]Recording data using microphone for a fixed duration

我想知道是否有辦法固定使用手機麥克風的錄音時間。 就像我單擊一個按鈕時一樣,錄音應該開始並且應該在5秒鍾后停止,您建議我使用哪種方法:-)

編輯:

抱歉,我很困惑,但是我正在使用AudioRecorder類來記錄數據,而且我認為MediaRecorder類函數不能(完全)正常工作。

如果您僅使用計時器,我認為您無法在應用讀取時准確控制緩沖區中的數據量。

我認為他們錄制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恰到好處,您將獲得所需的數據量(略有變化)

這就是您所需要的。

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

        }

使用setMaxDuration從MediaRecorder類。

交替

當您開始記錄時,啟動一個新線程並將其休眠5秒鍾。 喚醒后停止錄音。 或使用定時任務,該任務應在5秒鍾的延遲后調用停止記錄。 要么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM