HwAudioSource 플레이어

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>

이 기기 설정에서는 AudioDeviceInfo.TYPE_FM_TUNER와 함께 AudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)를 사용하여 FM 라디오 입력 기기를 쉽게 찾을 수 있습니다.