Android 在固定时间内使用麦克风记录数据
我想知道是否有一种方法可以确定使用mobile的麦克风录制的持续时间。比如当我点击一个按钮时,录音应该开始,5秒钟后应该停止,你建议我使用什么方法:-) 编辑:Android 在固定时间内使用麦克风记录数据,android,audio,microphone,recording,Android,Audio,Microphone,Recording,我想知道是否有一种方法可以确定使用mobile的麦克风录制的持续时间。比如当我点击一个按钮时,录音应该开始,5秒钟后应该停止,你建议我使用什么方法:-) 编辑: 很抱歉造成混淆,但我正在使用AudioRecorder类来记录数据,我认为MediaRecorder类函数在这方面不能正常工作。使用MediaRecorder类中的setMaxDuration 交替地 当您开始录制时,启动一个新线程并将其休眠5秒钟。当它醒来时,停止录音。 或使用定时器任务,该任务应在5秒延迟后调用停止记录。 或者使用M
很抱歉造成混淆,但我正在使用AudioRecorder类来记录数据,我认为MediaRecorder类函数在这方面不能正常工作。使用MediaRecorder类中的
setMaxDuration
交替地
当您开始录制时,启动一个新线程并将其休眠5秒钟。当它醒来时,停止录音。
或使用定时器任务,该任务应在5秒延迟后调用停止记录。
或者使用MediaRecorder类中的
setMaxDuration
交替地
当您开始录制时,启动一个新线程并将其休眠5秒钟。当它醒来时,停止录音。
或使用定时器任务,该任务应在5秒延迟后调用停止记录。
或者这就是你所需要的
@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();
}
}
这就是你所需要的
@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();
}
}
如果你只是使用一个计时器,我不认为你可以准确地控制有多少数据是在缓冲区时,你的应用程序读取它 我认为他们记录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恰到好处,您将获得所需的数据量(略有变化)如果您只使用计时器,我认为您无法在应用程序读取数据时准确控制缓冲区内的数据量 我认为他们记录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正好合适,您将获得所需的数据量(略有变化)非常棒的答案。。。谢谢,我相信这些信息会有很大的帮助:-)真棒的答案。。。谢谢,我相信这些信息会有很大帮助:-)