5

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

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

4

1 回答 1

8

MSM8960 提供了一个名为 的 ALSA 控件Incall_Music Audio Mixer,您可以将 CPU DAIMultiMedia1和连接到该控件MultiMedia2(分别对应于 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 设置。
由于版权原因,我无法详细介绍其余的实现,所以我将把它作为练习留给有兴趣的人自己解决。

于 2013-03-04T15:48:52.740 回答