2012-12-28 10 views
8

デュアルスクリーンセットアップを作成しようとしています。 Androidタブレット(Nexus 10)は、HDMIを使用して別の画面に接続されています。ヘッドセットとスピーカフォンのオーディオ出力を同時に行います

(VLCなどのアプリケーションを使用して)タブレットで映画を再生すると、両方の画面に正しく表示されます。
ただし、オーディオ信号はHDMI経由でのみ転送されます。 を使用して、のオーディオ出力をヘッドセットまたはHDMIにすることができました。

両方のデバイスの音声出力を同時に設定する機能が表示されません。 Audio Managerで設定しようとしましたが、1つのチャンネルでしか動作しません。

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

am.setSpeakerphoneOn(true); 
am.setWiredHeadsetOn(true); 

私が気づいたもう一つは、その後、プラットフォームのオーディオシステムに変数を渡しsetParametersをAPIです。それはALSAかもしれません、おそらく解決策はありますか?

答えて

2

すべてのAndroid搭載端末で動作することが保証されている方法はありません。ここで問題となるのは、プラットフォームには一般的にHDMI +スピーカーまたはHDMI +ヘッドセットコンボデバイス(HDMIと他の目的地の両方への単一出力ストリームの低レベルルートを記述するオーディオデバイス)がありません。必ずしもハードウェアの制限はありませんが、通常は使用したいルートではないため、追加されていません。

私は、HDMIと有線ヘッドセットの両方がどのストリームタイプでも選択されるプラットフォームを見つけたことはありません。 HDMI +スピーカーは、いくつかのプラットフォームでRINGとALARMストリームタイプに選択できますが、その配線決定を実現するためのコンボデバイスがプラットフォームにない場合は、 HDMIまたはスピーカーのオーディオしか得られません。
見てくださいat this code私はどういう意味を参照してください。これは、クアルコムプラットフォームを使用しているOEMがコードの基盤となるものです。そして、この特定のコードは、特定のストリームの低レベルの出力ルートを選択します。あなたのケースでは、HDMI(AUX_DIGITAL)が利用可能であることがわかるので、HDMIユースケース(何かlike thisに対応)を選択してすぐに戻ります。

+0

Thx&はすべて意味があります。私の理解を確認するには:カスタマイズされたAndroidシステム(例えば私はOEMで、自分のバージョンを配布することができます)には、修正された 'ALSADevice.cpp'が含まれていて、同時にHDMIとSpeaker用にルートが設定されています。残っている唯一の懸念は、 'getUCMDevice'関数が単一のオーディオデバイスを返すかもしれないということです。だから私は最初にルートを追加してから、そこにルートID /名前を返すべきですか? –

+0

AudioPolicyManagerが実際に使用しているストリームタイプ(または少なくとも_some_ streamタイプ)に対してHDMI + Speakerを実際に選択していることを確認する必要があります。次に、ALSADeviceはコンボUCMデバイス(例えば 'SND_USE_CASE_DEV_HDMI_SPEAKER'のようなもの)を選択する必要があります。最後に、新たに追加された実際の設定(低レベルのルーティングと呼ぶもの)を追加するためにUCMファイル(snd_soc_msm_blabla) UCMデバイス。もちろん、プラットフォームはこれを実際にサポートする必要があります。 – Michael

+0

ありがとうございます、あなたのアプリケーション内のデータストリームをコピーし、自分で別の出力デバイスに送信するようなことができますか? –

関連する問題