从Android中的各种内部设备录制音频(通过未记录的API)

Mar*_*nov 4 audio android radio android-ndk

我想知道是否有可能从其他来源捕获音频数据,如系统输出,FM收音机,蓝牙耳机等.我特别感兴趣的是从FM收音机捕获音频并已经调查了所有可能性,包括试图嗅探原始手机和无线电设备之间的蓝牙通信没有运气.这太糟糕Android只允许录制来自MIC的音频.

我查看了Android源代码,找不到后门,允许我在没有设备生根的情况下这样做.至少你是否知道如何使用其他设备(可能以某种方式访问/ dev/audio)通过NDK或甚至更好地说 - Java(可能是Reflection?)来诱骗系统捕获来自FM的音频流无线电.(在我的情况下,我正在尝试为HTC Desire开发应用程序)

PS.对于那些反对使用未记录的API的人,请不要在这里发布 - 我正在编写一个供我个人使用的应用程序,或者即使我发布它也会警告用户可能存在不兼容性.

oli*_*erg 6

我花了很多时间来破译音频堆栈,我想你可能会试图劫持libaudio.您将无法直接与硬件(/ dev/*)对话,因为许多设备使用专有的音频驱动程序.在这方面没有规则.

但是,/system/lib/libaudio.so提供的音频硬件抽象层(HAL)应该公开http://source.android.com/porting/audio.html中描述的API.

Android系统,尤其是audioflinger,使用此libaudio HAL查找可用设备,处理路由,当然还有读/写PCM数据.

所以,你可以通过重命名后者来劫持audioflinger和libaudio之间的交互,并提供你自己的装饰真实的libaudio.这样做,您应该能够记录发生的事情并且很可能拦截FM无线电输出,前提是这不是由硬件直接处理的.

当然,所有这些都需要生根.如果您设法做到这一点请评论,我感兴趣.