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

标签 android voice microphone audiorecord

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

我知道我必须使用 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/

相关文章:

audio - 自动热键声音设置不会改变麦克风

java - 具有多个 .xml 文件的一个 Java 类

speech-recognition - 使用 Twilio 之类的语音 + 电话 API(文本到语音和语音到文本)以编程方式通过电话接受信用卡?

windows-phone-8 - WP8语音命令定义文件多国语言

javascript - Mobile Safari 中 Javascript 中的麦克风访问

javascript - HTML 音频录制到静音?

android - 将数据库存储在/assets中并访问它

android - android下载代码下载不完整的文件

android 中的 java.lang.NoClassDefFoundError

cocoa - 如何在cocoa中实现语音聊天?