- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
尝试在 java 中播放和音频剪辑,但每次都会弹出此错误。我导入了我需要的所有东西,所以我不确定问题出在哪里。
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream (this.getClass ().getResource ("hopes_and_dreams.wav"));
Clip clip = AudioSystem.getClip ();
clip.open (audioInputStream);
clip.start ();
javax.sound.sampled.LineUnavailableException: Failed to allocate clip data: Requested buffer too large.
at com.sun.media.sound.MixerClip.implOpen(Unknown Source)
at com.sun.media.sound.MixerClip.open(Unknown Source)
at com.sun.media.sound.MixerClip.open(Unknown Source)
at CA_PeterLang.paint(CA_PeterLang.java:828)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
最佳答案
OP 和无法找到方法的问题与显然运行 Java 1.4 的 Ready to Program
IDE 有关。根据 JavaDocs for AudioSystem,Java 1.5 中添加了问题中的 .getClip()
方法。
但是,过去我遇到过系统找不到我的特定发言人的问题,因此以下方法对我有用。请注意,我使用了 URL,但它应该适用于 getResource()
方法。
private Mixer.Info getSpeakers()
{
Mixer.Info speakers = null;
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
for (Mixer.Info mi : mixerInfo) {
// System.out.println(mi.getName() + "\t" +
// mi.getDescription());
if (mi.getName().startsWith("Speakers")) {
speakers = mi;
}
}
System.out.println(
(speakers != null ? speakers.getName() : "<no speakers>"));
return speakers;
}
public void playSound(String soundFile)
{
AudioInputStream ais = null;
try {
URL url = new File(soundFile).toURI().toURL();
ais = AudioSystem.getAudioInputStream(url);
Mixer mixer = AudioSystem.getMixer(getSpeakers());
DataLine.Info dataInfo = new DataLine.Info(Clip.class, null);
Clip clip = (Clip)mixer.getLine(dataInfo);
clip.open(ais);
clip.start();
do {
try {
Thread.sleep(50);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
while (clip.isActive());
}
catch (UnsupportedAudioFileException | IOException |
LineUnavailableException e)
{
e.printStackTrace();
}
}
当使用 playSound("Alarm01.wav")
调用时,它会正确执行。我认为这种方法使用了稍微老一点的方法。
编辑:请不要在这里关注我的名字——它们是为了测试而被黑客攻击的。
编辑 2:foreach
循环可以更改为:
for (int i = 0; i < mixerInfo.length; ++i) {
Mixer.Info mi = mixerInfo[i];
...
编辑 3:用作 InputStream
而不是 URL
,使用
InputStream is = this.getClass().getClassLoader().getResourceAsStream(soundName);
// add a check for null
ais = AudioSystem.getAudioInputStream(is);
编辑 4:此方法适用于 Java 1.4(据我所知)。我不得不修改我的本地机器设置来获得声音,但这是一个不同的问题。
public void playSoundOldJava(String soundFile)
{
try {
InputStream is = this.getClass().getClassLoader().getResourceAsStream(soundFile);
// TODO: add check for null inputsteam
if (is == null) {
throw new IOException("did not find " + soundFile);
}
AudioInputStream ais = AudioSystem.getAudioInputStream(is);
DataLine.Info dataInfo = new DataLine.Info(Clip.class, ais.getFormat());
if (AudioSystem.isLineSupported(dataInfo)) {
Clip clip = (Clip)AudioSystem.getLine(dataInfo);
System.out.println("open");
clip.open(ais);
clip.start();
do {
try {
Thread.sleep(50);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
while (clip.isActive());
}
}
catch (Exception e) {
e.printStackTrace();
}
}
关于java - 在类型 "javax.sound.sampled.AudioSystem"中找不到名为 getClip 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44296395/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!