2015-09-30 2 views
0

Я пытаюсь воспроизвести несколько небольших звуковых эффектов, и я делаю это с помощью метода, который загружает клип, воспроизводит его, и затем должен закрыть клип, чтобы разрешить новый один для загрузки позже, без каких-либо проблем с 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() после завершения клипа?

+1

Вы можете использовать 'Клип # drain', но я имел проблемы с использованием этого в прошлом, и вместо этого использовать' LineListener' вместо этого, для [пример] (http://stackoverflow.com/questions/29836255/playing-multiple-sound-clips-using-clip-objects/29836764#29836764) – MadProgrammer

ответ

1

Попробуйте добавить, наконец, блок закрыть соединение

finally { if (clip!= null) { try { clip.close() } catch (Exceptione e) { /* ignored */} }

Смежные вопросы