Asad Abbas
Asad Abbas

Reputation: 55

How to randomly play a specific number of audio files from a directory?

I am new to android development. I am making an app based on dictation.
In the activity below I have 15 small audio clips; the files play one after the other with a delay of 5 seconds.
My question is how can I play only 10 clips from the 15; also I want the 10 clips to be randomly played.
Any help will be appreciated.

package com.example.dictationary;

import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;

public class Level1 extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.level1);
        MediaPlayer n1 = MediaPlayer.create(this,R.raw.assassin); 
        final MediaPlayer n2 = MediaPlayer.create(this,R.raw.accessible);
        final MediaPlayer n3 = MediaPlayer.create(this,R.raw.bashfully);
        final MediaPlayer n4 = MediaPlayer.create(this,R.raw.blistering);
        final MediaPlayer n5 = MediaPlayer.create(this,R.raw.butter);
        final MediaPlayer n6 = MediaPlayer.create(this,R.raw.campaign);
        final MediaPlayer n7 = MediaPlayer.create(this,R.raw.circumstances);
        final MediaPlayer n8 = MediaPlayer.create(this,R.raw.clinching);
        final MediaPlayer n9 = MediaPlayer.create(this,R.raw.deferential);
        final MediaPlayer n10 = MediaPlayer.create(this,R.raw.distinguished);
        final MediaPlayer n11 = MediaPlayer.create(this,R.raw.embarrass);
        final MediaPlayer n12 = MediaPlayer.create(this,R.raw.etiquette);
        final MediaPlayer n13 = MediaPlayer.create(this,R.raw.fatigue);
        final MediaPlayer n14 = MediaPlayer.create(this,R.raw.feasible);
        final MediaPlayer n15 = MediaPlayer.create(this,R.raw.glitch);

        n1.start();





    Timer buttonTimer = new Timer();
    buttonTimer.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n2.start();

                }

            });
        }
    }, 5000);

    Timer buttonTimer1 = new Timer();
    buttonTimer1.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n3.start();

                }
            });
        }
    }, 10000);

    Timer buttonTimer2 = new Timer();
    buttonTimer2.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n4.start();

                }
            });
        }
    }, 15000);


    Timer buttonTimer3 = new Timer();
    buttonTimer3.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n5.start();

                }
            });
        }
    }, 20000);

    Timer buttonTimer4 = new Timer();
    buttonTimer4.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n6.start();

                }
            });
        }
    }, 25000);

    Timer buttonTimer5 = new Timer();
    buttonTimer5.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n7.start();

                }
            });
        }
    }, 30000);

    Timer buttonTimer6 = new Timer();
    buttonTimer6.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n8.start();

                }
            });
        }
    }, 35000);

    Timer buttonTimer7 = new Timer();
    buttonTimer7.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n9.start();

                }
            });
        }
    }, 40000);

    Timer buttonTimer8 = new Timer();
    buttonTimer8.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n10.start();

                }
            });
        }
    }, 45000);

    Timer buttonTimer9 = new Timer();
    buttonTimer9.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n11.start();

                }
            });
        }
    }, 50000);

    Timer buttonTimer10 = new Timer();
    buttonTimer10.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n12.start();

                }
            });
        }
    }, 55000);

    Timer buttonTimer11 = new Timer();
    buttonTimer11.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n13.start();

                }
            });
        }
    }, 60000);


    Timer buttonTimer12 = new Timer();
    buttonTimer12.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n14.start();

                }
            });
        }
    }, 65000);


    Timer buttonTimer13 = new Timer();
    buttonTimer13.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                     n15.start();

                }
            });
        }
    }, 70000);
}
    }

Upvotes: 1

Views: 314

Answers (2)

MemLeak
MemLeak

Reputation: 4640

You can put them in an array or list and access them with Random. Example: Creating an ArrayList:

//Here we create the ArrayList
LinkedList<MediaPlayer> list = new LinkedList<MediaPlayer>(15);
list.add(new MediaPlayer .... // for each element.

Acess this sperated

// now we create the random int
Random r = new Random();
int pointer = r.nextInt(list.size());

// and here we access the "random" MediaPlayer
list.remove(pointer).start(); // gets a random media

where nextInt returns a value between 0 and <=list.size

// edit changed code

Upvotes: 2

Shark
Shark

Reputation: 6620

You cannot with the way your code is now organized...

You should refactor to

`MediaPlayer n = new MediaPlayer[];
n[1] = MediaPlayer.create(this,R.raw.assassin);
//...
n[15] = MediaPlayer.create(this,R.raw.assassin);

and then just pick a random number in interval [0-15) (15 excluded) and play that one.

Furthermore, your code would simplify alot, because only one recurring TimerTask is needed, and every time it would invoke a random number (word). However, this would introduce repeated words - to ensure no word is repeated, add the randomly picked number to a alreadyHeard list, and instead of playing that index simply pick a new one and test it again (in fact, while() pick them until you come up with one that isn't in the alreadyHeard list)

That should get you what you want :)

Upvotes: 0

Related Questions