如何将声音融入节目中



所以我试图使用另一个类来合并声音,这样我以后就可以在游戏中使用它,但我不知道如何在不出错的情况下做任何事情,这就是我迄今为止得到的

主要类别(Project1.class)

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Project1 {

    public static void main(String[] args) throws Exception{
        Music m = new Music();
        m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        m.setSize(300,300);
        JButton button = new JButton("Click here for 4 second part of the music");
        m.add(button);
        button.addActionListener(new AL());
        m.setVisible(true);

    }
    public static class AL implements ActionListener{
        public final void actionPerformed(ActionEvent e){
            //What do I put here so that I could play the Music from the other class?
        }
    }
}

这是一个真正播放音乐的类(music.class)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import javax.swing.JButton;
import javax.swing.JFrame;
import sun.audio.*;
import sun.*;

public class Music extends JFrame{
    private JButton button;
    public Music() throws Exception {
    super("The title");

    String filename = "/Users/seb/Documents/workspace(NormalJava)/practs/res/backgroundMusic.wav";
    InputStream in = new FileInputStream(new File(filename));
    AudioStream audioStream = new AudioStream(in);

    AudioPlayer.player.start(audioStream);
    Thread.sleep(4000);
    AudioPlayer.player.stop(audioStream);
    }   
}

如果有人能帮忙,我会非常感激,我从来没有做过声音,我不知道如何做,我对此非常困惑,我应该在按钮ActionListener类中放什么,这样只有当我按下它时,我才能启动音乐,然后在4秒后停止?如果我把线程睡眠(4000);在音乐课上,它开始播放音乐,等待4秒,停止,然后向我显示按钮

所以,如果有人能帮助我了解音频,或者其他更简单的方法。我会非常感激的!

音乐首先播放的原因是因为构造函数中有播放方法。因此:

public static void main(String[] args) throws Exception{
    Music m = new Music(); // ****** Music plays here
    m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    m.setSize(300,300);
    JButton button = new JButton("Click here for 4 second part of the music");
    m.add(button);
    button.addActionListener(new AL());
    m.setVisible(true);

}

然后在所有这些之后,你设置你的尺寸,等等

主方法中的所有内容都应该在Music()的构造函数中。您的音乐播放代码应该在ActionListener类AL.中

你还需要确保你没有把事件线程绑起来。因此,在ActionListener中,您会得到以下内容:

SwingUtilities.invokeLater(new Runnable() {
  public void run() {
    String filename = "/Users/seb/Documents/workspace(NormalJava)/practs/res/backgroundMusic.wav";
    InputStream in = new FileInputStream(new File(filename));
    AudioStream audioStream = new AudioStream(in);
    AudioPlayer.player.start(audioStream);
    Thread.sleep(4000);
    AudioPlayer.player.stop(audioStream);
  }
}

单击按钮时,在单独的线程中播放音乐怎么样?因此,动作监听器的actionPerformed将启动线程来播放音乐。

我认为你的actionListener应该播放音乐,而不是构造函数。因此,声音是在活动中播放的,而不是在建筑中播放的。我认为MarkBernard的观点很好。

相关内容

  • 没有找到相关文章

最新更新