HwAudioSource プレーヤー

HwAudioSource はオーディオ ソース デバイスを Android ミキサーに直接接続します。

目的

Android でデバイス間パッチまたはハードウェア オーディオ パッチを使用すると、いくつかの制限が生じる場合があります。再生、一時停止、停止などのメディアキー イベントを受信できません。また、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.xmlAUDIO_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 ラジオ入力デバイスを検出しやすくなります。