【问题标题】:Implement custom Android's libaudio.so or "how does audio work on Android?"实现自定义 Android 的 libaudio.so 或“音频如何在 Android 上工作?”
【发布时间】:2013-01-21 20:24:58
【问题描述】:

我目前正在发现 Android >4.0,并且有一些我自己无法弄清楚的问题,也许你可以帮助我。

我发现,一些市场应用程序,例如“AlsaMixer”或“MixGet with ALSA”,将一个名为“libaudio.so”的库放入“/system/lib/”(使用用户帮助)。

我想知道发生了什么,经过一段时间的搜索,似乎每个 Android 公司都可以创建一个 libaudio.so,它实现了某个 C++ 接口并将其放入该路径。

Android 然后将这个库用于音频处理(存在 ALSA、TinyALSA 等的实现)?

但是:在我的手机上没有这样的 libaudio.so - 它是如何工作的?否则采取什么措施? 我发现我在那个目录中有一个“libasound.so”,这是默认的吗?

如果我尝试实现自己的 libaudio.so(目前我的知识很少),我可以引用其中的“默认”库吗?

我认为“嘿,世界上每部手机都有一个有效的音频实现,我只想扩展它而不是重新设计(重新配置)轮子?

我的意思是:

AudioFlinger -> 我的自定义 libaudio.so -> 默认库 (libasound.so?) -> 扬声器

如果我的手机上已经有 libaudio.so 怎么办?

我会非常感谢每一个有用的答案。 也许有人给我一个地址,初学者可以理解?

提前致谢和亲切的问候!

【问题讨论】:

  • 对不起!您必须滚动自己的 ROM 才能利用自定义库,因为整个 Android 系统使用回调并在 AudioFlinger 的上下文中与音频库进行内部交互,即...
  • 但是,怎么样?市场上的“AlsaMixer”在我的手机上安装 /system/lib/libaudio.so 和 alsa-config-file (并且永久工作且无需重新启动!)?我有一个有根设备 - 如果这很重要,假设我想为有根设备创建一个库。由于那个 AlsaMixer-app,我敢肯定一定有一种方法没有自定义 ROM。
  • 为了使 AlsaMixer 工作,它以大写表示 ROOT & BUSYBOX REQUIRED。!这就是它能够做到的方式!意思是手机必须植根。刚刚在 play store 上注意到,它只在有限的设备上(顺便说一句,你的设备是什么?),有些人已经编译到它(特别是 CM)中,并且可能会利用它......
  • 哦,是的,我的手机是 Galaxy Nexus。我已经问过作者为什么它需要“BusyBox”(它只是一个工具箱?)但现在得到了答案。生根对我来说很清楚,因为它需要将该库放入系统路径中。好的,假设我会尝试找到一种方法将传出的音频流式传输到远程扬声器(我厨房里的 Apple Airplay),但我会与其他人分享我的工作,所以不仅仅是为我的手机做。我已经接受了它需要有根电话的问题 - 对我来说没问题。我有什么机会?我敢肯定,有办法(搜索了将近 1 年):)
  • Busybox 是嵌入式世界中用户空间工具(也可以在桌面上使用)的 shell 替代品,例如 busybox rm -rf...busybox cp -R ...,它比标准用户空间工具更具适应性可在 Android 上使用。

标签: android audio shared-libraries audioflinger


【解决方案1】:

我现在找到了一个很好且易于理解的图形,其中包含很好的描述,例如如何音频通过 Android 路由:

Android Services Black Magic - Marakana(第10+11页)

但也非常感谢 t0mm13b,他阻止我在 libaudio.so 上走错路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    相关资源
    最近更新 更多