Ich möchte gerne mehrere VoiceDateien nacheinander abspielen.
Das häufig gepostete Beispiel mit der rekrusiven Funktion läuft bei mir nicht stabil.
Dann habe ich versucht die Dateien zu verketten, auch da gab es diverse Probleme
a. nur immer zwei können verkettet werden
b. alle Soundparameter müssen übereinstimmen, was nicht zu gewährleisten ist.
Also habe ich Threads versucht, ging auch ganz gut, leider werden immer nur zwei der vier nacheinander abgespielt. Es laufen dann also gleichzeitig zwei Sounds ab.
In dem Zusammenhang hatte ich auch syncronize ausprobiert, aber das habe ich glaube ich nicht korrekt verwendet. Hier mal mein Code und zwei Fragen:
a. gibt es einen Weg die Threads nacheinander laufen zu lassen
b. wenn Syncronize, kann ich die innere Klasse syncronizen, und wenn ja wie
Das häufig gepostete Beispiel mit der rekrusiven Funktion läuft bei mir nicht stabil.
Dann habe ich versucht die Dateien zu verketten, auch da gab es diverse Probleme
a. nur immer zwei können verkettet werden
b. alle Soundparameter müssen übereinstimmen, was nicht zu gewährleisten ist.
Also habe ich Threads versucht, ging auch ganz gut, leider werden immer nur zwei der vier nacheinander abgespielt. Es laufen dann also gleichzeitig zwei Sounds ab.
In dem Zusammenhang hatte ich auch syncronize ausprobiert, aber das habe ich glaube ich nicht korrekt verwendet. Hier mal mein Code und zwei Fragen:
a. gibt es einen Weg die Threads nacheinander laufen zu lassen
b. wenn Syncronize, kann ich die innere Klasse syncronizen, und wenn ja wie
Code:
public void handletrainyourvoicedone () throws InterruptedException {
// play your and teachervoice
//Media tsound = new Media(workingDir + fs + vokidtest + ".mp3");
URL inputUrl = getClass().getResource("/FILESOURCE/teacher.wav");
String tvoice = inputUrl.toString();
inputUrl = getClass().getResource("/FILESOURCE/you.wav");
String svoice = inputUrl.toString();
Media sayteacher = new Media(tvoice);
Media teachervoice = new Media(new File(workingDir + fs + vokidtest + ".mp3").toURI().toString());
Media sayyou = new Media(svoice);
Media yourvoice = new Media(new File(workingDir + fs + "U" + userid + ".wav").toURI().toString());
// ObservableList<Media> voiceList = FXCollections.observableArrayList();
// voiceList.addAll(sayteacher, teachervoice, sayyou, yourvoice );
//
// playVoiceList(voiceList);
PlayVoiceThread st = new PlayVoiceThread(sayteacher);
PlayVoiceThread tv = new PlayVoiceThread(teachervoice);
PlayVoiceThread sy = new PlayVoiceThread(sayyou);
PlayVoiceThread yv = new PlayVoiceThread(yourvoice);
st.start();
try {
st.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
tv.start();
try {
tv.join(timerecording);
} catch (InterruptedException e) {
e.printStackTrace();
}
sy.start();
try {
sy.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
yv.start();
try {
yv.join(timerecording);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static class PlayVoiceThread extends Thread {
private final Media voicefile;
public PlayVoiceThread(Media mediafile) {
this.voicefile = mediafile;
}
public void run() {
MediaPlayer mediaplayer = new MediaPlayer(voicefile);
mediaplayer.play();
mediaplayer.setOnEndOfMedia(new Runnable() {
@Override
public void run() {
System.out.println("bin da !");
mediaplayer.dispose();
}
});
}
}