2

私は1つのボタンとXの音声ファイルを持つこの非常に基本的なアプリを持っています。音声ファイルは、raw/の下のres/フォルダーにあります。

ボタンをタップすると、アプリにランダムな音声ファイルを再生させたいです。これが私がこれまでに持っているものです:

Button playNasr = (Button) findViewById(R.id.button1);
    playNasr.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            rand = randomGenerator.nextInt(6) + 1;
            // here's where I'm at a loss, I want to be able to concatenate
            // the random number to the "voice00" string to form
            // "voice001/2/3/etc..." in correspondence to how my voice files
            // are named.
            mp = MediaPlayer.create(Main.this, R.raw.voice00) + rand;
            mp.start();
        }
    });

助けていただければ幸いです、よろしくお願いします

4

1 に答える 1

2

次のようなことを試してください。

String voiceStr = "voice00";
MediaPlayer mp = new MediaPlayer();
Resources res = getResources();
String pkgName = getPackageName();

playNasr.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        rand = randomGenerator.nextInt(6) + 1;
        // "voice00x"
        String id = voiceStr + rand;
        // Get raw resource ID
        int identifier = res.getIdentifier(id, "raw", pkgName);
        AssetFileDescriptor afd = res.openRawResourceFd(identifier);

        // Reuse MediaPlayer or else you will exhaust resources
        mp.reset();
        mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength();
        mp.prepare();
        mp.start();
    }
}

このようにして、インスタンスを再利用し(まだエラーが発生していない場合MediaPlayer、ボタンを繰り返し押してみてください。最終的にエラーが発生します)、データソースを動的に設定できます。これを最適化して、整数を「001」、「001」などとしてフォーマットし、「010」も処理できるようにしますが、例としてハードコーディングしました。

于 2012-10-22T19:24:56.060 に答える