在 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