每次完成后,我只想回圈播放音頻。我不得不說這只是背景音樂,它在一個執行緒中運行。這是代碼:
package Generator;
import javazoom.jl.player.Player;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javazoom.jl.decoder.JavaLayerException;
public class Reproductor {
Player reproductor;
public void reproducir() throws FileNotFoundException, JavaLayerException {
reproductor = new Player(new FileInputStream("C:\\Users\\Leonardo\\Desktop\\config generator\\Recursos\\Triage at dawn.mp3"));
new Thread () {
@Override
public void run() {
try {
reproductor.play(); //This just play the audio for the first time.
} catch (JavaLayerException ex) {
}
}
}.start();
}
public void parar() {
if(reproductor != null) {
reproductor.close();
}
}
uj5u.com熱心網友回復:
我找到了源代碼:https : //github.com/umjammer/jlayer/tree/master/src/main/java/javazoom/jl/player/advanced
您應該使用 aAdvancedPlayer而不是 a Player。它允許您注冊一個PlaybackListener,PlaybackEvent當音樂停止時它將收到一個。
這段代碼應該可以解決問題:
package Generator;
import javazoom.jl.player.Player;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javazoom.jl.decoder.JavaLayerException;
public class Reproductor {
Player reproductor;
public void reproducir() throws FileNotFoundException, JavaLayerException {
reproductor = new Player(new FileInputStream("C:\\Users\\Leonardo\\Desktop\\config generator\\Recursos\\Triage at dawn.mp3"));
PlaybackListener myListener = new PlaybackListener() {
public void playbackStarted(PlaybackEvent evt){
// Do nothing
}
public void playbackFinished(PlaybackEvent evt){
// Restart
reproductor.play();
}
};
reproductor.setPlayBackListener( myListener );
new Thread () {
@Override
public void run() {
try {
reproductor.play(); //This just play the audio for the first time.
} catch (JavaLayerException ex) {
}
}
}.start();
}
public void parar() {
if(reproductor != null) {
reproductor.close();
}
}
uj5u.com熱心網友回復:
我有一個解決方案。創建一個新的 java 檔案并命名它。然后執行以下代碼:
class Main{
public static void main(String[] args)
{
int length = 10000000000, numberOfTimes = 5;
Reproducer reproducer = new Reproducer();
for(int j =0;j < numberOfTimes;i ){
reproducer.reproducir();
for(int i =0;i < length;i ){}
}
}
}
uj5u.com熱心網友回復:
我看到您正在使用 Javazoom。
查看我在 github 上找到的這個庫的檔案,有一個類應該可以更好地作業:AdvancedPlayer與PlaybackListener結合使用。
如果這與 Java 中的大多數偵聽器類似,則可以將其設定為感知音頻何時結束,并在該事件上呼叫另一個播放。我已經很久沒有使用這個庫了,我所做的只是將 ogg/vorbis 檔案轉換為 PCM,所以我無法幫助您提供所需的特定代碼。
如果你可以使用 wav 檔案,那么使用 Java 的Clip類和它的loop()方法會容易得多。可以使用Audacity等工具將 mp3 檔案轉換為 wav ,如果您的應用程式可以預先準備好資產。
如果您確切地知道要播放什么代碼,另一種可能性是確定某些標題資訊中可能存在的長度,或者再次通過在Audacity 中打開它,并將持續時間資訊存盤在您的專案中。然后,對于播放代碼,Thread.sleep()為回圈前的持續時間添加一個。這可能不是很可靠。
uj5u.com熱心網友回復:
當我試圖解決一些問題時,我找到了一種更簡單的方法。檢查此鏈接以獲取 解決方案。我的代碼是這樣結束的:
package Generator;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class Reproductor extends Thread{
private String ruta;
private boolean bucle;
private Player reproductor;
public Reproductor(String ruta, boolean bucle) {
this.ruta = ruta;
this.bucle = bucle;
}
public void run() {
try {
do{
FileInputStream buff = new FileInputStream(ruta);
reproductor = new Player(buff);
reproductor.play();
try {
reproductor.play();
} catch (JavaLayerException ex) {}
}while(bucle);
} catch(FileNotFoundException | JavaLayerException ioe) {}
}
public void parar() {
bucle = false;
reproductor.close();
this.interrupt();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/382169.html
