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
的调谐器设备:
<devicePort tagName="Tuner_source" type="AUDIO_DEVICE_IN_FM_TUNER" role="source" address="tuner0"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_STEREO"/> </devicePort>
通过此设备配置,结合使用 AudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)
与 AudioDeviceInfo.TYPE_FM_TUNER
可便于查找 FM 电台输入设备。