首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中的音效

java中的音效
EN

Stack Overflow用户
提问于 2013-12-03 22:58:51
回答 1查看 17.2K关注 0票数 0

当我的太空船发射一颗子弹时,我一直在试着得到一个简单的"pew“声音。声音是我保存在netbeans项目的主文件夹中的.wav文件。

当我运行代码时,我没有得到任何错误,只是它不能播放声音。

在Main.java中,当鼠标被按下时,它会发射一颗子弹,并且应该会播放声音。Sound.java可以在下面找到。

Main.java

代码语言:javascript
运行
复制
@Override
public void mousePressed(MouseEvent me) {
    Color color = Color.yellow;
    if(tankMissile == null){
        tankMissile = new Missile(launcher.getXofMissileShoot(), launcher.getYofMissileShoot(), color);
        tankMissile.setTarget(launcher.x, 0);
        int size = 2;
        tankMissile.setExplosionMaxSize(size);
        synchronized (gameData.figures) {
            gameData.figures.add(tankMissile);
        }
    }
    new Sound("pew.wav").start();
}

Sound.java

代码语言:javascript
运行
复制
//www.anyexample.com/programming/java/java_play_wav_sound_file.xml
import java.io.*;
import javax.sound.sampled.*;

public class Sound extends Thread{
    private String fileName;

    public Sound(String wavfile){
        fileName = wavfile;
    }

    @Override
    public void run(){
        File soundFile = new File(fileName);
        if(!soundFile.exists()){
            System.err.println("Wave file not found");
        }

        AudioInputStream audioInputStream = null;
        try{
            audioInputStream = AudioSystem.getAudioInputStream(soundFile);
        }
        catch(UnsupportedAudioFileException e){
            e.printStackTrace();
            return;
        }
        catch(IOException e){
            e.printStackTrace();
            return;
        }

        AudioFormat format = audioInputStream.getFormat();
        SourceDataLine auline = null;
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

        try{
            auline = (SourceDataLine) AudioSystem.getLine(info);
            auline.open(format);
        }
        catch(LineUnavailableException e){
            e.printStackTrace();
            return;
        }
        catch(Exception e){
            e.printStackTrace();
            return;
        }

        if(auline.isControlSupported(FloatControl.Type.PAN)){
            FloatControl pan = (FloatControl) auline.getControl(FloatControl.Type.PAN);
        }

        auline.start();
    }
}

我终于让它起作用了。这就是我所做的。

Main.java

代码语言:javascript
运行
复制
@Override
public void mousePressed(MouseEvent me) {
    Color color = Color.yellow;
    if(tankMissile == null){
        tankMissile = new Missile(launcher.getXofMissileShoot(), launcher.getYofMissileShoot(), color);
        tankMissile.setTarget(launcher.x, 0);
        int size = 2;
        tankMissile.setExplosionMaxSize(size);
        synchronized (gameData.figures) {
            gameData.figures.add(tankMissile);
        }

        try {
            playSound("pew.wav");
        } catch (MalformedURLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (LineUnavailableException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedAudioFileException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

稍后在Main.java中

代码语言:javascript
运行
复制
public static void playSound(String fileName) throws MalformedURLException, LineUnavailableException, UnsupportedAudioFileException, IOException{
    File url = new File(fileName);
    Clip clip = AudioSystem.getClip();

    AudioInputStream ais = AudioSystem.
        getAudioInputStream( url );
    clip.open(ais);
    clip.start();
}
EN

Stack Overflow用户

回答已采纳

发布于 2013-12-03 23:20:46

您可以使用此方法播放wav格式。你应该少编辑,并与你的代码混在一起。

代码语言:javascript
运行
复制
public static synchronized void playSound(final String url) {
  new Thread(new Runnable() {
  // The wrapper thread is unnecessary, unless it blocks on the
  // Clip finishing; see comments.
    public void run() {
      try {
        Clip clip = AudioSystem.getClip();
        AudioInputStream inputStream = AudioSystem.getAudioInputStream(
          Main.class.getResourceAsStream("/path/to/sounds/" + url));
        clip.open(inputStream);
        clip.start(); 
      } catch (Exception e) {
        System.err.println(e.getMessage());
      }
    }
  }).start();
}
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20354508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档