java如何播放mp3格式音频文件,以及如何循环播放音频?

个人网站:https://cxynw.com/detail/30.html

百度网盘: 密码:avpy

官网 点击打开链接

首先,感谢您能抽空阅读我的博客,在这里我会使用2种播放MP3格式音频的方法。第一种,使用JavaFX的javafx.scene.media.*包播放。第二种,使用第三方库进行播放,第三方库的下载地址点击打开链接

JavaFX播放MP3,这种方法不需要下载第三方库,比较方便,但是不能直接用在Java Project里面,能直接用在JavaFX Project里面。

这个包里面,有几个重要的类,它们的层次关系是这样的Media->MediaPlayer->MediaView

Meida类用来封装媒体数据

MediaPlayer类用来控制媒体文件的各种行为

MediaView类用来显示媒体,但是我介绍的是播放MP3,所以文中没有这个类。

import java.io.File;
import java.net.URL;

import javafx.application.Application;
import javafx.scene.media.*;
import javafx.stage.Stage;

/**
 * 目前支持的编码格式:
 * 
 * 音频:
 * 
 * MP3;
 * 
 * 包含非压缩PCM的AIFF;
 * 
 * 包含非压缩PCM的WAV;
 * 
 * 使用AAC音频的MPEG-4;(MP4)
 * 
 * 使用JavaFX播放MP3文件,需要导入javafx.scene.media包
 */
class Sound extends Object {

	private Media media;// 相当于媒体播放器
	private MediaPlayer mediaPlayer;// 相当于媒体控制器

	/**
	 * 播放音乐
	 */
	public void play() {
		mediaPlayer.play(); // JavaFX提供的MediaPlayer有播放方法,直接调用即可
	}

	/**
	 * 暂停播放
	 */
	public void pause() {
		mediaPlayer.pause();// JavaFX提供的MediaPlayer有暂停方法,直接调用即可
	}

	/**
	 * 停止播放
	 */
	public void stop() {
		mediaPlayer.stop();// JavaFX提供的MediaPlayer有停止播放方法,直接调用即可
	}

	/**
	 * 循环播放
	 */
	public void loop() {
		setPlayCount(MediaPlayer.INDEFINITE);// this的方法
		play();// this的方法
	}

	/**
	 * 获取现在音乐播放到哪里了
	 * 
	 * @return 事件(单位秒)
	 */
	public double getNewTime() {
		return mediaPlayer.getCurrentTime().toSeconds();
	}

	/**
	 * 设置音乐的声音大小0-1
	 * 
	 * @param v
	 *            音量
	 */
	public void setVolume(double v) {
		mediaPlayer.setVolume(v);
	}

	/**
	 * 
	 * @param count
	 *            设置媒体文件循环播放的次数
	 */
	public void setPlayCount(int count) {
		mediaPlayer.setCycleCount(count);
	}

	/**
	 * 释放媒体文件占用的空间
	 */
	public void close() {
		mediaPlayer.dispose(); // 不是用Media类来释放内存,要用MediaPlayer控制类来释放内存
		System.gc(); // 通知JVM内存回收,调用了dispose方法内存并不会马上被回收,会被标记成垃圾,等待下一次垃圾回收的执行,这里我们手动调用
	}

	/**
	 * 
	 * @param URL
	 *            媒体文件目录,本地文件也要用URL(String)路径
	 */
	public Sound(String URL, boolean isAutoPlay) {
		this.media = new Media(URL);
		this.mediaPlayer = new MediaPlayer(media);

		mediaPlayer.setAutoPlay(isAutoPlay);
	}

	/**
	 * 
	 * @param URL
	 *            虽然直接传入的事URL,但是是不能直接使用,要转成String类型的URL
	 */
	public Sound(URL URL, boolean isAutoPlay) {
		this(URL.toString(), isAutoPlay);
	}

	/**
	 * 
	 * @param file
	 *            最终转换成URL(String)路径
	 */
	public Sound(File file, boolean isAutoPlay) {
		this(file.toURI().toString(), isAutoPlay);
	}

}

public class Main extends Application {

	private Sound sound;// 注意,我这里是为了防止被JVM的垃圾回收给回收掉

	@Override
	public void start(Stage primaryStage) throws Exception {
		// 直接复制下来没效果可能是因为连接地址失效了
		sound = new Sound("http://sc1.111ttt.cn/2017/1/04/26/297262113196.mp3", false);
		sound.loop();// 循环播放
	}

	public static void main(String[] args) {
		launch(args);// 初始化
	}

}

使用第三方开源库播放MP3文件,可以前往点击打开链接官网下载,或者在我的百度网盘下载密码:avpy

package com.game.sound;

import java.util.logging.*;
import javazoom.jl.decoder.*;
import javazoom.jl.player.*;

public class MySound extends Thread {

    private Player player;
    private String musicName;

    //加载音乐
    public MySound(String musicName) {
        this.musicName = musicName;
    }

    //播放音乐
    public void play() {
        try {
            //我这里的这一种写法要求音频文件要和这个类在同一个包里面
            new Player(getClass().getResourceAsStream(musicName)).play();
        } catch (JavaLayerException ex) {
            Logger.getLogger(MySound.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //循环播放音乐
    public void loop() {
        this.start();
    }

    @Override
    public void run() {
        while (true) {
            try {
                new Player(getClass().getResourceAsStream(musicName)).play();
            } catch (JavaLayerException ex) {
                Logger.getLogger(MySound.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

} 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值