Я работал над программой SoundSort , основанной на JavaFX 8, которая отображает и позволяет пользователю воспроизводить аудиоклипы. JavaFX 8_191 (последняя версия Java 8), похоже, содержит ошибку при воспроизведении аудио. Воспроизведение аудио отлично работает в JavaFX 8_131, но в версии 8_191 звук не воспроизводится без ошибок. У кого-нибудь есть обходной путь для JavaFX 8_191? Я понимаю, что переход на JavaFX 11 мог бы решить проблему, но многие библиотеки и т. Д. Все еще основаны на Java 8, поэтому на данный момент гораздо предпочтительнее придерживаться версии 8, однако требование пользователей установить конкретную версию JRE не является идеальным ,
Пример кода ниже демонстрирует проблему. Если запустить с использованием JR 8_131, он работает просто отлично. При запуске в JRE 8_191 воспроизведение звука не происходит. Используемый аудиофайл (горбатый кит) здесь для удобства. Обратите внимание, что аналогичный класс MediaPlayer не работает ни для воспроизведения. Заранее благодарю за любую помощь.
import java.io.File;
import javafx.beans.property.DoubleProperty;
import javafx.scene.media.AudioClip;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
/**
* Standard audio playing which simply stores a file path to play from. This
* should be able to play multiple types of audio file.
*
* @author Jamie Macaulay
*
*/
public class StandardAudioPlay{
/**
* The audio file.
*/
private File audioFile;
/**
* The Media player.
*/
private AudioClip mediaPlayer;
/**
* Constructor for standard audio playing.
* @param file - the audio fi;le
*/
public StandardAudioPlay(File file) {
this.audioFile=file;
}
public void playClipAudio() {
System.out.println("Play: " + getMediaPlay().getSource());
getMediaPlay().play();
}
private AudioClip getMediaPlay() {
if (mediaPlayer==null) {
mediaPlayer = new AudioClip (audioFile.toURI().toString());
}
return mediaPlayer;
}
public void stopClipAudio() {
if (mediaPlayer!=null) mediaPlayer.stop();
}
/**
* Get the volume property.
* @return the volume property
*/
public DoubleProperty getVolumePropery() {
return getMediaPlay().volumeProperty();
}
/**
* Tests audio playing
* @param args
*/
public static void main(String[] args) {
File audioFile = new File("Ish_Humpback_whale20180829_231613_092.wav");
StandardAudioPlay standardAudioPlay = new StandardAudioPlay(audioFile);
standardAudioPlay.getMediaPlay().volumeProperty().set(1);
System.out.println("Play audio: ");
standardAudioPlay.playClipAudio();
try {
Thread.sleep(3000); // 3 second clip
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Finished audio: ");
}
}