[英]Android audio recording using phone microphone when handsfree is attached
[英]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.