Android 模拟器音频输入捕获

Posted

技术标签:

【中文标题】Android 模拟器音频输入捕获【英文标题】:Android emulator audio input capturing 【发布时间】:2015-07-03 17:05:27 【问题描述】:

我想开发一个 android 应用程序来捕捉周围环境中的音频(就像录音机一样,不仅仅是用户的声音,而是任何音频)。因此,我正在寻找一种方法来使用 android 模拟器(任何免费的 android 模拟器)来测试这个应用程序。

我发现了很多问题,但没有关于这个主题的真正答案:

Android 的 Audio Capture documentation 告诉我这是不可能的:

注意:Android Emulator 不具备捕获音频的能力,但实际设备可能会提供这些能力。

this SO question 的答案告诉我可以通过一些 AVD 配置来实现:

您需要为模拟器添加录音+播放支持(Android SDK 和 AVD 管理器 -> 虚拟设备 -> 编辑 -> 硬件 -> 新建)。

但我不知道在哪里可以找到这些“虚拟设备 -> ...”菜单选项(或任何它们),我什至认为它们不再存在于当前的 AVD 管理器和 SDK 管理器中。

This answer 在 SO 上告诉我这是可能的,但只有在使用非常特定的 AudioRecorder 配置时。

所有这些建议似乎至少来自 2 年前,所以我猜它们不是最新的。我知道我可以使用真正的设备,但目前没有,这只会涵盖应用程序在一个特定设备上的一个版本的 android 上的行为。我真的需要更多的测试。

是否可以在模拟器上测试和调试音频捕获应用程序? 有没有办法在模拟器上捕获音频输入(可能使用标准模拟器以外的其他模拟器?)? 我可以以某种方式转发来自连接到我的 PC 的麦克风或来自我的扬声器或直接来自音频文件(例如 mp3)的输入吗?

我使用的是 Windows 8.1 和 Android Studio 1.2.2

【问题讨论】:

【参考方案1】:

是的,这是可能的。它只需要使用 AudioRecord(或其他)开始录制,但在某些情况下(取决于模拟器中使用的系统映像)录制只能以每秒 8000 个样本执行。

例如,当我将 Lollipop 图像用于模拟器时,可以按照声明的速率 (44100) 进行记录,尽管听起来像是重新采样。使用 Kitkat 或更低的图像时,只能记录广告 8000sps。

【讨论】:

【参考方案2】:

就像另一个人说的那样,这是可能的。从 Android Studio 2.2.3 开始,您不需要上面列出的任何信息。它应该可以工作......假设你匹配我正在使用的设置。我目前使用的设置:

Ubuntu 16.04 OpenSL ES 模拟器设置 KVM Google API Nexus 6P 硬件配置文件 工作和测试的 API 版本 23 24

这就是我实例化 OpenSL ES 播放实例的方式:

  // Set-up audio source.
  SLDataLocator_AndroidSimpleBufferQueue lDataLocatorIn = 
    SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, BUFFER_COUNT
  ;
  SLDataFormat_PCM lDataFormat = 
    SL_DATAFORMAT_PCM,
    1, // numChannels
    SL_SAMPLINGRATE_11_025 / 1000, // sample rate here
    SL_PCMSAMPLEFORMAT_FIXED_16, // bitsPerSample
    16, // containerSize
    SL_SPEAKER_FRONT_CENTER, // channelMask
    SL_BYTEORDER_LITTLEENDIAN
  ;
  SLDataSource lDataSource =  &lDataLocatorIn, &lDataFormat ;

  SLDataLocator_OutputMix lDataLocatorOut = 
    SL_DATALOCATOR_OUTPUTMIX,
    outputObj_
  ;
  SLDataSink lDataSink = 
    &lDataLocatorOut,
    NULL
  ;

由于某种原因,API 25 模拟器不支持 11025 采样率(状态为 -22 的错误......此日志行发生在 AudioRecord 中,这是另一个我没有直接使用的 Android API) .我什至无法理解为什么,因为我最近才开始使用它,但我目前正在调查它。

【讨论】:

以上是关于Android 模拟器音频输入捕获的主要内容,如果未能解决你的问题,请参考以下文章

Android 模拟器上的音频输入

ALSA & Python - 捕获多个单声道音频输入

如何从WDM流音频源(Realtek HD Audio)捕获

android:在模拟器上使用 MediaPlayer 录制音频

Android 模拟器可以拾取音频吗?

Android 模拟器似乎以 96khz 录制音频