如果我沒有弄錯,剪輯會將播放行與音頻數據捆綁在一起。
你打算排隊實際的剪輯?他們多大?這會佔用大量的記憶。如果您要存儲聲音文件的地址,並在播放時製作/加載新的剪輯,則最好使用SourceDataLine,因爲它會更快地啓動。剪輯必須在開始播放之前將整個文件加載到內存中。
以上是用於添加線監聽器的tutorial。我認爲這只是myClip.addLineListener(YourLineListener)。您可以對LineListener進行編碼,以提醒管理隊列的任何事件以啓動下一個剪輯,並對所有剪輯使用相同的LineListener。
或者也許像這樣的東西會有幫助,當您準備好播放隊列時將其稱爲新線程,並讓LineListener成爲播放剪輯的runnable的一部分。
class PlayClipRunnable implements Runnable, LineListener {
private Clip currentClip;
private QueueManager queueManager;
public PlayPadRunnable (Clip currentClip,
QueueManager myQueueManager) {
this.currentClip = currentClip;
this.myQueueManager = myQueueManager;
}
public void run()
{
try
{
currentClip.addLineListener(this);
currentClip.start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public void update(LineEvent event) {
if (event.getType() == LineEvent.Type.STOP) {
queueManager.clipIsStopped();
}
}
}
我不知道什麼時候剪輯應該打開。我也不確定如何放置中斷剪輯的鉤子。也許,如果QueueManager執行currentClip.close(),那將起作用嗎?在這種情況下使currentClip易變可能會有所幫助。但我正在走出自己的深度。
我希望這些想法值得探索,並引導您找到解決方案。