• java实现播放音乐-JLayer


    不久前,接了一个单子,用java的swing实现一个如下的功能

    image-20210827171756876

    其实增删改查都好实现,主要是java怎么播放MP3音乐。然后去百度,发现了一个人家造好的轮子---JLayer。导入jar包调用相关的api即可,下面记录一下使用方法。

    1 下载JLayer的jar包

    点击下载

    2 创建java项目

    准备一个MP3文件放入src的文件夹下

    image-20210827173044986

    3 编写测试代码

    【TestJlayer.java】

    package com.qy.jlayer;
    import java.io.File;
    import java.io.FileInputStream;
    import javazoom.jl.player.Player;
    
    public class TestJlayer {
    	public static void main(String[] args) throws Exception{
    		File file = new File("src/1.mp3");
    		Player player = new Player(new FileInputStream(file));
    		player.play();//播放音乐
            //player.close();//停止音乐
    	}
    }
    

    4 常用api总结

    image-20210827173553935

    5 注意

    可以看到这个工具包的使用很简单,但是play() 这个方法是阻塞式的,也就同步的,程序运行的时候,音乐不放完代码是不会往下走的,这在swing开发中就会存在一种问题,在播放音乐的时候如果想切换音乐或者停止音乐,按钮是点击不了的。我的解决方案是单独启动一个线程来播放音乐。

    伪代码如下:

    public class MusicIndexFrm extends JFrame {
    	//第一步定义
    	private Player player ;//播放对象
    	private Music playMusic;//正在播放的音乐,如果没有则为null 这个Music类是自己封装的,里面定义了音乐相关信息,比如歌名,路径等
        
    	//第二步:核心在这里 自定义线程类,来播放音乐
    	private class MyRunnable implements Runnable{//1.实现Runnable接口
    		  public void run() {//2.重写run方法
    			 try {
    				if(null != player){player.close();}//如果有音乐在播放先关闭,一次只放一首歌
    				player = new Player(new FileInputStream(new File(playMusic.getPath())));
    				player.play();//播放
    			} catch (FileNotFoundException e1) {
    				e1.printStackTrace();
    			} catch (JavaLayerException e1) {
    				e1.printStackTrace();
    			}
    		 }
    	}
        
        //第三步:通过线程去播放音乐而不是直接调用play()方法
        Music music = new Music(id, name, formats, singer, path);
        playMusic = music;//将正在播放的音乐保存
        //播放音乐,此处要启动一个线程去播放,不然窗口动不了
        new Thread(new MyRunnable()).start();
    }
    

    参考:https://blog.csdn.net/xietansheng/article/details/85056358

  • 相关阅读:
    选择前端编辑器
    由看书引发的一些思考
    不是真饿的时候吃些饱腹感强的东西
    微信浏览网页骗局
    辣椒你还吃着吗
    观影感悟
    python中函数加括号与不加括号
    视频流媒体服务器直播点播平台可以接入其他平台播放视频吗?
    视频直播点播流媒体服务器报accept4 () failed (24: Too many open files)错误解决方法
    视频直播点播流媒体服务器报worker_connections are not enough错误解决方法
  • 原文地址:https://www.cnblogs.com/helf/p/15194821.html
Copyright © 2020-2023  润新知