有人能幫我理解下面的代碼爲什麼不起作用嗎?Java剪輯不能正常工作
我通過調用方法start()
開始剪輯。此方法爲剪輯運行創建一個新的線程。但是,不,它似乎沒有發揮任何作用。
的代碼沒有任何錯誤編譯...
public class Audio
{
private Clip clip;
private Thread thread;
public Audio (String audioFile)
{
AudioInputStream audioStream = null;
URL audioURL = this.getClass().getClassLoader().getResource(audioFile);
// Obtain audio input stream from the audio file and load the information
// into main memory using the URL path retrieved from above.
try { audioStream = AudioSystem.getAudioInputStream(audioURL); }
catch (Exception e)
{
e.printStackTrace();
System.exit(1);
}
try
{
// Retrieve the object of class Clip from the Data Line.
this.clip = AudioSystem.getClip();
// Load the audio input stream into memory for future play-back.
this.clip.open(audioStream);
}
catch (LineUnavailableException e)
{
e.printStackTrace();
System.exit(1);
}
catch (IOException e)
{
e.printStackTrace();
System.exit(1);
}
}
public void start()
{
Runnable r = new Runnable() {
public void run()
{
loop();
}
};
thread = new Thread(r);
thread.start();
}
public void loop()
{
// Rewind the media to the beginning of the clip.
this.clip.setFramePosition(0);
// Continuously play the clip.
this.clip.loop(Clip.LOOP_CONTINUOUSLY);
try
{
Thread.sleep(5000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
UPDATE
我發現這個問題!問題是因爲音頻文件。我使用了不同的音頻文件,並且可以用上面的代碼來聽到聲音。
這真的很煩人,代碼編譯沒有任何錯誤或警告。我通過獲取音頻格式來檢測問題,然後將其傳遞給DataLine.Info類。然後,從數據線中檢索剪輯。
因此,通過基本上而不是領夾:
this.clip = AudioSystem.getClip();
我會用得到的片段:
AudioFormat format = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
this.clip = (Clip) AudioSystem.getLine(info);
當我與這個編譯的Java拋出以下錯誤:
No line matching interface Clip supporting format PCM_SIGNED 48000.0 Hz, 24 bit
所以,我更換了音頻文件,它工作!
這是什麼?小程序嗎? –
API顯示了繼承的啓動方法,你有沒有嘗試過(如this.clip.start)? – SleuthEye
如果你在一個線程中全部嘗試,會發生什麼情況? – popgalop