過去数日間、私のAndroid携帯からsco bluetoothヘッドセットでサウンドを再生しようとしています。このプロジェクトの最終的な目標は、最終的にガレージドアオープナを作ることですが、まずはヘッドセットで音を出す必要があります。ここでAndroid:Sco Bluetoothヘッドセットで音を再生する
は、私が使用している現在のコードに基づいている:
==Manifest==
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
==Code==
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.startBluetoothSco();
audioManager.setBluetoothScoOn(true);
short[] soundData = new short [8000*20];
for (int iii = 0; iii < 20*8000; iii++) {
soundData[iii] = 32767;
iii++;
soundData[iii] = -32768;
}
audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
8000, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, soundData.length
* Short.SIZE, AudioTrack.MODE_STATIC);
audioTrack.write(soundData, 0, soundData.length);
audioTrack.play();
私はこれを実行する前に、私は自分の携帯電話に私のBluetoothヘッドセットをペアリングし、それが接続されています。私はそれが私のボイスメールを呼び出すことによって動作することを確認しました。しかし、私のコードを実行すると、どこからでも音が出ません。ここで
は、コードの異なるラインの効果である:
私はちょうど私のアプリを実行しているとき:
audioManager.setMode(AudioManager.MODE_IN_CALL);
この行は私のサウンド停止のすべては、私が何をすべきかに関係なく作業を行い、通常はコメントアウトされています。
audioManager.startBluetoothSco();
audioManager.setBluetoothScoOn(true);
この2行は、音の停止はフロントスピーカーから出てくる作り、私のヘッドセットのクリックを作成し、それがオンになっているようヒスが、何も出力はありません。
AudioManager.STREAM_VOICE_CALL
これは私のAudioTrackコンストラクタへの呼び出しの一部ですが、かなりの違いがあります。これはSTREAM_VOICE_CALLに設定されているので、サウンドはフロントスピーカーから出ます。これをSTREAM_MUSICに設定すると、代わりにバックスピーカーから音が出ます。私は通話中に私のアプリを開く
:MODE_IN_CALLが既に設定されたため、通話中
audioManager.setMode(AudioManager.MODE_IN_CALL);
は、この行は効果がありません。しかし、違うのは、私の音が電話と混じり合っているのに対し、通常は全く音が出ません。
audioManager.startBluetoothSco();
audioManager.setBluetoothScoOn(true);
これらは、音質がどこから来ているかを制御します。これらをオフにすると、私のサウンドと電話コールがフロントスピーカーから来て、これらをオンにすると、電話が私のヘッドセットから来て音がなくなります。
私のコードがうまくいかない理由については、私は正直に分かりません。私はstartBluetoothSco()を使用するためのチェックリストを完了したと信じています。
Even if a SCO connection is established, the following restrictions
apply on audio output streams so that they can be routed to SCO headset:
- the stream type must be STREAM_VOICE_CALL - the format must be mono -
the sampling must be 16kHz or 8kHz
誰かが私が間違っていることを知っていますか?私はヘッドセットを通して音を出すことができたのは1回しかありませんでしたが、AudioTrackを止めるのを忘れてしまったのは短い音でしたので、それが故障であると仮定しなければなりません。
このコードでAudioManager.MODE_NORMALはどこで設定しましたか? – RedBullet