我需要在我的应用中实现一个功能,该功能可以正常工作或需要通过麦克风读取语音强度。但我不知道该怎么做,有人可以帮我吗?只是我需要阅读声音的强度,而不是识别任何单词。
我知道我必须使用 AudioRecord类,但我不知道我必须将哪些步骤写入我的代码,因为我不知道是否真的有必要将一些声音保存到 SD 卡中,然后将其转换为 PCM,然后读取最大值这个信号。
最佳答案
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 时的录音功能。
关于android - 如何在 Android 中使用麦克风的强度? (嗓音),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6493928/