使用 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 MultiMedia1
和 MultiMedia2
连接到该控件(分别对应于 ALSA 设备 pcmC0D0p
和 pcmC0D1p
)。 (见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那种工艺更省电?