在 Java 中播放 mp3
今天我们就来看看在 Java 中播放 MP3 的方法。Java 的本机库不允许我们播放 MP3 格式的音频,因此这里我们使用两个需要最少设置的外部库。
使用 JLayer
播放 MP3 文件
下面,我们创建一个名为 MP3Player
的类和两个变量,其中第一个是保存要播放的 MP3 文件的名称和路径的字符串,第二个变量是 Player
类的对象 jlPlayer
.然后我们生成类 MP3Player
的构造函数,并将 mp3FileToPlay
字符串作为参数并初始化类变量。
我们创建了一个 play()
方法,该方法接受 mp3FileToPlay
并将其传递给 FileInputStream
的构造函数,后者将文件转换为 InputStream
,然后我们将此 InputStream
对象传递给 BufferedInputStream
以进行转换到 BufferedInputStream
。现在我们将 bufferedInputStream
对象传递给返回一个对象的 Player
类的构造函数。
需要注意的一件事是播放音频的线程会被阻塞,直到音频处理完成。我们不想阻塞主线程,所以我们创建了一个 new Thread()
并在其中调用了 run()
方法。在 run()
方法中,我们调用库的 Player
类附带的 play()
函数。为了启动线程,我们调用线程的 start()
函数。
现在在 main()
方法中,我们用 MP3 文件名初始化 filename
,然后使用在其构造函数中传递的 filename
创建 MP3Player
类的对象。要开始播放音频,我们调用 mp3Player.play()
。之后,我们获取 Scanner
对象并从用户那里获取输入,如果输入等于 stop
,然后我们调用 mp3Player.close()
调用 Player 的
close() 方法
类,它停止音乐。
import javazoom.jl.player.Player;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.Scanner;
public class PlayMP3 {
public static void main(String[] args) {
String filename = "example.mp3";
MP3Player mp3Player = new MP3Player(filename);
mp3Player.play();
Scanner sc = new Scanner(System.in);
System.out.println("Write stop to stop the music: ");
if (sc.nextLine().equalsIgnoreCase("stop")) {
mp3Player.close();
}
}
}
class MP3Player {
private final String mp3FileToPlay;
private Player jlPlayer;
public MP3Player(String mp3FileToPlay) {
this.mp3FileToPlay = mp3FileToPlay;
}
public void play() {
try {
FileInputStream fileInputStream = new FileInputStream(mp3FileToPlay);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
jlPlayer = new Player(bufferedInputStream);
} catch (Exception e) {
System.out.println("Problem playing mp3 file " + mp3FileToPlay);
System.out.println(e.getMessage());
}
new Thread() {
public void run() {
try {
jlPlayer.play();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}.start();
}
public void close() {
if (jlPlayer != null) jlPlayer.close();
}
}
使用 JACo MP3Player
播放 MP3
JACo MP3Player
是一个外部库,我们必须将其包含在我们的项目中才能使用。这是一个非常小的库并且易于集成。在下面的例子中,我们创建了一个 MP3Player
类的对象,它是库中的一个类。我们在 MP3Player 的构造函数中传递了一个 File 对象。我们从 MP3Player
类调用 play()
函数来启动音频。
要停止音频处理,我们首先使用 isStopped()
方法检查音频是否已停止,如果已停止,我们调用 Thread.sleep()
暂停线程一段时间。
import jaco.mp3.player.MP3Player;
import java.io.File;
public class PlayMP3 {
public static void main(String[] args) {
try {
File f = new File("example.mp3");
MP3Player mp3Player = new MP3Player(f);
mp3Player.play();
while (!mp3Player.isStopped()) {
Thread.sleep(5000);
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn