gpt4 book ai didi

Java 如何等待剪辑结束

转载 作者:行者123 更新时间:2023-12-01 11:06:55 26 4
gpt4 key购买 nike

我正在尝试播放一些小的声音效果,我通过一种方法来执行此操作,该方法加载剪辑,播放它,然后关闭剪辑以允许稍后加载新的声音效果,而不会造成任何影响线路不可用的问题。这是我使用的方法:

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 Hz、16 位、立体声、4 字节/帧、不支持小尾数法的行。 在 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) 在 com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1085) 在 com.sun.media.sound.DirectAudioDevice$DirectClip.open(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) 在 java.awt.Component.processEvent(Component.java:6281) 在 java.awt.Container.processEvent(Container.java:2229) 在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) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747) 在 java.awt.EventQueue.access$300(EventQueue.java:103) 在 java.awt.EventQueue$3.run(EventQueue.java:706) 在 java.awt.EventQueue$3.run(EventQueue.java:704) 在 java.security.AccessController.doPrivileged( native 方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在 java.awt.EventQueue$4.run(EventQueue.java:720) 在 java.awt.EventQueue$4.run(EventQueue.java:718) 在 java.security.AccessController.doPrivileged( native 方法) 在 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()

最佳答案

尝试添加finally block 来关闭连接

最后 { if (clip!= null) {
尝试 { 剪辑.close()
} catch (Exceptione e) {/* 忽略 */}
}

关于Java 如何等待剪辑结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32856163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com