Я пытаюсь воспроизвести несколько небольших звуковых эффектов, и я делаю это с помощью метода, который загружает клип, воспроизводит его, и затем должен закрыть клип, чтобы разрешить новый один для загрузки позже, без каких-либо проблем с LineUnavailable. Вот метод я использую:Java Как подождать окончания клипа
public void playClip(String filename){
Clip clip = null;
try{
AudioInputStream inputStream = AudioSystem.getAudioInputStream(getClass().getResource(filename));
AudioFormat format = inputStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
clip = (Clip)AudioSystem.getLine(info);
clip.open(inputStream);
clip.start();
}catch(Exception e){
e.printStackTrace();
}
}
Прямо сейчас, после clip.start()
, клип просто остается где-то, используя до линии, пока я получаю следующее сообщение об ошибке:
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:513)
at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1304)
at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:121)
at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1085)
at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1175)
at com.andrewlalisofficial.ChatClientCore.playClip(ChatClientCore.java:233)
at com.andrewlalisofficial.ChatClientWindow$4.mouseClicked(ChatClientWindow.java:207)
at java.awt.Component.processMouseEvent(Component.java:6519)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3312)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:706)
at java.awt.EventQueue$3.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:720)
at java.awt.EventQueue$4.run(EventQueue.java:718)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
javax.sound.sampled. LineUnavailableException: строка с форматом PCM_SIGNED 44100.0 Гц, 16 бит, стерео, 4 байта/фрейм, мало-endian не поддерживается. на com.sun.media.sound.DirectAudioDevice $ DirectDL.implOpen (DirectAudioDevice.java:513) на com.sun.media.sound.DirectAudioDevice $ DirectClip.implOpen (DirectAudioDevice.java:1304) на com.sun. media.sound.AbstractDataLine.open (AbstractDataLine.java:121) at com.sun.media.sound.DirectAudioDevice $ DirectClip.open (DirectAudioDevice.java:1085) at com.sun.media.sound.DirectAudioDevice $ DirectClip. открытый (DirectAudioDevice.java:1175) в com.andrewlalisofficial.ChatClientCore.playClip (ChatClientCore.java:233) в com.andrewlalisofficial.ChatClientWindow $ 4.mouseClicked (ChatClientWindow.java:207) в java.awt.Component.processMouseEvent (Component.java:6519) в javax.swing.JComponent.processMouseEvent (JComponent.java : 3312) at java.awt.Component.processEvent (Component.java:6281) at java.awt.Container.processEvent (Container.java:2229) at java.awt.Component.dispatchEventImpl (Component.java:4872) на java.awt.Container.dispatchEventImpl (Container.java:2287) на java.awt.Component.dispatchEvent (Component.java:4698) на java.awt.LightweightDispatcher.retargetMouseEvent (Container.java:4832) на java.awt.LightweightDispatcher.processMouseEvent (Container.java:4501) в java.awt.LightweightDispatcher.dispatchEvent (Container.java:4422) в java.awt.Container.dispatchEventImpl (Container.java:2273) на Java .awt.Window.dispatchEventImpl (Window.java:2719) в java .awt.Component.dispatchEvent (Component.java:4698) at java.awt.EventQueue.dispatchEventImpl (EventQueue.java:747) at java.awt.EventQueue.access $ 300 (EventQueue.java:103) в java. awt.EventQueue $ 3.run (EventQueue.java:706) at java.awt.EventQueue $ 3.run (EventQueue.java:704) at java.security.AccessController.doPrivileged (собственный метод) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java:76) at java.security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java:87) at java.awt.EventQueue $ 4.run (EventQueue.java:720) at java.awt. EventQueue $ 4.run (EventQueue.java:718) в java.security.AccessController.doPrivileged (собственный метод) в java.security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java:76) в java.awt.EventQueue.dispatchEvent (EventQueue.java:717) в java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:242) на java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:161) в java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:150) в java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:146) на Java .awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:138) в java.awt.EventDispatchThread.run (EventDispatchThread.java: 91)
Как бы добавить clip.close()
после завершения клипа?
Вы можете использовать 'Клип # drain', но я имел проблемы с использованием этого в прошлом, и вместо этого использовать' LineListener' вместо этого, для [пример] (http://stackoverflow.com/questions/29836255/playing-multiple-sound-clips-using-clip-objects/29836764#29836764) – MadProgrammer