如何用javaFX播放多个连续的声音文件?
How to play multiple consecutive sound files with javaFX?
我想使用 javaFX 依次播放 5 个声音文件。我很难连续玩两个以上。此代码只播放前两个声音文件,然后不播放第三个。我希望能够播放最多 5 个声音文件,但没有限制是最理想的。任何帮助表示赞赏。谢谢!
我正在尝试制作一个会说话的时钟来告诉你时间,但我卡在了你让它说话的部分。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class MediaFX extends Application{
MediaPlayer mediaplayer;
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage stage){
Media hello = new Media("file:///C:/Users/Good/Desktop/TimeFiles/one.wav");
Media meow = new Media("file:///C:/Users/Good/Desktop/TimeFiles/oh.wav");
Media neww = new Media("file:///C:/Users/Good/Desktop/TimeFiles/six.wav");
mediaplayer = new MediaPlayer(hello);
mediaplayer.play();
mediaplayer.setOnEndOfMedia(new Runnable(){
@Override
public void run(){
mediaplayer.stop();
mediaplayer = new MediaPlayer(meow);
mediaplayer.setAutoPlay(false);
mediaplayer.play();
}
});
mediaplayer.setOnEndOfMedia(new Runnable(){
@Override
public void run(){
mediaplayer.stop();
mediaplayer = new MediaPlayer(neww);
mediaplayer.setAutoPlay(false);
mediaplayer.play();
}
});
VBox root = new VBox();
root.getChildren().addAll();
Scene scene = new Scene(root,500,500);
stage.setScene(scene);
stage.show();
}
}
您必须找到一种方法来创建某些动作的循环,以便能够实现您想要的。您需要:
- 查找是否还有可播放的歌曲
- 新建MediaPlayer实例并设置下一首歌曲
- 设置在当前歌曲结束后再次检查是否有新歌曲。
- 转到第 1 个
一个很好的方法是递归调用初始化函数,如下所示:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class MediaFX extends Application {
MediaPlayer mediaplayer;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Media hello = new Media(this.getClass().getResource("one.wav").toExternalForm());
Media meow = new Media(this.getClass().getResource("two.wav").toExternalForm());
Media neww = new Media(this.getClass().getResource("three.wav").toExternalForm());
ObservableList<Media> mediaList = FXCollections.observableArrayList();
mediaList.addAll(hello, meow, neww);
playMediaTracks(mediaList);
VBox root = new VBox();
stage.setScene(new Scene(root,300,300));
stage.show();
}
private void playMediaTracks(ObservableList<Media> mediaList) {
if (mediaList.size() == 0)
return;
MediaPlayer mediaplayer = new MediaPlayer(mediaList.remove(0));
mediaplayer.play();
mediaplayer.setOnEndOfMedia(new Runnable() {
@Override
public void run() {
playMediaTracks(mediaList);
}
});
}
}
我想使用 javaFX 依次播放 5 个声音文件。我很难连续玩两个以上。此代码只播放前两个声音文件,然后不播放第三个。我希望能够播放最多 5 个声音文件,但没有限制是最理想的。任何帮助表示赞赏。谢谢! 我正在尝试制作一个会说话的时钟来告诉你时间,但我卡在了你让它说话的部分。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class MediaFX extends Application{
MediaPlayer mediaplayer;
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage stage){
Media hello = new Media("file:///C:/Users/Good/Desktop/TimeFiles/one.wav");
Media meow = new Media("file:///C:/Users/Good/Desktop/TimeFiles/oh.wav");
Media neww = new Media("file:///C:/Users/Good/Desktop/TimeFiles/six.wav");
mediaplayer = new MediaPlayer(hello);
mediaplayer.play();
mediaplayer.setOnEndOfMedia(new Runnable(){
@Override
public void run(){
mediaplayer.stop();
mediaplayer = new MediaPlayer(meow);
mediaplayer.setAutoPlay(false);
mediaplayer.play();
}
});
mediaplayer.setOnEndOfMedia(new Runnable(){
@Override
public void run(){
mediaplayer.stop();
mediaplayer = new MediaPlayer(neww);
mediaplayer.setAutoPlay(false);
mediaplayer.play();
}
});
VBox root = new VBox();
root.getChildren().addAll();
Scene scene = new Scene(root,500,500);
stage.setScene(scene);
stage.show();
}
}
您必须找到一种方法来创建某些动作的循环,以便能够实现您想要的。您需要:
- 查找是否还有可播放的歌曲
- 新建MediaPlayer实例并设置下一首歌曲
- 设置在当前歌曲结束后再次检查是否有新歌曲。
- 转到第 1 个
一个很好的方法是递归调用初始化函数,如下所示:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class MediaFX extends Application {
MediaPlayer mediaplayer;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Media hello = new Media(this.getClass().getResource("one.wav").toExternalForm());
Media meow = new Media(this.getClass().getResource("two.wav").toExternalForm());
Media neww = new Media(this.getClass().getResource("three.wav").toExternalForm());
ObservableList<Media> mediaList = FXCollections.observableArrayList();
mediaList.addAll(hello, meow, neww);
playMediaTracks(mediaList);
VBox root = new VBox();
stage.setScene(new Scene(root,300,300));
stage.show();
}
private void playMediaTracks(ObservableList<Media> mediaList) {
if (mediaList.size() == 0)
return;
MediaPlayer mediaplayer = new MediaPlayer(mediaList.remove(0));
mediaplayer.play();
mediaplayer.setOnEndOfMedia(new Runnable() {
@Override
public void run() {
playMediaTracks(mediaList);
}
});
}
}