Tag: 剪辑

java中的AudioClip和Clip有什么区别?

在我的游戏中,我正在尝试添加sfx和其他声音元素。 我使用AudioClip处理所有事情(BGM,sfx等)。 现在我需要检查sfx是否已经在循环中。 我想知道如果角色靠近门户,则应该循环播放sfx。 如果它超出距离就应该停止。 我读到有一个.isRunning()函数,但就我看来它只能用于Clip。 这是我的代码的一部分。 那么AudioClip和Clip有什么区别? if (hero.getHeroX() > (MAZECOL – 5) * 30 && hero.getHeroY() > (MAZEROW – 4) * 30) if (portalSFX is not in loop) portalSFX.loop(); else portalSFX.stop();

设置Java Clip的音量

有没有办法在Java设置Clip的相应音量? 我有这个方法: public static void play(Clip clip) { if (Settings.getSettings().isVolumeOn()) { FloatControl volume = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); volume.setValue(-1 * Settings.getSettings().getVolume()); clip.start(); } } Settings.getSettings().getVolume()返回0 – 100范围内的Integer 卷: 0:没有声音 40:带耳机的最佳声音 60:最佳声音 100:完整的声音 所以基本上这应该像VLC的规模(但是一半,因为VLC从0 to 200 )。 我发现我可以通过使用volume.setValue(-10f);来减少剪辑的分贝volume.setValue(-10f); 但我更喜欢某种类型的卷volume.setValue(clip.getMaxVolume() * Settings.getSettings().getVolume()/100) 。 其中clip.getMaxVolume()将返回剪辑的最大音量。

Java剪辑不起作用

有人可以帮我理解为什么下面这段代码不起作用? 我通过调用方法start()启动剪辑。 此方法为剪辑创建一个新线程以运行。 然而,不,它似乎没有发挥任何作用。 编译代码时没有任何错误…… public class Audio { private Clip clip; private Thread thread; public Audio (String audioFile) { AudioInputStream audioStream = null; URL audioURL = this.getClass().getClassLoader().getResource(audioFile); // Obtain audio input stream from the audio file and load the information // into main memory using the URL path retrieved from above. try { audioStream […]

音频不会在Jar中播放,但会在eclipse中播放

当我运行JAR时,声音不会播放,但是当我在eclipse中运行它时它就会播放。 这是我加载剪辑的地方: public void init(){ System.out.println(“grabbing Music”); String currentDir = new File(“”).getAbsolutePath(); name=new File(currentDir+”\\music\\”).list(); clip=new Clip[name.length]; soundFile=new File[name.length]; for(int x=0;x<name.length;x++){ System.out.println(currentDir+"\\music\\"+name[x]); try { soundFile[x]= new File(currentDir+"\\music\\"+name[x]); AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile[x]); DataLine.Info info= new DataLine.Info(Clip.class, sound.getFormat()); clip[x] = (Clip) AudioSystem.getLine(info); clip[x].open(sound); clip[x].addLineListener(new LineListener(){ public void update(LineEvent event) { if (event.getType() == LineEvent.Type.STOP) { event.getLine().close(); } } […]

Javas Audio的问题剪辑频繁播放哔声

我想播放短蜂鸣声(WAV文件)成功和GUI触发动作的错误。 我遇到了javax.sound.sampled.Clip ,它似乎有效。 这是我使用的基本代码: clip.stop(); clip.setFramePosition(0); clip.start(); 在按钮单击触发数据库操作后执行此操作。 在成功和错误时,播放两个不同的预加载剪辑。 但是在生产机器(运行Kubuntu 10.4的旧PC)一段时间后(大约400多次执行或2-4小时),剪辑拒绝播放。 停止方法需要大约3秒才能终止,并且后续启动操作不会播放任何声音。 以下每次调用代码都会失败,而不会抛出exception或任何其他反馈。 解决这个问题的唯一方法是重新启动整个应用程序。 我的问题是:有没有解决方法? 还有其他人有同样的问题吗? 或者是否有另一个框架可用于播放至少两种不同的声音(Toolkit.beep()只能播放一种声音)。

歌曲是第一次播放但是一旦停止播放就不播放:用Java剪辑

我在Java中使用Clip来播放如下歌曲: MR.clip= (Clip) AudioSystem.getLine(MR.info[docIdOfSelectedSong]); MR.clip.open(MR.sounds[docIdOfSelectedSong]); MR.clip.setMicrosecondPosition(5* 1000000); MR.clip.start(); 其中MR.sounds是AudioInputStream类型的数组,MR.info是DataLine.info类型的数组。 当我按下按钮时,上面的代码被调用来播放歌曲。 此外,我有另一个按钮来停止调用以下代码的歌曲 public static void stopSong(){ MR.clip.close(); } 问题是,当我第一次播放歌曲时,播放和停止按钮工作正常。 但是,当我第二次尝试播放这首歌时,我听不到这首歌。 什么是错误的任何建议?

libgdx ScissorStack没有按预期工作

我正在尝试创建各种各样的“进度条”,但裁剪似乎不像我期望的那样工作。 这是我做错了什么还是我误解了什么? 应该剪切的draw()例程: @Override public void draw(SpriteBatch batch, float parentAlpha) { Rectangle scissors = new Rectangle(); Rectangle clipBounds = new Rectangle(getX(), getY(), getWidth() * 0.75f, getHeight()); ScissorStack.calculateScissors( getStage().getCamera(), getStage().getGutterWidth(), getStage().getGutterHeight(), getStage().getCamera().viewportWidth, getStage().getCamera().viewportHeight, batch.getTransformMatrix(), clipBounds, scissors); if (ScissorStack.pushScissors(scissors)) { super.draw(batch, parentAlpha); ScissorStack.popScissors(); } } } 完成ClipTest组类, TestScreen和屏幕截图的示例代码。 ClipTest是用于演示“bug”的组的子类。 ClipImage是Image的子类,它在draw()上执行剪切。 ClipTest有2个图像,背景和前景。 背景是黑色图像,它应始终是进度条的完整大小。 前景是白色图像,其宽度根据条形图的百分比进行裁剪。 我发现的奇怪结果是虽然前景是使用剪辑类,但背景图像是实际剪裁的图像。 预期的结果是使用photoshop创建的(因为我无法通过代码生成它)。 知道什么是错的吗?

Java同时播放多个剪辑

因此,每次单击面板时,我的应用程序都应该播放WAV文件。 但现在的问题是,它在第​​二个播放之前等待第一个完成。 我希望能够让他们同时玩。 我把Thread.sleep(500)的原因是因为如果我没有,那么它根本不会播放声音:( import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.FloatControl; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; import javax.swing.JFrame; @SuppressWarnings(“serial”) public class SoundEffectPlayer extends JFrame { /* * Jframe stuff */ public SoundEffectPlayer() { this.setSize(400, 400); this.setTitle(“Mouse Clicker”); this.addMouseListener(new Clicker()); this.setVisible(true); } private class Clicker extends […]

自定义边框外的组件绘画

在这个自定义边框类中,我定义了一个RoundRectangle2D形状。 此对象用于绘制边框。 不幸的是,由于JComponent的paint方法在paintBorder之前调用paintComponent ,因此将Graphics剪辑设置为RoundRectangle2D形状没有任何效果; 即使我发出repaint 。 因此,组件将在其边界外部绘制,这是可以理解的不合需要的。 所以,我想知道:如何让组件专门在自定义边框内绘制? 我考虑的一种方法是在paintComponent方法中获取组件的Border对象。 然后将此对象转换为适当的类,其中我定义将影响剪辑的参数。 但这似乎不是一个“声音”设计。 编辑 – import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.RenderingHints; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.border.AbstractBorder; class JRoundedCornerBorder extends AbstractBorder { private static final long serialVersionUID = 7644739936531926341L; private static final int […]

使用Clip对象播放多个声音片段

我正在开发一个包含大量JButton对象的程序,我希望每个对象都有自己的.wav文件。 此外,我希望声音以某种方式工作,使得它们可以与其他按钮的声音重叠,但它不能与自身重叠(在播放声音时单击按钮将重新启动声音)。 我尝试使用一个Clip对象,但我无法完成上面所说的内容。 结果,我使用每个按钮声明一个新的Clip对象,但我觉得这对我的问题来说是一个相当低效的解决方案。 如何以最有效的方式完成我在第一段中所述的内容?