2012-05-18 4 views
4

Я делаю игру на основе Java, для которой хочу добавить некоторые звуковые эффекты. Я искал и смутился. Я знаю, что кодировка отличается от формата файла для форматирования. Мне просто нужны звуки - неважно, какой формат. Поэтому, пожалуйста, предложите мне самый простой формат файла. Фрагмент кода будет очень полезен.Какой формат звука следует использовать для java?

Что такое самый простой формат и способ обеспечения звуковых эффектов?

ответ

12

для коротких звуков, вы должны использовать 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.

3

Форматы файлов для аудио все зависит от того, что вам нужно. MIDI-файл использует заметки и т. Д., И поэтому подходит для простой фоновой музыки, но файл MIDI не сможет создавать определенные звуки, такие как взрывы, стрельба, что бы это ни было. Подумайте о MIDI в качестве музыки для музыкальных инструментов, она не используется для звуковых эффектов. Здесь воспроизводятся файлы WAV или MP3, поскольку они воспроизводят звук как волну, на которой они могут воспроизводить любой звук. Они - большие файлы (WAV несжатые, так даже большие), но они часто используются для звуковых эффектов. Существуют и другие форматы, которые можно использовать, просто выполните поиск. Вы не должны основывать звуковой формат на том, что проще всего использовать, это действительно зависит от того, что именно вы используете для него (музыка против звуковых эффектов и т. Д.).

4

Java поддерживает довольно широкий спектр звуковых форматов.

Если вы используете только основной Java Sound API (который прекрасно подходит для базовых эффектов), то следующий может быть полезным из FAQ Oracle:

Что аудио форматов делает поддержку Java Sound?
Java Sound поддерживает следующие форматы аудиофайлов: AIFF, AU и WAV. Он также поддерживает следующие форматы файлов MIDI на основе MIDI: тип SMF 0 (стандартный MIDI-файл, aka .mid-файлы), SMF-тип 1 и RMF.

Я успешно использовал AU и WAV.

8

As mikera & Basilio German note, оба AU & WAV будет хорошим выбором для коротких звуковых эффектов, используемых в играх. Текущий JRE поддерживает типы, возвращаемые AudioSystem.getAudioFileTypes(), но я бы придерживался одного из этих двух.

Класс Clip предоставляет простые способы загрузки и воспроизведения звуковых байтов.

Как к примеру, вот пример из Java Sound info. page.

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!"); 
      } 
     }); 
    } 
} 
+0

Спасибо, что хорошо сработал, я изучу его .. –

0

Вы можете использовать класс Clip и использовать WAV или .Au для небольших коротких звуковых эффектов. если вы пытаетесь воспроизводить музыку в формате mp3, но вы всегда можете использовать библиотеку mp3 java, такую ​​как javazoom.