Если я не ошибаюсь, клип связывает строку воспроизведения с аудиоданными.
Планируете ли вы поставить в очередь реальные клипы?Насколько они большие?Это может занять много памяти.Если вы сохраняете адреса звуковых файлов и делаете / загружаете новые клипы во время воспроизведения, вам может быть лучше использовать SourceDataLine, поскольку он будет запускаться быстрее.Клип должен загрузить весь файл в память, прежде чем он сможет начать воспроизведение.
Выше учебник для добавления слушателя строки.Я думаю, что это просто myClip.addLineListener (YourLineListener).Вы можете закодировать LineListener для оповещения любого управляющего Очередью, чтобы запустить следующий клип, и использовать этот же LineListener для всех клипов.
Или, может быть, что-то подобное будет полезно, вызвать его в новом потокекогда вы готовы воспроизвести очередь и хотите, чтобы LineListener был частью исполняемого файла, который воспроизводит клип.
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, который будет изменчивым.Но я выхожу из своей глубины.
Я надеюсь, что идеи заслуживают изучения и приведут вас к вашему решению.