Android 模拟器音频输入捕获
Android emulator audio input capturing
我想开发一个 android 应用程序来捕获周围环境中的音频(就像录音机一样,不仅是用户的声音,还包括任何音频)。因此,我正在寻找一种使用 android 模拟器(任何免费的 android 模拟器)测试此应用程序的方法。
我发现了很多关于这个主题的问题,但没有真正的答案:
Android 的 Audio Capture documentation 告诉我这是不可能的:
Note: The Android Emulator does not have the ability to capture audio, but actual devices are likely to provide these capabilities.
this SO question 的答案告诉我可以通过一些 AVD 配置:
You need to add audio recording + playback support to the emulator (Android SDK and AVD manager -> Virtual devices -> Edit -> Hardware -> New).
但我不知道在哪里可以找到这些 "Virtual devices -> ..." 菜单选项(或者它们是什么),我什至认为它们不再存在于当前的 AVD 管理器和 SDK 管理器中。
This answer 在 SO 上告诉我这是可能的,但只有在使用非常特定的 AudioRecorder 配置时才可以。
所有这些建议似乎都是至少 2 年前的,所以我想它们不是最新的。我知道我可以使用一台真实的设备,但目前没有,那只会涵盖应用程序在一个特定设备上的一个版本 android 上的行为。我真的需要比这更多的测试。
是否可以在模拟器上测试和调试音频捕获应用程序?
有没有办法在模拟器上捕获音频输入(也许使用标准模拟器以外的其他模拟器?)?
我能否以某种方式转发来自连接到我的 PC 的麦克风或我的扬声器或直接来自音频文件(例如 mp3)的输入?
我正在使用 windows 8.1 和 Android studio 1.2.2
是的,这是可能的。它只需要使用 AudioRecord(或其他)开始录制,但在某些情况下(取决于模拟器中使用的系统映像)录制只能以每秒 8000 个样本的速度执行。
例如,当我为模拟器使用 Lollipop 图像时,可以以声明的速率 (44100) 进行记录,尽管听起来像是重新采样。使用 Kitkat 或更低的图像时,只能录制 ad 8000sps。
就像另一个人说的,这是可能的。从 Android Studio 2.2.3 开始,您不需要上面列出的任何信息。它应该可以正常工作...假设您匹配我正在使用的设置。我目前使用的设置:
- Ubuntu 16.04
- OpenSL ES
- 模拟器设置
- KVM
- Google APIs
- 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 模拟器(任何免费的 android 模拟器)测试此应用程序的方法。
我发现了很多关于这个主题的问题,但没有真正的答案:
Android 的 Audio Capture documentation 告诉我这是不可能的:
Note: The Android Emulator does not have the ability to capture audio, but actual devices are likely to provide these capabilities.
this SO question 的答案告诉我可以通过一些 AVD 配置:
You need to add audio recording + playback support to the emulator (Android SDK and AVD manager -> Virtual devices -> Edit -> Hardware -> New).
但我不知道在哪里可以找到这些 "Virtual devices -> ..." 菜单选项(或者它们是什么),我什至认为它们不再存在于当前的 AVD 管理器和 SDK 管理器中。
This answer 在 SO 上告诉我这是可能的,但只有在使用非常特定的 AudioRecorder 配置时才可以。
所有这些建议似乎都是至少 2 年前的,所以我想它们不是最新的。我知道我可以使用一台真实的设备,但目前没有,那只会涵盖应用程序在一个特定设备上的一个版本 android 上的行为。我真的需要比这更多的测试。
是否可以在模拟器上测试和调试音频捕获应用程序?
有没有办法在模拟器上捕获音频输入(也许使用标准模拟器以外的其他模拟器?)?
我能否以某种方式转发来自连接到我的 PC 的麦克风或我的扬声器或直接来自音频文件(例如 mp3)的输入?
我正在使用 windows 8.1 和 Android studio 1.2.2
是的,这是可能的。它只需要使用 AudioRecord(或其他)开始录制,但在某些情况下(取决于模拟器中使用的系统映像)录制只能以每秒 8000 个样本的速度执行。
例如,当我为模拟器使用 Lollipop 图像时,可以以声明的速率 (44100) 进行记录,尽管听起来像是重新采样。使用 Kitkat 或更低的图像时,只能录制 ad 8000sps。
就像另一个人说的,这是可能的。从 Android Studio 2.2.3 开始,您不需要上面列出的任何信息。它应该可以正常工作...假设您匹配我正在使用的设置。我目前使用的设置:
- Ubuntu 16.04
- OpenSL ES
- 模拟器设置
- KVM
- Google APIs
- 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 我没有直接使用)。我什至无法开始理解为什么我最近才开始工作,但我目前正在调查它。