faire deux choses à exactement en même temps est ..difficult. Dans un environnement à un seul thread, le système d'exploitation doit sauter entre les threads pour les simuler en même temps. Donc, pour pouvoir les exécuter en même temps, vous devez démarrer deux threads et attendre qu'ils arrivent au point où ils doivent être synchronisés, puis laisser les deux threads maintenant qu'ils doivent continuer.
Une autre solution consisterait à fusionner les deux flux sonores de sorte que cela ressemble à deux sons en cours de lecture. Bien que je ne suis pas très compétent dans la manipulation du son, et certainement pas sur Android ...
Une solution pour le premier serait de générer deux threads, démarrez-les tous les deux, puis utilisez un wait()
et notify()
pour les appeler MediaPlayer.start()
en même temps, éventuellement avec la classe Lock.
Ok, donc un long exemple de la façon de synchroniser deux threads (basés sur here sont:
import java.util.concurrent.locks.*;
class SynchronizeTest implements Runnable {
public static void main(String[] args) {
final ReentrantLock lock = new ReentrantLock();
final Condition cond = lock.newCondition();
new Thread(new SynchronizeTest(1, lock, cond)).start();
new Thread(new SynchronizeTest(2, lock, cond)).start();
}
private final int number;
private final ReentrantLock lock;
private final Condition cond;
public SynchronizeTest(int number, ReentrantLock lock, Condition cond) {
this.number = number;
this.lock = lock;
this.cond = cond;
}
public void run() {
try {
if (number == 1) {
put();
}
else {
take();
}
}
catch (InterruptedException ie) { }
}
public void put() throws InterruptedException {
lock.lock();
try {
cond.await();
} finally {
lock.unlock();
}
System.out.println(number);
}
public void take() throws InterruptedException {
lock.lock();
// wait for put to take the lock
Thread.sleep(300);
try {
cond.signal();
} finally {
lock.unlock();
}
System.out.println(number);
}
}
Cela peut probablement être codé beaucoup plus simple, mais je n'ai pas fait beaucoup de Java codage ces derniers temps .. :-(
Comment voulez-vous dire "retardé", est que secondes, microsecondes, dix secondes? A quelle distance les uns des autres voulez-vous qu'ils soient joués, * exactement * en même temps, et pas un instant plus tôt? – Patrick
Très court ... microsecondes. Je veux qu'ils soient joués exactement en même temps oui. – james
Je voulais dire quand ils ont joué, ils ont été retardés un peu dans l'autre. Je veux juste qu'ils jouent tous les deux à la même heure. – james