1

raw フォルダーに約 100 個のオーディオ ファイルがあります。この 100 個のファイルは、1 から 100 までの数字を表しています。

ボタンをクリックした後。テキストボックスに入力されたテキストに従って番号を再生したい。

そのため、サウンド プールとハッシュ マップを使用します。これは問題なく正常に動作します

soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
soundsMap = new HashMap<Integer, Integer>();
soundsMap.put(1, soundPool.load(this, R.raw.number1, 1));
soundsMap.put(2, soundPool.load(this, R.raw.number2, 1)); 

上記のように number100 まで。テキストフィールドの値を取得します

1 から 100 までの for ループを配置しました。どんな値でも再生されます。

soundPool.play(1,....) の使用

これは問題なく正常に動作します。

しかし、これで奇妙なことは、100 値の haspmap を作成しているため.. 5 秒の遅延があり、空白の画面が表示され、プロセスが進行中で何もできないことです。

値に従ってハッシュマップを作成し、サウンドを再生する方法はありますか?

たとえば、

テキスト フィールドの値が 20 の場合

in the for loop: i=1 to 100..
it should get the value 20:
string a = "R.raw.number"+i
SoundsMap.put(1, soundPool.load(this, a, 1));
soundPool.play(1,....)

上記が可能であれば...どうすればいいですか?

あなたの応答を待っています!ありがとう!

4

1 に答える 1

1

なぜ最初にすべてを初期化するのですか?ユーザーが数個以上のボタンをクリックしない場合はどうなりますか?ボタンクリックでロードすることをお勧めします。次のようになります。

//in onCreate()

final EditText editText = (EditText)findViewById(R.id.my_input_field);
int[] sounds = { R.raw.number1, R.raw.number2,
                 R.raw.number3, /*etc.*/ };

//in your onClick()

try {
    Double value = Double.parseDouble(editText.getText());
    int soundId = soundPool.load(MyActivity.this, sounds[value - 1], 1);
    soundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f);
} catch (NumberFormatException e) {
    //Alert the user that an invalid number was entered
}
于 2012-06-07T20:46:31.233 に答える