我一直在研究MSM8960特有的这个主题。我调查了ALSA hardware module from google。迈克尔在post中的回答确实提到MSM8960支持“硬件和设备驱动程序”级别的呼叫上行链路音频注入。它是否涉及此ALSA模块的级别?
从手机上的ALSA配置文件中,呼叫语音播放似乎是通过/dev/snd/pcmC0D0p
完成的,或者至少符合ALSA范例。是否可以使用其中一个文件描述符来达到目的?我确实在libalsa-intf中看到了一些有趣的USE_CASE定义。
答案 0 :(得分:8)
MSM8960提供名为Incall_Music Audio Mixer
的ALSA控件,您可以连接CPU DAI MultiMedia1
和MultiMedia2
(对应于ALSA设备pcmC0D0p
和{{1} }}, 分别)。 (请参阅msm-pcm-routing源代码)
因此,如果您正在运行语音呼叫并希望通过pcmC0D1p
在上行链路上播放某些音频,则可以通过pcmC0D0p
执行此操作(假设您已获得root权限):
adb shell
更优雅的方法是在设备的UCM文件(snd_soc_msm_blah_blah ..)中创建一个新的用例,在新文件的启用顺序中添加incall音乐路由:
amix 'Incall_Music Audio Mixer MultiMedia1' 1
aplay -Dhw:0,0 mono_8khz_audio.wav
(记得在禁用序列中将其关闭)
要使应用程序能够在自定义ROM上使用此功能,您还必须在音频HAL和多媒体框架中进行一些其他更改,以便在呼叫处于活动状态时为所需的流类型选择新的UCM设置。
由于版权原因,我无法详细说明其余的实施情况,因此我会将其留作有兴趣自行解决的人的练习。