Android では、次のメカニズムを使用して音声を再生できます。
それぞれのメカニズムにより、Android でオーディオの再生を実行できます。ラジオ用
入力デバイスから再生する場合、これらのオプションでは不十分な場合があります。
ただし、それぞれに音声キャプチャや
MediaRecorder
クラスを使用して、まず音声をキャプチャしてから Android から再生します。システムの場合
入力と接続に以下の情報を接続できます。
AAOS で出力ミキサーに接続します。
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_DEVICE_IN_FM_TUNER
で構成することをおすすめします
audio_policy_configuration.xml
内:
<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>
このデバイス設定では、FM ラジオ入力を検出できます。
(AudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS
を使用)
AudioDeviceInfo.TYPE_FM_TUNER
と組み合わせて使用します。
オーディオ パッチを作成する
ミックスポートまたはデバイスポートの 2 つのオーディオ ポート間にオーディオ パッチを作成できます。通常、ミックスポートからデバイスポートへのオーディオ パッチは再生用で、逆方向はキャプチャ用です。
FM_TUNER
ソースからオーディオ サンプルをルーティングするオーディオ パッチなど。
直接メディアシンクに送信すると、ソフトウェア ミキサーをバイパスできます。その後、
ハードウェア ミキサーで Android のオーディオ サンプルと FM_TUNER
のオーディオ サンプルを
シンクですFM_TUNER
ソースからメディアに直接オーディオ パッチを作成する場合
シンク:
音量調節はメディアシンクに適用され、Android と Android の両方に と
FM_TUNER
音声。シンプルなアプリで Android と
FM_TUNER
の音声を切り替えることができます。 スイッチ(明示的なメディアソースの選択は不要)
Automotive の実装では、2 つの間でオーディオ パッチを作成する必要が生じる場合もあります。
接続します。これを行うには、まずデバイスのポートを宣言し、
audio_policy_configuration.xml
でルートを作成し、mixport を Pod に
接続します。
構成の例
こちらのサンプル構成をご覧ください。
device/generic/car/emulator/audio/audio_policy_configuration.xml
。
<audioPolicyConfiguration>
<modules>
<module name="primary" halVersion="3.0">
<attachedDevices>
<item>bus0_media_out</item>
<item>bus1_audio_patch_test_in</item>
</attachedDevices>
<mixPorts>
<mixPort name="mixport_bus0_media_out" role="source"
flags="AUDIO_OUTPUT_FLAG_PRIMARY">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
<mixPort name="mixport_audio_patch_in" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000"
channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
</mixPort>
</mixPorts>
<devicePorts>
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS"
address="bus0_media_out">
<profile balance="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-8400" maxValueMB="4000" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
<devicePort tagName="bus1_audio_patch_test_in" type="AUDIO_DEVICE_IN_BUS" role="source"
address="bus1_audio_patch_test_in">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="48000" channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-8400" maxValueMB="4000" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
</devicePorts>
<routes>
<route type="mix" sink="bus0_media_out" sources="mixport_bus0_media_out,bus1_audio_patch_test_in"/>
<route type="mix" sink="mixport_audio_patch_in" sources="bus1_audio_patch_test_in"/>
</routes>
</module>
</modules>
</audioPolicyConfiguration>
オーディオ ドライバ用 API
getExternalSources()
を使用すると、使用可能なソースのリストを取得できます。
(アドレスで識別される)を使用して、これらのソースと
シンクポートの数を示します。Audio HAL の対応するエントリ ポイント
IDevice.hal
で表示されます。
Interface IDevice {
...
/
* Creates an audio patch between several source and sink ports. The handle
* is allocated by the HAL and must be unique for this audio HAL module.
*
* @param sources patch sources.
* @param sinks patch sinks.
* @return retval operation completion status.
* @return patch created patch handle.
*/
createAudioPatch(vec<AudioPortConfig> sources, vec<AudioPortConfig> sinks)
generates (Result retval, AudioPatchHandle patch);
* Release an audio patch.
*
* @param patch patch handle.
* @return retval operation completion status.
*/
releaseAudioPatch(AudioPatchHandle patch) generates (Result retval);
...
}
ラジオ チューナー
ラジオアプリを作成する場合は、HwAudioSource
を使用することをおすすめします。
パッチの作成と、メディアキーの処理のためのメディア セッションの両方を処理します。
できます。同じソースとオーディオに対して複数のオーディオ ソースを作成可能
属性です。通常のラジオ用のほかに
2 つ目は交通情報です
FM_TUNER
を録音する場合、Android 11 では
実行権限が android.permission.CAPTURE_AUDIO_OUTPUT
に変更されました。
適用される OP_RECORD_AUDIO
権限チェックが行われなくなりました。
マイクのみです。FM_TUNER
はすでにアプリに影響しているため、アプリには影響ありません。
アクセスするには SYSTEM_API
権限が必要です。
詳細については、ラジオの実装をご覧ください。 ラジオアプリの作成です