19

私のアプリケーションでは、次のステートメントを発行します。

toneGenerator.startTone(ToneGenerator.TONE_PROP_ACK, 600);

これは、Android 2.3.3 を実行している安価な LG LS670 では非常にうまく機能しますが、Android 2.2.1 から Android 2.3.4 まで、私が持っている他のすべての電話ではまったく聞こえません。

したがって、ここでは OS のバージョンは関係ないことはわかっています (ドキュメントで、API 1 以降でサポートされていることも確認しました)。

また、着信音の音量とメディアの音量の両方が最大に設定され、toneGenerator は次のように初期化されます。

toneGenerator = new ToneGenerator(ToneGenerator.TONE_DTMF_1, 100);

そして、それが1に設定されていることを確認しSettings.System.DTMF_TONE_WHEN_DIALINGました。

この一貫性のない動作 (さまざまな電話間で) に困惑し、これが発生したときにシステム ログを調べたところ、唯一の疑わしい違いは、音が出ない電話TONE_PROP_ACKのログに次の行があることだけでした。

AudioFlinger    setParameters(): io 25, keyvalue routing=0, tid 155, calling tid 121

AudioFlingerの目的は何ですか?また、ミュートとの関係は何TONE_PROP_ACKですか?

電話のモデルに関係なく、 TONE_PROP_ACKが常に鳴るようにコードを修正する方法はありますか?

4

2 に答える 2

1

回避策の1つは、Audacityのようなものでトーンを生成し、SoundPoolまたは選択したAPIを介してそれを再生することです。

AndroidドキュメントによるとToneGenerator.TONE_PROP_ACKは次のとおりです。

1200Hz、100msオン、100msオフ2バースト

SoundPoolを選択した場合は、oggファイル形式で保存し、完了するまでトーンをループすることをお勧めします。これは、非常に小さなクリップでシームレスなオーディオを提供し、多くのリソースを使用しません。

于 2013-02-08T21:49:48.057 に答える
0

解析/デコードは、メディア プレーヤー サービスで使用される Stage fright によって処理されます。デコードされたデータは、オーディオ シンクを介してオーディオ トラックに書き込まれます。その後、トラックは Audio Flinger のミキサー スレッドによってミックスされ、出力ストリーム (オーディオ ハードウェア) に書き込まれます。出力ストリーム オブジェクトは、独自のバッファーをいっぱいにしてから、データを PCM 出力デバイス ファイル (ALSA ドライバーである場合とそうでない場合があります) に書き込みます。

于 2014-10-02T04:00:48.653 に答える