gpt4 book ai didi

Java AudioSystem .wav 文件行为差异

转载 作者:行者123 更新时间:2023-12-03 02:23:24 25 4
gpt4 key购买 nike

我有许多从 Java 播放的 .wav 文件。在这个精简的示例中,“滴水”是可以听到的,但“嗖嗖”是听不到的,即使它们通过相同的代码运行。 “swish”似乎没有什么不寻常的地方:它在 Gnome 桌面上播放。我有一个类似的应用程序,不像剥离那样播放“嗖嗖声”而不是“滴水”,所以这似乎不是与数据性质相关的问题。

有什么想法吗?在已知可以工作的代码在重建系统上“重新部署”后发现了这个错误:重新安装了 Ubuntu 10.10 和 Eclipse Indigo。 Sun JDK 6 和 OpenJDK 6 都会出现此错误。编辑 “重建”系统实际上也是不同的硬件:Intel E6500(2 核,2.93 GHz) 我只安装了 Ubuntu、Eclipse、OpenJDK、Sun JDK。以前的系统是带有 Ubuntu、Eclipse、OpenJDK(我认为)的 AMD 630(4 核,2.8 GHz)。

编辑 经过一些试验,似乎加载的第一个剪辑将是有效的。 TestSounder 构造函数加载它们,以便可以颠倒顺序。或许使用静态方法AudioSystem.getLine与它有关,因为这显然是这里的非面向对象操作。

import java.io.IOException;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Clip;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.sound.sampled.LineUnavailableException;

public class TestSounder
{
String resourcePathFromBin = "/resources/";

Clip dripClip;
Clip swishClip;

public TestSounder()
{
dripClip = setupClip("drip.wav");
swishClip = setupClip("swish.wav");
}

public void close()
{
dripClip.close();
swishClip.close();
}

private Clip setupClip(String fileName)
{
Clip clip = null;
try
{
AudioInputStream ais =
AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream(resourcePathFromBin +
fileName));
AudioFormat af = ais.getFormat();
DataLine.Info lineInfo = new DataLine.Info(Clip.class, af);
clip = (Clip)AudioSystem.getLine(lineInfo);
clip.open(ais);
}
catch (UnsupportedAudioFileException e)
{
assert false: "bug";
}
catch (IOException e)
{
assert false: "bug";
}
catch (LineUnavailableException e)
{
assert false: "bug";
}
return clip;
}

public void go(UtilityK.Sounds s)
{
Clip clip = null;
if (s == UtilityK.Sounds.drip)
clip = dripClip;
if (s == UtilityK.Sounds.swish)
clip = swishClip;

clip.stop();
clip.setFramePosition(0);
clip.start();
//while (clip.isRunning())
// TestSounder.delay();
}

public static void main(String[] args)
{
TestSounder obj = new TestSounder();

obj.go(UtilityK.Sounds.swish);
TestSounder.delay();

obj.go(UtilityK.Sounds.drip);
TestSounder.delay();

obj.go(UtilityK.Sounds.swish);
TestSounder.delay();

obj.go(UtilityK.Sounds.drip);
TestSounder.delay();

obj.close();
}

private static void delay()
{
Thread.sleep(5000);
}
}

public interface UtilityK
{
enum Sounds { drip, swish };
}

最佳答案

这是另一种方法。它似乎非常适合作为用户反馈可能需要经常播放或快速连续播放的短声音。

link to a way to play two kinds of beeps that come from .wav files

关于Java AudioSystem .wav 文件行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8778114/

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