1

Galaxy Nexus で非常に奇妙な問題が発生しました。私がやろうとしているのは、サービス (音楽関連のアプリケーション) の開始時に 48 個の OGG サンプルを SoundPool にロードすることです。ファイルはそれぞれ 11 ~ 15K です。コードのロードは簡単です:

for (String note : sm) { // 48 iterations
    int soundId = soundPool.load(getResources().getAssets().openFd(note), 1);
    loadedSoundsMap.put(note, soundId);
}

Nexus One 2.3.6 で測定したところ、1 ~ 2 秒でロードされました。しかし、真新しい Galaxy Nexus 4.0.2 では、9 秒でロードされます。

合計1MBを読み取るのに時間がかかるファイルIOであるとは思えないので、デコンプレッサの実装に何か問題があると思います。

このような遅い作業の原因を誰かが提案できますか?

PS Mp3 はほぼ同じ画像を提供します。

4

2 に答える 2

1

これはこれに関連している可能性があります: Galaxy Nexus - インストール時に間違った CPU ABI が選択されている

このバグ: http://code.google.com/p/android/issues/detail?id=25321

于 2012-02-12T10:33:19.023 に答える
0

問題はSoundPool実装にあります。オーディオ ハードウェアは非圧縮データ (PCM) の前で動作するため、SoundPoolすべてのサウンドがロードされたままになるため、OGG または MP3 ファイルを WAV に解凍します。UX を改善するために、アプリケーションの起動時に OGG から WAV ファイルにデコードするスレッドを実行できます。サウンドが変換されている場合にプレーヤーを実行する場合 - WAV ファイルを使用し、それ以外の場合は OGG を使用します。素敵な OGG デコーダへのリンクは次のとおりです: libvorbis-libogg-android。OGG デコーダーは生の PCM にデコードするため、WAV ヘッダーを追加する必要があることに注意してください。

Android L では、AwesomePlayer にも問題があり、SoundPool へのファイルのロードに非常に長い時間がかかります。開発者向けオプションで NuPlayer に切り替えると役立ちますが、Android チームによって何らかの方法で修正される必要があります。

于 2014-11-27T16:25:36.720 に答える