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

时间:2011-01-06 21:01:22

标签: audio android-ndk radio android

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

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

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

1 个答案:

答案 0 :(得分: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无线电输出,前提是这不是由硬件直接处理的。

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