如何在Java中重复音频?

时间:2013-11-06 01:47:24

标签: java applet

这是迄今为止我所拥有的一切。但我不确定这是否是播放音频文件的最佳方式,我也想知道如何重复音频文件。有什么建议吗?

package ponggame;

import java.applet.Applet;

import java.applet.AudioClip;

public class Sound {

    public static final Sound bgMusic = new Sound("/pong.wav");
    public static final Sound hitPaddle = new Sound("/bounce.wav");

    private AudioClip clip;

    public Sound(String fileName) {
        try {
            // gets the sound file that is passed in the constructor
            clip = Applet.newAudioClip(Sound.class.getResource(fileName));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // plays the music, obviously
    public void play() {
        try {
            new Thread() { //multi-tasking stuff
                public void run(){
                        clip.play();

                }
            }.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3 个答案:

答案 0 :(得分:2)

  

我不确定这是否是播放音频的最佳方式

是的,你做得对,假设这是一个小程序。另外,鉴于您不确定AudioClip的使用,您在Sound后面的抽象是抽象的很好用 - 尽管您不需要在单独的线程上启动音频,除非您发现播放中的延迟开始时间不可接受(play()将立即返回并且剪辑将异步播放。)

  

并且还想知道如何重复音频。

AudioClip.loop()。它会在您调用时开始循环播放音频,直到您拨打stop()

答案 1 :(得分:1)

看看我为此做的代码:

import java.net.URL;

import javax.sound.sampled.*;
/**
 * This class is designed to take the filename of a .wav 
 * inside of the com.Game package and turn it into a Clip with a playClip() 
 * method
 * @author michaelsnowden
 *
 */
public class Audio 
{
    URL url;
    Clip clip;
    AudioInputStream ais;

    public Audio(String st)
    {   
        clip = null;

        try{
            AudioInputStream audioIn = AudioSystem.getAudioInputStream( getClass().getResource(st));
            clip = AudioSystem.getClip();
            clip.open(audioIn);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }

    public void playClip()
    {
        if( clip.isRunning() )
        {
            clip.stop();
        }
        clip.setFramePosition( 0 );
        clip.start();
    }
}

老实说,与你正在做的事情没什么不同,但它更有效率,你想要的方法也是内置的。

将此类放入您的包中,然后将.wav文件也放入您的包中。只需拖放它们即可。然后,在Applet中,只需将.wav文件的名称作为字符串实例化此类的对象。例如,Audio catMeow = new Audio("loud_meow.wav")。然后,稍后,catMeow.playClip();

答案 2 :(得分:0)

如果您只是想多次播放音频,可以使用调用while方法的forplay()循环。以下是两者的示例:

    for(int i = 5; i > 0; i--) {   //For loops work like this: int i = 5 (declare the   
          play();//temporary variable); i > 0 (the condition, so as long as i is 
                //larger than 0, the loop will execute); i-- (what to do after each iteration of the loop).
    }

int j = 5;
while(j > 0) {
      play();
      j--;
}

在每种情况下,声音应播放五次 AudioClip.loop();也有效。