Java--实现简单的音频(mp3格式)播放

本文实例为大家分享了实现Java程序中播放mp3格式的音频代码,供大家参考,具体内容如下:

1 内容说明

(1)开发前,需引入一个jlayer-1.0.1.jar包 提取码:2317
(2)构建路径
在这里插入图片描述
(3)本程序创建Player类的对象调用play()方法实现音频播放
(4)其他:利用了多线程知识以及GUI图形界面
在这里插入图片描述

2 实例代码展示

2.1 主类
public class Main {
 public static void main(String[] args) {
     new JWindowTest().start();  //开启线程
     try {
      		Thread.sleep(6000);//休眠6秒
   			 new MYFrame();
		 } catch (InterruptedException e) {
    		 e.printStackTrace();
	  }
  }
}
2.2 音乐播放窗口实例代码
class MusicFrame{
    JButton button1 = null;
    JButton button2 = null;
    public void setMusicPanel() {
        JFrame jFrame = new JFrame();
        jFrame.setTitle("音乐播放");
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获取显示器的大小
        int sw = screenSize.width;  //显示器的宽度
        int sh = screenSize.height; //显示器的高度
        int width = 900;    //窗口宽度
        int height = 600;   //窗口高度
        jFrame.setBounds((sw - width) / 2, (sh - height) / 2, width, height);   //设置窗口大小及定位 
        this.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("music.png")));// 图标   									
        ImageIcon background = new ImageIcon(
                Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("techno04.gif")));
			// 背景图片
        JLabel label = new JLabel(background); // 把背景图片显示在一个标签里面
        label.setBounds(0, 0, jFrame.getWidth(), jFrame.getHeight()); // 把标签的大小位置设置为图片刚好填充整个面板
        JPanel imagePanel = (JPanel) jFrame.getContentPane(); // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
        imagePanel.setOpaque(false); // 窗口透明
        jFrame.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE)); // 把背景图片添加到分层窗格的最底层作为背景
        jFrame.setLayout(null); // 清空布局

        JLabel jlabel = new JLabel("Hello!");   //文本标题
        jlabel.setForeground(new Color(0x02FCFC)); //设置前景色
        jlabel.setFont(new Font("黑体", Font.BOLD, 45)); //设置按钮中的字体属性
        jlabel.setBounds((jFrame.getWidth() - 140) / 2, (jFrame.getHeight() - 590) / 2, 400, 60); //设置按钮位置,及按钮大小
        jFrame.add(jlabel);

        this.button1 = new JButton("FileDialog选择器");
        button1.setForeground(new Color(0xA4F6A4)); //设置前景色
        button1.setFont(new Font("黑体", Font.BOLD, 18)); //设置按钮中的字体属性
        button1.setDefaultCapable(true);
        button1.setContentAreaFilled(false); //设置按钮透明
        button1.setBounds((jFrame.getWidth() - 250) / 2, (jFrame.getHeight() - 320) / 2, 250, 40); //设置按钮位置,及按钮大小
        jFrame.add(button1);

        this.button2 = new JButton("关闭窗口");
        button2.setFont(new Font("黑体", Font.BOLD, 18));
        button2.setForeground(new Color(0xA4F6A4)); //设置前景色
        button2.setDefaultCapable(true);
        button2.setContentAreaFilled(false); //设置按钮透明
        button2.setBounds((jFrame.getWidth() - 250) / 2, (jFrame.getHeight() - 180) / 2, 250, 40); //设置按钮位置,及按钮大小
        jFrame.add(button2);

        jFrame.setResizable(false);
        jFrame.setVisible(true);
        //按钮监听
        this.button1.addActionListener(e -> {
            FileDialog fd = new FileDialog(jFrame, "Open", FileDialog.LOAD);// 文件打开路径
            fd.setVisible(true); // 显示选择框
            String music = fd.getDirectory() + fd.getFile();    //获取歌曲的绝对路径
            try {
                MusicTest(music);
            } catch (Exception exception) {
                JOptionPane.showMessageDialog(    //警告提示框
                        jFrame,
                        "文件不能为空!",
                        "警告", JOptionPane.WARNING_MESSAGE);
            }

        });
        this.button2.addActionListener(e -> jFrame.dispose());
    }

    /**
     * 音乐播放
     */
    public void MusicTest(String file) throws FileNotFoundException {
        BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(file));//创建缓冲输入流对象
        new Thread(
                () -> {
                    Player player;
                    try {
                        assert false;
                        player=new Player(buffer);//创建Player的对象
                        player.play();
                    } catch (JavaLayerException e) {
                        JOptionPane.showMessageDialog(    //警告提示框
                                new JFrame(),
                                "文件不能为空!",
                                "警告", JOptionPane.WARNING_MESSAGE);
                    }
                }

        ).start();  //开启线程
    }

}
2.3 选择器主窗口实例代码
 class MYFrame extends JFrame {
    public MYFrame() {
        super("Music");
        // 图标
        this.setIconImage(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("music.png")));
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获取系统显示界面大小
        final int sw = screenSize.width;  //系统显示界面的宽度
        final int sh = screenSize.height; // 系统显示界面的高度
        final int width = 1050;   //音乐主面板的宽度
        final int height = 700; //音乐主面板的高度
        this.setBounds((sw - width) / 2, (sh - height) / 2, width, height); // 设置窗口大小及定位
        ImageIcon background = new ImageIcon(
                Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("imge01.gif")));
			// 背景图片
        JLabel label = new JLabel(background); // 把背景图片显示在一个标签里面
        label.setBounds(0, 0, this.getWidth(), this.getHeight()); // 把标签的大小位置设置为图片刚好填充整个面板
        JPanel imagePanel = (JPanel) this.getContentPane(); // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
        imagePanel.setOpaque(false); // 窗口透明
        this.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE)); // 把背景图片添加到分层窗格的最底层作为背景
        setLayout(null); // 清空布局
        JLabel jlabel = new JLabel("听音乐-新生活");
        jlabel.setForeground(new Color(0x04F87A)); // 设置前景色
        jlabel.setFont(new Font("华文琥珀", Font.BOLD, 45)); // 设置文本的字体属性
        jlabel.setBounds((this.getWidth() - 300) / 2, (this.getHeight() - 690) / 2, 400, 60); // 设置按钮位置,及按钮大小
        add(jlabel);
        JButton button01 = new JButton("本地音乐播放");
        button01.setForeground(new Color(0x16CDFA)); // 设置前景色
        button01.setFont(new Font("黑体", Font.BOLD, 15)); // 设置按钮中的字体属性
        button01.setDefaultCapable(true);
        button01.setContentAreaFilled(false); // 设置按钮透明
        button01.setBounds((this.getWidth() - 200) / 2, (this.getHeight() - 250) / 2, 200, 40); // 设置按钮位置,及按钮大小
        add(button01);
        JButton button02 = new JButton("网易云音乐");
        button02.setFont(new Font("黑体", Font.BOLD, 15));
        button02.setForeground(new Color(0x04FAFA)); // 设置前景色
        button02.setDefaultCapable(true);
        button02.setContentAreaFilled(false); // 设置按钮透明
        button02.setBounds((this.getWidth() - 200) / 2, (this.getHeight() - 40) / 2, 200, 40); // 设置按钮位置,及按钮大小
        add(button02);
        JButton button03 = new JButton("退出");
        button03.setFont(new Font("黑体", Font.BOLD, 15));
        button03.setForeground(new Color(0x04FAFA)); // 设置前景色
        button03.setDefaultCapable(true);
        button03.setContentAreaFilled(false); // 设置按钮透明
        button03.setBounds((this.getWidth() - 200) / 2, (this.getHeight() - 40 + 210) / 2, 200, 40); // 设置按钮位置,及按钮大小
        add(button03);
        this.setResizable(false);
        setVisible(true);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//窗体关闭并退出系统
        init(button01, button02, button03);
    }
    private void init(JButton button01, JButton button02, JButton button03) {
        // 选择器面板
        button01.addActionListener(e -> new MusicFrame().setMusicPanel());
        button02.addActionListener(e -> { //           跳转到网易云音乐页面
            Desktop desktop = Desktop.getDesktop();
            try {
                desktop.browse(new URI("https://music.163.com/"));  //跳转网易云链接
            } catch (IOException | URISyntaxException ioException) {
                JOptionPane.showMessageDialog(    //警告提示框
                        new JFrame(),
                        "异常",
                        "警告", JOptionPane.WARNING_MESSAGE);
            }
        });
        button03.addActionListener(e -> System.exit(0));//退出系统
    } } ```
2.4 进度条设计实例代码
class JWindowTest extends Thread {
    private static final int MIN_PROGRESS = 0;
    private static final int MAX_PROGRESS = 10;
    private static int currentProgress = MIN_PROGRESS;//设置进度条的起始值
    // 	创建一个进度条
    final JProgressBar progressBar = new JProgressBar();
    JWindow jf = new JWindow();
    public JWindowTest() {
        jf.setSize(480, 300);
        jf.setLocationRelativeTo(null);
        final JLabel label = new JLabel(
                new ImageIcon(Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("music03.gif"))));
        label.setBounds(0, 0, 480, 300); // 		设置进度的 最小值 和 最大值
        progressBar.setMinimum(MIN_PROGRESS);
        progressBar.setMaximum(MAX_PROGRESS);
        progressBar.setBorderPainted(false);// 不显示下边框 // 		前景色
        progressBar.setForeground(new Color(4, 253, 19)); //		背景底色
        progressBar.setBackground(new Color(0x01012F));
        progressBar.setBounds(0, 292, 480, 8); // 		设置当前进度值
        progressBar.setValue(currentProgress); // 		绘制百分比文本(进度条中间显示的百分数) //      progressBar.setStringPainted(true); //
		添加到内容面板
        jf.add(progressBar);
        jf.add(label);
        jf.setVisible(true);
        // 设置布局为空
        jf.setLayout(null);
    }

    public void run() { //		控制进度条的时间
        new Timer(500, e -> {
            currentProgress++;
            progressBar.setValue(currentProgress);
            if (currentProgress > 10) {
                jf.dispose(); // JWindow窗口消失
            }
        }).start();
    } }

3 效果展示

在这里插入图片描述

功能缺陷:没有暂停功能
该程序还有待改进,后期将解决方案再分享给大家!!!

`

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_WEH_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值