我的歌曲表现有问题。我有一个从filechooser加载的音轨列表,放在TableView中并存储在列表(播放器)中。通过getSelectionModel获取所选的音频文件并运行它,到目前为止一切顺利。如果你不停止我选择另一个音频文件并发送给你播放,声音叠加。如何停止执行上一个文件从而避免多重播放?
addFileAudio代码:
Media media;
final List<MediaPlayer> players = new ArrayList<>();
String fileName;
MediaPlayer mediaPlayer;
public void addFileAudio(ActionEvent event) {
BasicFileAttributes attr = null;
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Seleziona il file da caricare");
fileChooser.getExtensionFilters().addAll(
new ExtensionFilter("Audio Files","*.wav","*.mp3"));
File selectedFile = fileChooser.showOpenDialog(new Stage());
if (selectedFile != null) {
media = new Media(new File(selectedFile.getAbsolutePath()).toURI().toString());
mediaPlayer = new MediaPlayer(media);
players.add(mediaPlayer);
MediaView mediaView = new MediaView(mediaPlayer);
mediaView.setMediaPlayer(mediaPlayer);
Path pathFile = Paths.get(selectedFile.toURI());
try {
attr = Files.readAttributes(pathFile, BasicFileAttributes.class);
} catch (IOException e) {
Exception.showError(1);
}
}else{
Exception.showWarning(0);
}
String fileName = selectedFile.getName();
String data = attr.creationTime().toString().substring(0,10);
Table1.getItems().add(new PopulateTable(Table1.getItems().size()+1, fileName, data));
}
代码播放按钮:
void play(ActionEvent event) {
MediaPlayer player = players.get(Table1.getSelectionModel().getSelectedIndex()); Status status = player.getStatus();
if (status!= Status.PLAYING) {
player.play();
} else {
MediaPlayer playerNext = players.get(Table1.getSelectionModel().getSelectedIndex()); player.stop(); playerNext.play(); }
答案 0 :(得分:0)
也许是这样的: 的更新强>
@FXML private ListView lvPlaylist;
MediaPlayer player;
Media pick;
Status status = Status.STOPPED;
String pathToMP3One = "song1.mp3";
String pathToMP3Two = "song2.mp3";
HashMap<String, String> hashmap = new HashMap();
ObservableList<String> items =FXCollections.observableArrayList ();
@FXML
private void handleButtonAction(ActionEvent event) {
switch(status)
{
case STOPPED:
String fileToPlay = hashmap.get(lvPlaylist.getSelectionModel().getSelectedItem().toString());
System.out.println(fileToPlay);
pick = new Media(fileToPlay);
player = new MediaPlayer(pick);
player.play();
status = Status.PLAYING;
break;
case PLAYING:
player.stop();
fileToPlay = hashmap.get(lvPlaylist.getSelectionModel().getSelectedItem().toString());
pick = new Media(fileToPlay);
player = new MediaPlayer(pick);
player.play();
status = Status.PLAYING;
break;
}
}
@FXML
public void addFileAudio(ActionEvent event) {
BasicFileAttributes attr = null;
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Seleziona il file da caricare");
fileChooser.getExtensionFilters().addAll(new ExtensionFilter("Audio Files","*.wav","*.mp3"));
File selectedFile = fileChooser.showOpenDialog(new Stage());
if (selectedFile != null) {
Path pathFile = Paths.get(selectedFile.toURI());
try {
attr = Files.readAttributes(pathFile, BasicFileAttributes.class);
} catch (IOException e) {
System.out.println(e.toString());
}
}else{
System.out.println("hello");
}
hashmap.put(selectedFile.getName(), selectedFile.toURI().toString());
System.out.println("File name: " + selectedFile.getName());
lvPlaylist.getItems().add(selectedFile.getName());
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
lvPlaylist.setItems(items);
}
这对我有用!