0

現在、MediaRecorder API を使用して音声録音を行っています。以下は、使用されるコード スニペットです。

mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(filepath);
mRecorder.setMaxFileSize(5000);
try {
    mRecorder.prepare();
    mRecorder.start();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

私がテストした上記のコードを使用すると、サイズが 5Kb のオーディオ ファイルを録音でき、その後録音が停止します。

私がやりたいことは、継続的な記録を行うことであり、次のコードを呼び出すまで、5Kb ファイルとして保存されます。

mRecorder.stop();
mRecorder.reset();
mRecorder.release(); 

出来ますか?現在、5Kb に達すると、記録は完全に停止します。

4

2 に答える 2

0

@SubbaReddy PolamReddy ヒントをありがとう。あなたの言うことは理にかなっています.setMaxFileSize(filesizeInBytes)を使用してファイル制限を設定する方がはるかに簡単です.

于 2012-11-19T03:51:04.573 に答える
0

私は別のアプローチを使用します。1 分ごとに、次のように記録プロセスを再開します。

int RestartAfterSeconds=60;

Boolean recording =false;
private void Stop_Record(){
    if (recording) {
       recording=false;
       // ................
       // ................
       // ................
       // your codes here
       // ................
       // ................
       // ................
    }
}

public void Start_record(){
    if (!recording) {
       recording=true;
       // ................
       // ................
       // ................
       // your codes here
       // ................
       // ................
       // ................
       Sheduler_handler.postDelayed(new Runnable() { @Override  public void run() { Restarter_Recording();  } }, RestartAfterSeconds * 1000);  //1000 ms is 1 second
    }
}

public void Restarter_Recording(){      if(!recording) return;
    // Stop now
    Stop_Record();
    //and Fire start immediately
    Sheduler_handler.postDelayed(new Runnable() { @Override public void run() { Start_Record(); } }, 100);
}

ps ビデオ ファイル間にわずかなギャップがあるだけですが、現時点では問題ありません。

于 2017-01-12T22:32:24.797 に答える