我在Stack Overflow上找到了一些可能的答案,但它们已经过时了,看起来它们使用了弃用的技术。
我需要播放一个绝对文件名的mp3文件。
这是我尝试过的:
1。 JavaFX的
MediaPlayer player = new MediaPlayer(new Media(uriString));
我收到java.lang.IllegalStateException: Toolkit not initialized
。
我可能找到初始化该工具包的方法,但我想知道它是否是首选方式。
2。 Intellij UIUtil
final InputStream is = new FileInputStream(fileName);
UIUtil.playSoundFromStream(new Factory<InputStream>() {
@Override
public InputStream create() {
return is;
}
});
我正在Audio format is not yet supported: could not get audio input stream from input file
我做了一些尝试,但这是我记录的。
到目前为止,唯一对我有用的是播放shell中的文件:在Mac上,
Runtime.getRuntime().exec("afplay " + filePath);
但我更喜欢Java解决方案。有什么想法吗?
答案 0 :(得分:2)
JavaFX
您可以在这里查看Getting a mp3 file to play using javafx
在这里,我最喜欢的部分:
您可以使用支持 .mp3 的JLayer。
实施例
new Thread(()->{
try {
FileInputStream file = new FileInputStream("path ..../audio.mp3"); //initialize the FileInputStream
Player player= new Player(file); //initialize the player
player.play(); //start the player
} catch (Exception e) {
e.printStackTrace();
}
}).start();
注意:强>
请注意,如果应用程序不会堆叠,我将使用单独的Thread
原因。
一般来说:
您必须使用外部库来播放Java
中的.mp3等文件(尽管JavaFX
支持.mp3但不支持所有格式)
Java仅支持.wav
虽然这已经足够了。你需要的是一个外部算法来播放其他音乐格式。所有其他格式最初来自.wav,它们会传递给算法,然后繁荣它们变成.ogg,.mp3,.whatever
1.如前所述.mp3
JLayer.jar
您可以将此jar作为外部库导入项目中。
2. JavaZoom还有其他库来支持 .ogg,.speex,.flac,.mp3 ,请点击上面的链接并在那里下载jlGui
项目你可以找到很多格式的库。
链接到stackoverflow How to play .wav files with java
http://alvinalexander.com/java/java-audio-example-java-au-play-sound 不确定它是否仍适用于java 8
代码:
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
public class AudioPlayerExample1 implements LineListener {
/**
* this flag indicates whether the playback completes or not.
*/
boolean playCompleted;
/**
* Play a given audio file.
* @param audioFilePath Path of the audio file.
*/
void play() {
File audioFile = new File("C:/Users/Alex.hp/Desktop/Musc/audio.wav");
try {
AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);
AudioFormat format = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip audioClip = (Clip) AudioSystem.getLine(info);
audioClip.addLineListener(this);
audioClip.open(audioStream);
audioClip.start();
while (!playCompleted) {
// wait for the playback completes
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
audioClip.close();
} catch (UnsupportedAudioFileException ex) {
System.out.println("The specified audio file is not supported.");
ex.printStackTrace();
} catch (LineUnavailableException ex) {
System.out.println("Audio line for playing back is unavailable.");
ex.printStackTrace();
} catch (IOException ex) {
System.out.println("Error playing the audio file.");
ex.printStackTrace();
}
}
/**
* Listens to the START and STOP events of the audio line.
*/
@Override
public void update(LineEvent event) {
LineEvent.Type type = event.getType();
if (type == LineEvent.Type.START) {
System.out.println("Playback started.");
} else if (type == LineEvent.Type.STOP) {
playCompleted = true;
System.out.println("Playback completed.");
}
}
public static void main(String[] args) {
AudioPlayerExample1 player = new AudioPlayerExample1();
player.play();
}
}