Android模拟器音频输入捕获

时间:2015-07-03 17:05:28

标签: android debugging audio android-emulator

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

我发现了很多问题但在这个问题上没有真正的答案:

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

  

注意: Android模拟器无法捕获音频,但实际设备可能会提供这些功能。

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

  

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

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


This answer on SO告诉我这是可能的,但仅限于使用非常特定的AudioRecorder配置时。

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

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

我使用的是Windows 8.1和Android studio 1.2.2

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

像其他人说的那样,这是有可能的。从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) 。我甚至无法理解为什么我最近刚开始工作,但我正在调查它。

相关问题