Java воспроизводит один и тот же звук поверх другого

Я делаю игру, в меню которой наведен курсор мыши. Однако второй раз, когда звук проигрывается, а первый еще не закончился, второй разрубает первый. Есть ли способ исправить эту проблему?

public static AudioClip menuMouseOver; //creating the audioClip
menuMouseOver = Applet.newAudioClip(new File(soundsLocation+"\\menuMouseOver.wav").toURL()); //loading the sound into the audioClip
menuMouseOver.play(); //calling the audioClip to play.

person Dark Fox    schedule 23.06.2019    source источник
comment
Во-первых, не используйте JApplet, они устарели и больше не поддерживаются, кроме того, использование File в JApplet является анти-шаблоном, это не имеет смысла, поскольку апплеты содержатся в относительно жестком контейнере безопасности, который обычно исключает доступ локальная файловая система   -  person MadProgrammer    schedule 24.06.2019
comment
Вы можете попробовать stackoverflow.com/questions/29836255/ для примера воспроизведения нескольких звуков друг над другом.   -  person MadProgrammer    schedule 24.06.2019


Ответы (1)


AudioClip, Clip, SourceDataLine не настроены для одновременного воспроизведения. Можно создать несколько аудиоклипов или клипов из общего .wav файла, и аудиосистема Java будет смешивать их вместе. Однако в этом случае вам придется хранить в памяти несколько копий звука, а звук получается довольно громоздким.

Но кодировать одновременное воспроизведение одного аудиофайла не так сложно. Относительно простой план - загрузить одну копию файла в память, а затем создать и управлять несколькими «курсорами», которые индексируют эту область памяти для вашего воспроизведения. Аудиоданные от каждого «курсора» можно складывать и выводить через SourceDataLine.

Это план, который я использовал для AudioCue, который должен быть своего рода супер Clip, позволяющим реальным время изменения громкости, панорамирования и высоты тона, а также одновременное воспроизведение. Я считаю, что TinySound - еще одна звуковая библиотека, которая обеспечивает одновременное воспроизведение.

person Phil Freihofner    schedule 25.06.2019