Я довольно новичок в использовании звуков, и я могу воспроизводить звук, но у меня возникают проблемы со всеми потоками звукового клипа, которые создает java при воспроизведении звука. Я хотел бы знать, как я получаю все звуки для запуска в одном потоке или умереть, как только это будет сделано.Убивание аудиоролика Заклинание
Я в настоящее время работает этот код, чтобы играть на самом деле звук, создавая новый экземпляр все, когда я называю play()
метод:
private AudioInputStream as;
private Clip c;
public synchronized void play(final SoundType type) {
reset();
try {
as = AudioSystem.getAudioInputStream(getSound(type));
c = AudioSystem.getClip();
c.open(as);
c.start();
} catch (Exception e) {
e.printStackTrace();
}
}
Что я могу сделать с этим, это он позволяет мне воспроизводить сразу несколько звуков, создавая новый экземпляр каждого элемента одновременно. Единственная проблема заключается в том, что он создает несколько потоков в процессе, и программа заканчивается таким количеством потоков при воспроизведении разных звуков.
Есть ли более эффективный метод или одобрение, которое я мог бы выполнить с моим текущим методом, который позволит мне воспроизводить сразу несколько звуков, но в конце он убьет этот поток клипов или, возможно, будет иметь один поток, который обрабатывает все звуки?
Я должен был упомянуть пару других альтернатив: (1) использовать SourceDataLines вместо Clips, поскольку они могут быть настроены для закрытия всех необходимых ресурсов; (2) есть поддержка прослушивания событий, которая будет уведомлять о завершении клипа или SourceDataLine, которые могут быть использованы для закрытия данного потока. Кроме того, если вы только собираетесь воспроизводить звук один раз, лучше использовать SourceDataLine, чем Clip. –