【问题标题】:Android AudioRecord which settings to record callAndroid AudioRecord 哪些设置可以记录通话
【发布时间】:2012-05-07 00:05:42
【问题描述】:

我使用 AudioRecord 类在通话过程中录制语音。

我有兴趣只记录拥有电话的人的声音(来自麦克风)。 在录制过程中,我想做一些音频处理,但现在这不是主题。

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)

【问题讨论】:

  • 通话录音在android中非常困难。用更好的话说(我的个人经验)这是不可能的..只是google.u可以看到很多文件告诉这是不可能的。因为通话录音在android os.so 的基础层,所以我们不能用二进制编辑那个 part.its
  • 你用过什么版本的android?我认为 Api 说它支持它(官方)所以我会尝试一下。
  • 当我尝试时它只会记录几秒钟...仅支持某些手机的记录...检查这些链接对您有用..stackoverflow.com/questions/3929984/recording-call-help-neededstackoverflow.com/questions/8632247/android-call-recording
  • 谢谢,也许你知道上行和下行有什么区别?
  • 如果你正在打电话,下行链路是其他人的声道,上行链路是你的声道(语音)

标签: android signal-processing audio-recording android-audiorecord


【解决方案1】:

您应该始终将 44100 用作采样率,因为它是唯一保证根据 google 工作的采样率。

"以赫兹表示的采样率。44100Hz是目前唯一的 保证适用于所有设备的速率,但其他速率如 因为 22050、16000 和 11025 可能适用于某些设备。”Dev site

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

"描述了音频通道的配置。见 CHANNEL_IN_MONO 和 CHANNEL_IN_STEREO。保证 CHANNEL_IN_MONO 在所有设备上工作。”Dev site

最后:8 位 pcm 与 16 位 pcm: 使用 16 位 pcm,

"音频数据格式:PCM 16 bit per sample。保证支持 按设备。”Dev site

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

字节][]{sample_1_upper, sample_1_lower, sample_2_upper, sample_2_lower,...,sample_n_lower} 但是,如果您使用短 [] 缓冲区:
短[]{sample1, sample2, ..., sample3}

我从未尝试录制通话,但如果操作系统未绑定 MIC 源,您可能可以从中录制。由于您是从麦克风录制的,因此您应该只听到用户的声音。

【讨论】:

  • 您应该通知 Android 文档,该文档仍然明确指出:“ 44100Hz 是目前唯一可以保证在所有设备上工作的频率,但其他频率(例如 22050、16000 和 11025)可能会工作在某些设备上。”
  • 文档不正确,某些设备不支持 44100
  • 您好,在我的情况下,我想要双方录音,但在三星 S8plusEdhe 等某些手机中,S7edge 无法正常工作,他们只录制我的声音,而不是我在电话中通话的另一方声音。
【解决方案2】:

你能解释一下它们之间的区别吗?好的 MIC 很明显,但是 VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK ?

VOICE_UPLINK:从你端传输到对方的音频。 IOW,你对着麦克风说什么(加上周围的噪音,取决于是否使用噪音抑制以及它的表现如何)。

VOICE_DOWNLINK:从对方传输到你端的音频。

VOICE_CALL:VOICE_UPLINK + VOICE_DOWNLINK。

【讨论】:

  • 您好,在我的情况下,我想要双方录音,但在三星 S8plusEdhe 等某些手机中,S7edge 无法正常工作,他们只录制我的声音,而不是我在电话中通话的另一方声音。
【解决方案3】:

有点晚,但您可以查询音频设备以了解它可以做什么;

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
String sampleRate =  audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
String sampleBufferSize = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
int bufferSize = AudioRecord.getMinBufferSize(Integer.parseInt(sampleRate), AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);

【讨论】:

  • 您好,在我的情况下,我想要双方录音,但在三星 S8plusEdhe 等某些手机中,S7edge 无法正常工作,他们只录制我的声音,而不是我在电话中通话的另一方声音。
  • 在 Android 的最后几个版本中,制造商被鼓励使用 Voice.Call 来构建他们的手机,并记录通话的双方(有些人搞砸了并使用了 Voice.Comm)。在某一时刻,几乎每部手机都支持它,并且大量第三方推出了通话记录系统(花费巨大的成本和时间)并注册了许多用户,然后 Android 只是禁用了它.....完全不相关但几乎在同一时间三星(最大的 Android 设备生产商)推出了他们自己的通话录音解决方案(在他们制造手机时可以绕过禁用)。
  • @RecycledSteel 因此,哪个设备支持它以及如何支持它是一团糟。是否有某个地方涵盖了每个地方所需的所有配置?在我对 OnePlus 2 的测试中,它使用 VOICE_CALL 音频源很好地记录来电,仅此而已,但对于去电,它只记录来自 MIC 音频源,并且不会记录来自另一侧的声音(除非扬声器已打开) .不知何故,这个应用程序涵盖了它:play.google.com/store/apps/…。有什么办法知道吗?
  • 简而言之,您可以从音频芯片/驱动程序本身获取数据,这是一项艰苦的工作(主要是低级 C),但是,越来越多的这种“解决方法”正在被修补,所以它不会永远工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
相关资源
最近更新 更多