当前位置: 首页 > 面试题库 >

使用javax.sound.sampled.Clip播放,循环播放和停止游戏中的多种声音。意外错误

强金鑫
2023-03-14
问题内容

我正在尝试在游戏中一次播放两个波形声音(背景音乐和效果)。我首先使用Java中的另一个音频处理程序构造了这段代码,该处理程序将处理声音的播放,停止和循环。这种构造只会播放背景音乐或效果,但一次只能播放一次。我环顾互联网,并被告知使用javax.sound.sampled.Clip处理声音,因此重用了相同的构造(播放,停止,循环),但将其切换为使用javax.sound.sampled.Clip。现在我完全迷路了。从到目前为止的内容来看,我已经完成了所有正确的操作,并且在eclipse编辑器中没有出现任何错误,但是当我运行它时,我遇到了两个错误之一。在Eclipse中(在Linux上运行),抛出LineUnavailableException。在Eclipse中(在Windows
7上运行),我在此代码的loop()部分中获得了java.lang.NullPointerException。如果您可以告诉我我做错了什么,或者向我指出一些相关的文档,我将不胜感激。我假设我的代码可以处理异常,但是我不确定。如果您发现其他任何令人毛骨悚然的代码失误,请让我知道我正在努力成为最好的程序员,并真的感谢建设性的批评。感谢您的时间。

    import java.io.File;
    import java.io.IOException;
    import java.net.MalformedURLException;
    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;

    /**
     * Handles play, pause, and looping of sounds for the game.
     * @author Tyler Thomas
     *
     */
    public class Sound {
        private Clip myClip;
        public Sound(String fileName) {
                try {
                    File file = new File(fileName);
                    if (file.exists()) {
                        Clip myClip = AudioSystem.getClip();
                        AudioInputStream ais = AudioSystem.getAudioInputStream(file.toURI().toURL());
                        myClip.open(ais);
                    }
                    else {
                        throw new RuntimeException("Sound: file not found: " + fileName);
                    }
                }
                catch (MalformedURLException e) {
                    throw new RuntimeException("Sound: Malformed URL: " + e);
                }
                catch (UnsupportedAudioFileException e) {
                    throw new RuntimeException("Sound: Unsupported Audio File: " + e);
                }
                catch (IOException e) {
                    throw new RuntimeException("Sound: Input/Output Error: " + e);
                }
                catch (LineUnavailableException e) {
                    throw new RuntimeException("Sound: Line Unavailable: " + e);
                }
        }
        public void play(){
            myClip.setFramePosition(0);  // Must always rewind!
            myClip.loop(0);
            myClip.start();
        }
        public void loop(){
            myClip.loop(Clip.LOOP_CONTINUOUSLY);
        }
        public void stop(){
            myClip.stop();
        }
    }

问题答案:

我能够使代码正常工作,现在对Clips有了更好的了解。该页面对我帮助最大的页面是http://www3.ntu.edu.sg/home/ehchua/programming/java/J8c_PlayingSound.html,它分解了所有内容,并帮助我查看了哪里出错了。这是我的最终工作代码。和以前一样,如果您看到任何可怕的错误或逻辑或样式方面的问题,请告诉我。

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
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;

/**
 * Handles playing, stoping, and looping of sounds for the game.
 * @author Tyler Thomas
 *
 */
public class Sound {
    private Clip clip;
    public Sound(String fileName) {
        // specify the sound to play
        // (assuming the sound can be played by the audio system)
        // from a wave File
        try {
            File file = new File(fileName);
            if (file.exists()) {
                AudioInputStream sound = AudioSystem.getAudioInputStream(file);
             // load the sound into memory (a Clip)
                clip = AudioSystem.getClip();
                clip.open(sound);
            }
            else {
                throw new RuntimeException("Sound: file not found: " + fileName);
            }
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
            throw new RuntimeException("Sound: Malformed URL: " + e);
        }
        catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
            throw new RuntimeException("Sound: Unsupported Audio File: " + e);
        }
        catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("Sound: Input/Output Error: " + e);
        }
        catch (LineUnavailableException e) {
            e.printStackTrace();
            throw new RuntimeException("Sound: Line Unavailable Exception Error: " + e);
        }

    // play, stop, loop the sound clip
    }
    public void play(){
        clip.setFramePosition(0);  // Must always rewind!
        clip.start();
    }
    public void loop(){
        clip.loop(Clip.LOOP_CONTINUOUSLY);
    }
    public void stop(){
            clip.stop();
        }
    }


 类似资料:
  • 我试图在一个游戏中同时播放两个wav声音(背景音乐和一个效果)。我首先使用java中的另一个音频处理程序构造了这段代码,它将处理声音的播放、停止和循环。这种结构将播放背景音乐或效果,但一次只能播放一个。我查看了internet并被告知使用javax.sound.sampled.clip来处理声音,因此重用了相同的构造(播放、停止、循环),但将其切换为使用javax.sound.sampled.cl

  • 如何在曲目播放期间添加CSS类“playSound”?

  • ap.stopBackgroundAudio(CALLBACK) 停止播放音乐。 代码示例 <script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.inc.min.js"></script> <style>.output{ display:block; max-width: 100%;

  • 播放(播放音效/播放录音)

  • 问题内容: 在Python中播放声音文件(.wav)的最简单方法是什么?最简单的说,我指的是最独立的平台,并且需要最少的依赖。pygame当然是一个选择,但听起来似乎有些过分。 问题答案: Snack Sound Toolkit可以播放wav,au和mp3文件。

  • 问题内容: 我正在尝试播放声音,但无法正常工作。 编辑1: 仍然行不通。 编辑2 :此代码有效。我的设备处于静音模式。 问题答案: 对您的代码进行了修改: Swift 3和Swift 4.1: