Вы можете использовать LineListener . Затем зарегистрируйтесь и прослушайте LineEvent.Type.CLOSE .
Кстати, вам лучше использовать SourceDataLine
, чем Clip
. Возможно, это не имеет большого значения, но, учитывая то, что вы написали, может быть слышимая задержка, в зависимости от размера файла, каждый раз, когда вы открываете клип и загружаете весь файл в память (это должно быть выполнено до того, как воспроизведение сможет Начните). SourceDataLine
начнет воспроизведение почти сразу (загружает только один буфер перед началом воспроизведения) и использует только один буфер памяти вместо всего звукового файла.
Многие люди, впервые знакомые с javax.sound.sampled
опасаются использовать SourceDataLine
, но на самом деле это не намного сложнее, чем код Clip
, и для использования, которое вы демонстрируете, это было бы лучше.