3

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);

だから、私の評判が実在しないにもかかわらず、誰かが私に答えてくれたら本当にありがたいです!

乾杯!

4

2 に答える 2

2

もう 1 つのオプションは、MediaPlayer を使用してオーディオを再生することです。音量は、0.0 (無音) から 1.0 (最大) までの浮動小数点数です。Android を使用すると、大きなボリュームを設定することができますが、それはバグです。MediaPlayer.setVolume( 1.0f, 1.0f ) を使用します。

http://developer.android.com/reference/android/media/MediaPlayer.html#setVolume(float , float)

AudioManager を使用すると、まるで文字通りスイッチに指を置いて音量を上げたかのように、電話の音量を微調整できます。そうです、それがアプリケーションを強制終了した後でも持続する理由です。ユーザーに代わって音量を最大にするのではなく、音量を最大にするようにユーザーに伝えることを検討してください。AudioManager を使用して、どのレベルにあるかを調べ、最大音量が必要であることをユーザーに通知できます。その後、彼らはそれを上げることができます。または、彼の設定を保存して、アプリが静かになった後に復元することもできます。

于 2012-07-20T14:45:56.810 に答える