Reputation: 55
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
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
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