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.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 ラジオ入力デバイスを検出しやすくなります。