我想知道是否有办法使用移动麦克风来确定录制的持续时间。就像当我点击一个按钮时,录音应该开始,它应该在5秒后自行停止,你建议我使用什么方法: - )
编辑:
很抱歉混淆但是我使用AudioRecorder类来记录数据,我不认为MediaRecorder类功能正常工作(/根本没有)。
答案 0 :(得分:2)
如果您只是使用计时器,我认为您的应用程序读取时,您不能准确控制缓冲区中的数据量。
我认为录制5秒音频数据的方法是使用this class中的技术。
那里的代码仔细设置音频缓冲区的大小,以便在记录数据一段时间后回调。这是从该课程中剪掉的。
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恰到好处,你将得到你想要的数据量(略有变化)
答案 1 :(得分: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();
}
}
答案 2 :(得分:0)
使用MediaRecorder类中的setMaxDuration
。
交替
当你开始录制时开始一个新线程并让它进入睡眠状态5秒钟。当它醒来时停止录音。 或使用一个时间任务,在5秒延迟后调用停止记录。 或