Java小程序播放多个.wav文件

Java小程序播放多个.wav文件,java,applet,Java,Applet,您好,我正在尝试创建一个简单的游戏,现在我正在尝试添加一些歌曲,以便在游戏期间在后台播放,可以根据玩家的意愿停止和跳过这些歌曲。我看的每一个地方似乎都无法使示例代码正常工作。唯一有效的示例只能在循环中播放一个文件 public void loadmedia () { song1 = getAudioClip (getCodeBase (), "song1.au"); song1.play (); song2 = getAudioClip (getCodeBase (),

您好,我正在尝试创建一个简单的游戏,现在我正在尝试添加一些歌曲,以便在游戏期间在后台播放,可以根据玩家的意愿停止和跳过这些歌曲。我看的每一个地方似乎都无法使示例代码正常工作。唯一有效的示例只能在循环中播放一个文件

public void loadmedia ()
{
    song1 = getAudioClip (getCodeBase (), "song1.au");
    song1.play ();

    song2 = getAudioClip (getCodeBase (), "song2.au");
            song2.play ();
}

song1将正常播放,但song2将不起任何作用,即使我用按钮告诉song1停止播放song2。

当您需要更改背景歌曲时?还是在歌曲1结束后,歌曲2开始? 很抱歉,我可以添加它作为评论,因为我的声誉<50 此代码用于在组合框中选择几首歌曲。试试看。如果它不适合你。再问我一次:

希望你喜欢

import java.applet.AudioClip;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.awt.GridBagLayout;

public class SoundApplication extends JPanel
                          implements ActionListener,
                                     ItemListener {
SoundList soundList;
String auFile = "spacemusic.au";
String aiffFile = "flute+hrn+mrmba.aif";
String midiFile = "trippygaia1.mid";
String rmfFile = "jungle.rmf";
String wavFile = "bottle-open.wav";
String chosenFile;

AudioClip onceClip, loopClip;
URL codeBase;

JComboBox formats;
JButton playButton, loopButton, stopButton;
JLabel status;

boolean looping = false;

public SoundApplication() {
    String [] fileTypes = {auFile,
                           aiffFile,
                           midiFile,        
                           rmfFile,
                           wavFile};
    formats = new JComboBox(fileTypes);
    formats.setSelectedIndex(0);
    chosenFile = (String)formats.getSelectedItem();
    formats.addItemListener(this);

    playButton = new JButton("Play");
    playButton.addActionListener(this);

    loopButton = new JButton("Loop");
    loopButton.addActionListener(this);

    stopButton = new JButton("Stop");
    stopButton.addActionListener(this);
    stopButton.setEnabled(false);

    status = new JLabel(
                "Click Play or Loop to play the selected sound file.");

    JPanel controlPanel = new JPanel();
    controlPanel.add(formats);
    controlPanel.add(playButton);
    controlPanel.add(loopButton);
    controlPanel.add(stopButton);           

    JPanel statusPanel = new JPanel();
    statusPanel.add(status);

    add(controlPanel);
    add(statusPanel);

    startLoadingSounds();
}

public void itemStateChanged(ItemEvent e){
    chosenFile = (String)formats.getSelectedItem();
    soundList.startLoading(chosenFile);
}

void startLoadingSounds() {
    //Start asynchronous sound loading.
    try {
        codeBase = new URL("file:" + System.getProperty("user.dir") + "/");
    } catch (MalformedURLException e) {
        System.err.println(e.getMessage());
    }
    soundList = new SoundList(codeBase);
    soundList.startLoading(auFile);
    soundList.startLoading(aiffFile);
    soundList.startLoading(midiFile);
    soundList.startLoading(rmfFile);
    soundList.startLoading(wavFile);
}

public void stop() {
    onceClip.stop();        //Cut short the one-time sound.
    if (looping) {
        loopClip.stop();    //Stop the sound loop.
    }
}    

public void start() {
    if (looping) {
        loopClip.loop();    //Restart the sound loop.
    }
}    

public void actionPerformed(ActionEvent event) {
    //PLAY BUTTON
    Object source = event.getSource();
    if (source == playButton) {
        //Try to get the AudioClip.
        onceClip = soundList.getClip(chosenFile);
        stopButton.setEnabled(true);
        onceClip.play();     //Play it once.
        status.setText("Playing sound " + chosenFile + ".");
        if (onceClip == null) {
            status.setText("Sound " + chosenFile + " not loaded yet.");
        }
        return;
    }

    //START LOOP BUTTON
    if (source == loopButton) {
        loopClip = soundList.getClip(chosenFile);

        looping = true;
        loopClip.loop();     //Start the sound loop.
        loopButton.setEnabled(false); //Disable start button.
        stopButton.setEnabled(true);
        status.setText("Playing sound " + chosenFile + " continuously.");
        if (loopClip == null) {
            status.setText("Sound " + chosenFile + " not loaded yet.");
        }
        return;
    }

    //STOP LOOP BUTTON
    if (source == stopButton) {
        if (looping) {
            looping = false;
            loopClip.stop();    //Stop the sound loop.
            loopButton.setEnabled(true); //Enable start button.
        } else if (onceClip != null) {
            onceClip.stop();
        }
        stopButton.setEnabled(false);
        status.setText("Stopped playing " + chosenFile + ".");
        return;
    }
}

public static void main(String s[]) {
    WindowListener l = new WindowAdapter() {
        public void windowClosing(WindowEvent e) {System.exit(0);}
    };
    JFrame f = new JFrame("SoundApplication");
    f.addWindowListener(l);
    f.getContentPane().add(new SoundApplication());
    f.setSize(new Dimension(400,100));
    f.show();
}

}我找到了一个有效的答案,非常感谢所有试图帮助我的人,我最终使用了音频流和输入流

定义我的输入流:

private AudioStream as;
方法以在应用程序启动时以及按下下一首歌曲按钮时更改歌曲

public void musicconfig ()
{
    try
    {
        if (mutestate == false)
        {
            AudioPlayer.player.stop (as);
            InputStream in = new FileInputStream (filename [count]);
            as = new AudioStream (in);
            AudioPlayer.player.start (as);
        }
    }

    catch (IOException b)
    {
        b.printStackTrace ();
    }
    count++;

    if (count == 12)
    {
        count = 1;
    }
}
在应用程序首次运行时设置我的歌曲列表阵列

public void mediaload ()
{
    filename [1] = "song1.wav";
    filename [2] = "song2.wav";
    filename [3] = "song3.wav";
    filename [4] = "song4.wav";
    filename [5] = "song5.wav";
    filename [6] = "song6.wav";
    filename [7] = "song7.wav";
    filename [8] = "song8.wav";
    filename [9] = "song9.wav";
    filename [10] = "song10.wav";
    filename [11] = "song11.wav";
}

不需要道歉,基本上我希望它在用户按下按钮或歌曲1结束时启动歌曲2。我已经找到了几种方法来实现这一点,但似乎是因为我的程序是一个小程序,它通常不起作用,而且因为我是一个新手,我还不完全理解其中的一些。我刚刚编辑了我的答案。过来看。您的问题不是小程序或应用程序。别担心,朋友,谢谢你的密码!不幸的是,对我来说,这是行不通的,但我使用了一些来自那个例子和其他例子的想法来组合我自己的想法。谢谢!我会投赞成票,但我需要更多的声誉来做到这一点,但歌曲2将一事无成你有没有听过歌曲2通过音频剪辑播放?如果没有,则测试它是否仅与该设备一起工作。