効果音を追加したいJavaベースのゲームを作っています。私は検索して、自分自身がもっと混乱していることに気づきました。コーディングはファイル形式ごとに異なることを私は知っています。いくつかの音が必要です-どのフォーマットでも構いません。だから私に最も簡単なファイル形式を提案してください。コードスニペットは非常に役立ちます。
効果音を提供する最も簡単な形式と方法は何ですか?
効果音を追加したいJavaベースのゲームを作っています。私は検索して、自分自身がもっと混乱していることに気づきました。コーディングはファイル形式ごとに異なることを私は知っています。いくつかの音が必要です-どのフォーマットでも構いません。だから私に最も簡単なファイル形式を提案してください。コードスニペットは非常に役立ちます。
効果音を提供する最も簡単な形式と方法は何ですか?
短い音には、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 ファイルを含む別のサウンドにいつでも変更できます。
mikera と Basilio German が指摘しているように、AU と WAV の両方が、ゲームで使用される短い効果音に適しています。現在の JRE は によって返される型をサポートしていますAudioSystem.getAudioFileTypes()
が、私はこれら 2 つのうちの 1 つに固執します。
この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!");
}
});
}
}
Java は、非常に幅広いサウンド形式をサポートしています。
基本的な Java Sound API (基本的な効果には問題ありません) を使用しているだけの場合は、次の Oracle FAQ が役立つ場合があります。
Java Sound はどのオーディオ形式をサポートしていますか?
Java Sound は、AIFF、AU、および WAV のオーディオ ファイル形式をサポートしています。また、次の MIDI ベースの曲ファイル形式もサポートしています: SMF タイプ 0 (標準 MIDI ファイル、別名 .mid ファイル)、SMF タイプ 1、および RMF。
私はAUとWAVの両方をうまく使いました。
オーディオのファイル形式はすべて、必要なものによって異なります。MIDI ファイルは音符などを使用するため、単純な BGM に適していますが、MIDI ファイルでは爆発や銃声などの特定の音を出すことはできません。MIDI は楽器の音楽と考えてください。効果音には使用されません。ここで WAV または MP3 ファイルの出番です。これらのファイルはサウンドをウェーブとして再生するため、実際にはあらゆるサウンドを再生できます。より大きなファイル (WAV 非圧縮なのでさらに大きい) ですが、効果音によく使用されます。使用する他の形式もあります。検索してください。最も使いやすいものに基づいてサウンド フォーマットを決定するべきではありません。実際には、何に使用しているか (音楽とサウンド エフェクトなど) によって異なります。
Clip クラスを使用し、.Wav または .Au を使用して小さな短いサウンド エフェクトを作成できます。ただし、mp3 音楽を再生しようとしている場合は、javazoom などの mp3 Java ライブラリをいつでも使用できます。