HwAudioSource 将音频来源设备直接连接到 Android 混音器。
动机
在 Android 中使用设备到设备或硬件音频补丁程序时,可能会存在一些限制。这些限制会导致无法接收 PLAY、PAUSE 和 STOP 等媒体键事件,因为这些事件会绕过 Android 音频堆栈,因此需要配备硬件以将补丁程序混合到 Android 的其他音频中。
使用 HwAudioSource
HwAudioSource 是一种新型的播放器,设计为软件补丁程序。因此,使用此播放器来接收媒体键事件和输出流的应用能够通过 Android 进行混合和路由。
mHwAudioSource = new HwAudioSource.Builder()
.setAudioDeviceInfo(AudioDeviceInfo: info)
.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.build())
.build();
mHwAudioSource.play();
mHwAudioSource.stop();
音频 HAL 的更改
使用此新型播放器时,对音频 HAL(例如,device/generic/car/emulator/audio/driver/audio_hw.c)存在几项要求:
Adev_create_audio_patch 请求建立从设备到混音器的音频补丁程序。这不需要任何特殊操作。
Adev_open_input_stream 要求 audio_source 为 AUDIO_SOURCE_FM_TUNER
In_read 使用实际的广播电台音频数据填充音频缓冲区
建议在 audio_policy_configuration.xml 中配置类型为 AUDIO_DEVICE_IN_FM_TUNER 的调谐器设备:
tagName="Tuner_source"
type="AUDIO_DEVICE_IN_FM_TUNER"
role="source"
address="tuner0">
name=""
format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
通过此设备配置,结合使用 AudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS) 与 AudioDeviceInfo.TYPE_FM_TUNER可便于查找 FM 电台输入设备。