我想知道是否有使用手机的麦克风录音固定的时间的一种方式。 就像当我点击一个按钮,记录应该开始和自己的5秒钟后,应立即停止,你打算用什么方法我用:-)
编辑:
很抱歉的混乱,但我使用AudioRecorder类来记录数据,而我不认为MediaRecorder类功能的正常使用(/全部)为同一。
我想知道是否有使用手机的麦克风录音固定的时间的一种方式。 就像当我点击一个按钮,记录应该开始和自己的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秒。 当它醒来停止录制。 或者使用一个TimerTask这将延迟5秒后调用停止录制。 要么