使用 Snapdragon MSM8960 SoC 在通话中注入上行链路音频

Posted

技术标签:

【中文标题】使用 Snapdragon MSM8960 SoC 在通话中注入上行链路音频【英文标题】:Inject uplink audio in call with Snapdragon MSM8960 SoC 【发布时间】:2013-02-18 17:15:15 【问题描述】:

一段时间以来,我一直在研究这个特定于 MSM8960 的主题。我查看了ALSA hardware module from google。 Michael 在post 中的回答确实提到了 MSM8960 在“硬件和设备驱动程序”级别支持通话中上行链路音频注入。它是指这个 ALSA 模块的级别吗?

从手机上的 ALSA 配置文件来看,通话中的语音播放似乎是通过/dev/snd/pcmC0D0p 完成的,或者至少符合 ALSA 范式。是否可以使用其中一个文件描述符来达到目的?我确实在 libalsa-intf 中看到了一些有趣的 USE_CASE 定义。

【问题讨论】:

【参考方案1】:

MSM8960 提供名为 Incall_Music Audio Mixer 的 ALSA 控件,您可以将 CPU DAI MultiMedia1MultiMedia2 连接到该控件(分别对应于 ALSA 设备 pcmC0D0ppcmC0D1p)。 (见msm-pcm-routing源代码)

因此,如果您正在运行语音通话并希望通过pcmC0D0p 在上行链路上播放一些音频,您可以通过adb shell 执行此操作(假设您具有root 访问权限):

amix 'Incall_Music Audio Mixer MultiMedia1' 1
aplay -Dhw:0,0 mono_8khz_audio.wav

更优雅的方法是在设备的 UCM 文件 (snd_soc_msm_blah_blah..) 中创建一个新用例,在其中将 incall 音乐路由添加到新修改器的启用序列中:

'Incall_Music Audio Mixer MultiMedia1':1:1

(记得在禁用序列中将其关闭)。 为了让应用程序能够在您的自定义 ROM 上使用此功能,您还必须在音频 HAL 和多媒体框架中进行一些其他更改,以便在呼叫处于活动状态时为所需的流类型选择新的 UCM 设置。 由于版权原因,我无法详细介绍其余的实现,所以我将把它作为练习留给有兴趣的人自己解决。

【讨论】:

三星 Galaxy S3 手机上似乎没有 amix 和 aplay。如何从 google git 存储库构建它们?因为它不是我同步的默认 android 源代码树的一部分。 我怀疑它们是 Google 存储库的一部分,因为它们位于 Qualcomm 特定的音频 git 中。你可以找到他们的源代码at the Code Aurora Forum 在成功让它在 MSM8960 上运行之后,现在我已经转向 APQ8064。但是,尽管“Incall_Music Audio Mixer MultiMedia1”仍然存在,但似乎以不同的方式支持该功能。我看到了对 Code Aurora android.googlesource.com/kernel/msm/+/… 的一个有趣的提交,我相信对于 APQ8064,可能已经引入了不同的混音器控件来做同样的事情。你能帮忙弄清楚APQ8064有什么区别吗? 你能给我指点吗?因为正如你提到的,MSM8960 和 APQ8064 都是可行的。@Michael IIRC 你需要在 APQ8064 上使用SLIMBUS_4_RX

以上是关于使用 Snapdragon MSM8960 SoC 在通话中注入上行链路音频的主要内容,如果未能解决你的问题,请参考以下文章

三星Exynos4412和高通MSM8960哪个ANTUTU跑分高?三星的32nm HKMG和台积电的28nm LP那种工艺更省电?

高通MSM8974芯片技术分享及项目资料下载

手机Soc芯片简介

MSM8909中LK阶段LCM屏适配与显示流程分析

driver基础

i.MX6ULL驱动开发 | 27 - 使用WM8960 CODEC播放音频