【问题标题】:How can i add background music to my program?如何将背景音乐添加到我的程序中?
【发布时间】:2013-08-31 21:50:56
【问题描述】:

我正在尝试将背景音乐添加到我的程序中,但是当我指定音频文件的路径时,我收到了错误消息。我怎么能指定这个(这将被发送给另一个人)。所以路径不能在我的系统上,它也必须位于 JAR 中。

package main;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

javax.sound.sampled.AudioSystem;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

public class Main extends JFrame {
/**
 * 
 */
private static final long serialVersionUID = 1L;
private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Main frame = new Main();
                frame.setVisible(true);
                PlaySound();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public static void PlaySound() {
    InputStream in;
    try {
        in = new FileInputStream(new File("/audio/Happy_Happy_Birthday.wav"));
        AudioStream audios = new AudioStream(in);
        AudioPlayer.player.start(audios);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);

    }

}

public Main() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 717, 508);
    contentPane = new JPanel() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        public void paintComponent(Graphics g) {
            Image img = Toolkit.getDefaultToolkit().getImage(
                    Main.class.getResource("/images/happy_birthday.jpg"));
            g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
        }
    };
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);
}
}

【问题讨论】:

  • /audio/Happy_Happy_Birthday 没有扩展名,您确定它是音频文件吗?它需要扩展。
  • 我的错是复制代码时出错,我有扩展名但仍然出现错误
  • 虽然没有使用音频子系统的经验,但我不愿意在与 UI 相同的线程中播放音频。

标签: java audio embedded-resource javasound background-music


【解决方案1】:
  • 使用URL 而不是File 加载剪辑。到部署时,这些资源可能会变成。在这种情况下,资源必须由URL 而不是File 访问。请参阅标签的info page,了解形成URL 的方法。
  • 使用javax.sound.sampled.Clip 播放声音(相对于sun.audio 包中未记录的类)。请参阅Java Sound info. page 获取工作源代码。

【讨论】:

    【解决方案2】:
    InputStream in;
        try {
            in = new FileInputStream(new File("Jock_Jams_-_Are_You_Ready_For_This.wav"));
            AudioStream audios = new AudioStream(in);
            AudioPlayer.player.start(audios);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
    
        }
    

    我在我的 while 循环之外使用它,只要你不介意它无法停止它就可以工作。

    【讨论】:

      猜你喜欢
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多