如何在Android中使用麦克风的强度? (语音)

时间:2011-06-27 13:52:47

标签: android voice microphone audiorecord

我需要在我的应用程序中实现一项功能,其中工作或需要通过麦克风读取语音的强度。但是我不知道怎么做,有人可以帮帮我吗?我需要阅读声音的强度,不要识别任何单词。

我知道我必须使用AudioRecord类,但我并不是我必须写入代码的步骤,因为我不知道是否真的有必要将一点声音保存到SD卡在读取此信号的最大值后将其转换为PCM。

1 个答案:

答案 0 :(得分:2)

AudioRecord类可以让你录制到缓冲区。然后,您可以根据需要选择处理缓冲区或将其保存到SD卡。您想要做的完全取决于您的应用程序。处理后需要数据吗?或者您需要的处理结果是什么?你打算播放录音吗?

如何使用AudioRecord类的简化示例如下:

AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, AudioFormat.CHANNEL_IN_STEREO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize);

recorder.startRecording();

short buf[] = new short[buffersize];
int n = 0;
while(<some condition>) {
   n = recorder.read(buf, 0, bufferSize);
   process(buf);
}

recorder.stop();
recorder.release();

您显然希望将上述代码放在主UI线程之外的线程中。

您需要确保无论您在进程中执行的操作是否足够快,您都可以在缓冲区填满之前重新读取数据,否则您将丢弃数据。采样率和缓冲区大小取决于您处理数据的方式以及延迟要求。

在您完成所有工作后,您可能会决定将手机放入“扬声器电话”,以便通过麦克风获得更好的收益:

AudioManager amAudioManager;  
amAudioManager =      (AudioManager)getSystemService(Context.AUDIO_SERVICE);
amAudioManager.setMode(AudioManager.MODE_IN_CALL);
amAudioManager.setSpeakerphoneOn(true);

是的,您必须将手机放入IN_CALL才能启用扬声器电话。是的,有些手机在IN_CALL时显然会禁用录制功能。