3

我正在制作一个基于 Java 的游戏,我想为其添加一些音效。我搜索并发现自己更加困惑。我知道编码因文件格式而异。我只需要一些声音——无论哪种格式。所以请建议我最简单的文件格式。代码片段将非常有帮助。

提供音效最简单的格式和方法是什么?

4

5 回答 5

11

对于短声音,您应该使用 WAV 或 AU,WAV 是最知名的小声音格式。我刚刚完成了这个小程序,你需要做的就是有一个.wav 声音。

该程序生成一个带有按钮的窗口,每次单击该按钮时都会播放指定的声音。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JButton;
import javax.swing.JFrame;

public class PlaySound extends JFrame{

    private Clip clip;

    public static void main(String [] args) {

        PlaySound app = new PlaySound();

    }

    public PlaySound() {
        JButton play = new JButton("Play");//here we make the button
        play.addActionListener(new ActionListener() {//here we tell what the button will do
        public void actionPerformed(ActionEvent e) {
            playTheSound();//when its clicked call this method
        }
    });

    this.add(play);
    this.pack();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
}

private void SoundEffect(URL url) {
    try {
        // Set up an audio input stream piped from the sound file.
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);
        // Get a clip resource.
        clip = AudioSystem.getClip();
        // Open audio clip and load samples from the audio input stream.
        clip.open(audioInputStream);
    } catch (UnsupportedAudioFileException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (LineUnavailableException e) {
        e.printStackTrace();
    }
}

// Play or Re-play the sound effect from the beginning, by rewinding.
public void playTheSound() {

    URL url = getClass().getResource("click.wav");//You can change this to whatever other sound you have
    SoundEffect(url);//this method will load the sound

    if (clip.isRunning())
        clip.stop();   // Stop the player if it is still running
    clip.setFramePosition(0); // rewind to the beginning
    clip.start();     // Start playing

    }

}

您可以随时将“click.wav”更改为其他声音,包括 .au 文件。

于 2012-05-18T02:00:28.933 回答
7

正如 mikera 和 Basilio German 所说,AU 和 WAV 都是游戏中使用的短音效的不错选择。当前的 JRE 支持返回的类型AudioSystem.getAudioFileTypes(),但我会坚持使用这两种类型中的一种。

该类Clip提供了简单的方法来加载和播放声音字节。

作为一个例子,这里是来自Java Sound info 的例子。页

import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;

public class LoopSound {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);
        // loop continuously
        clip.loop(-1);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // A GUI element to prevent the Clip's daemon Thread
                // from terminating at the end of the main()
                JOptionPane.showMessageDialog(null, "Close to exit!");
            }
        });
    }
}
于 2012-05-18T02:16:43.440 回答
4

Java 支持相当广泛的声音格式。

如果您只是使用基本的 Java Sound API(这对于基本效果很好),那么 Oracle 常见问题解答中的以下内容可能会有所帮助:

Java Sound 支持哪些音频格式?
Java Sound 支持以下音频文件格式:AIFF、AU 和 WAV。它还支持以下基于 MIDI 的歌曲文件格式:SMF 类型 0(标准 MIDI 文件,又名 .mid 文件)、SMF 类型 1 和 RMF。

我已经成功地使用了 AU 和 WAV。

于 2012-05-18T01:44:01.757 回答
3

音频的文件格式都取决于您的需要。MIDI 文件使用音符等,因此适用于简单的背景音乐,但 MIDI 文件无法发出特定的声音,如爆炸、枪声等。将 MIDI 视为乐器的音乐,它不用于音效。这是 WAV 或 MP3 文件发挥作用的地方,因为它们以波的形式播放声音,它们可以真正播放任何声音。它们是较大的文件(未压缩的 WAV 甚至更大),但它们经常用于音效。还有其他格式也可以使用,只需四处搜索即可。您不应该将声音格式建立在最容易使用的基础上,它实际上取决于您使用它的确切用途(音乐与音效等)。

于 2012-05-18T01:38:24.810 回答
0

您可以使用 Clip 类并使用 .Wav 或 .Au 来制作短小的声音效果。如果您尝试播放 mp3 音乐,但您始终可以使用 javazoom 之类的 mp3 java 库。

于 2012-05-19T14:11:23.627 回答