Android AudioRecord用于记录呼叫的设置

gos*_*som 10 android signal-processing audio-recording android-audiorecord

我使用AudioRecord类在通话期间录制语音.

我很想记录拥有手机的人的声音(来自麦克风).在录制过程中,我想做一些音频处理,但现在这是offtopic.

Android具有以下AudioSources选项:

  • MediaRecorder.AudioSource.VOICE_CALL
  • MediaRecorder.AudioSource.MIC
  • MediaRecorder.AudioSource.VOICE_UPLINK
  • MediaRecorder.AudioSource.VOICE_DOWNLINK

你能解释一下它们之间的区别吗?好的MIC显而易见但VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK?

另外我应该选择采样率(8000Hz,16000Hz,2250Hz,44100Hz).你能告诉我选择什么样的采样率以及为什么?

对于音频格式,我选择了AudioFormat.ENCODING_PCM_16BIT,但它也有: - AudioFormat.ENCODING_DEFAULT - AudioFormat.ENCODING_INVALID - AudioFormat.ENCODING_PCM_8BIT

最后我应该使用多少个频道?为什么?(AudioFormat.CHANNEL_IN_STEREO或AudioFormat.CHANNEL_IN_MONO)

Ris*_*sch 11

你应该总是瞄准使用44100作为采样率,因为它是唯一保证根据谷歌工作的采样率.

"以赫兹44100Hz表示的采样率是目前保证在所有设备上工作的唯一速率,但其他速率如22050,16000和11025可能适用于某些设备." 开发网站

至于立体声与单声道,使用单声道.

"描述了音频通道的配置.请参阅CHANNEL_IN_MONO和CHANNEL_IN_STEREO.保证CHANNEL_IN_MONO适用于所有设备." 开发网站

最后:8bit pcm vs 16bit pcm:使用16bit pcm,

"音频数据格式:每个样本PCM 16位.保证设备支持." 开发网站

请记住在使用16位时使用short []缓冲区而不是字节缓冲区.由于16位是2个字节,因此您必须一次在缓冲区中组合两个条目:

byte] [] {sample_1_upper,sample_1_lower,sample_2_upper,sample_2_lower,...,sample_n_lower}但是如果你要使用short []缓冲区:
short [] {sample1,sample2,...,sample3}

我从来没有尝试过录音,但如果操作系统没有绑定MIC源,你可能会记录它.由于您是从麦克风录音,因此您应该只获得用户的声音.


Mic*_*ael 10

你能解释一下它们之间的区别吗?好的MIC显而易见但VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK?

VOICE_UPLINK:从您的终端传输到另一方的音频.IOW,你对麦克风讲话的内容(加上周围的噪音取决于是否使用了噪音抑制以及它的表现如何).

VOICE_DOWNLINK:从对方传输到您的终端的音频.

VOICE_CALL:VOICE_UPLINK + VOICE_DOWNLINK.