SO に関する私からの最初の投稿です。オーディオ ジャックを介してアクセサリと通信するアプリを開発しています。信頼性を高めるには、信号の音量を最大にする必要があります。でメディア チャネルを使用しAudioTrack
て再生します。音量を設定するには、次のコードを使用しています。これは、SO を含むいくつかの場所で推奨されています。
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_SHOW_UI);
私にとってかなり驚くべき結果は、まったく音が出ないことです。しかし、このセクションが実行された後、電話で手動で音量を下げると(S +、S2、S3、およびNexusでテストおよび確認されています)、突然最大にクランクアップします. スライダーではなく、実際の音量で。アプリを繰り返し実行するたびに悪化します。実行前はすべて問題ありません。0 は無音、15 は大音量です。
1 回目: 15 はサイレント、14 は最大です。
2 回目の実行: 15 はサイレント、14 は半分、13 は最大です。
...
さらに悪いことに、この動作はシステムに永続的です。アプリを強制終了して mp3 を聴いた後、ボリューム ロッカーで最大音量を手動で設定しても音が出ません。
(常に 15 を返すようです。いくつかの場所では、音量範囲が 0 ~ 15 であると述べられていますが、これの証拠は見つかりませんでした) を静的な値 14に置き換えましたgetStreamMaxVolume
。少なくとも、起動後に音が出るようになりましたが、私の顧客は勝ちました。私のアプリが彼のボリューム スライダーの動作を変更したとしても、あまり嬉しくはありません。
ユーザーの設定に応じて音量を変更できる別の方法について聞いたり読んだりしたので、電話を50%の音量で実行すると、この方法で音量が0〜50%の間で制御されますが、絶対最大音量が必要です.
ああ、完全な記録のために、AudioTracks init-phase:
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate /* 44100 */, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT, 5000, AudioTrack.MODE_STREAM);
そして再生(mBAWholePeriod
バイト配列です):
mAudioTrack.write(mBAWholePeriod, 0, mBAWholePeriod.length);
だから、私の評判が実在しないにもかかわらず、誰かが私に答えてくれたら本当にありがたいです!
乾杯!