JavaFX之音频播放:MediaPlayer和AudioClip播放音频剪辑以及AudioClip与MediaPlayer的区别

JavaFX实战教程

javaFX线程结构分析
javaFX系列之launcher启动器:两种启动javaFX的方式及launch(args[])参数设置和获取

javaFX2.0窗体(Stage)分析及使用

javaFX2.0场景(Scene)分析及使用,多场景切换实现

javaFX系列之Image组件:最简单的图片浏览器实现

JavaFX音频播放:MediaPlayer和AudioClip播放音频剪辑以及AudioClip与MediaPlayer的区别
javaFX之media组件:最简单的视频播放器实现
javaFXCanvas画板绘制组件:最简单的画板绘制图形实现

javaFXweb组件:史上最简单的javaFX浏览器实现(web component组件)

前言

本章会介绍AudioClip和MediaPlayer

AudioClip介绍

javafx.media.AudioClip是JavaFX中用于加载和控制音频播放的类。

AudioClip会在加载音乐时把音频全部加载和解码到内存中,实际应用中适合比较小的音乐文件播放,不适合播放较大的音频剪辑,需要播放较大的音频剪辑可以使用MediaPlayer。

AudioClip使用

它可以从jar包、文件及http网络流加载音频媒体源,支持简单的音频控制功能,比如:播放和停止。

AudioClip ac=new AudioClip(src);
//double volume:音量(0-1.0)0表示静音,1.0表示最大音量,
//double balance, 声道控制,0.0表示左右声道均为全音量,-1.0表示左侧全声道,右侧静音,1.0是右侧全声道,左侧静音。

ac.setCycleCount(5);//重复播放次数,必须大于1
//循环播放
//参数说明
// double volume 音量(0-1.0)0表示静音,1.0表示最大音量
// double balance 均衡,左右声道控制左右声道的音量
//double rate:播放速度, 1.0表示正常速度,2.0表示两倍速度播放,以此类推)
//double pan:左右声道控制,-1.0表示左声道,1.0表示右声道,0.0默认表示立体声。
//int priority:优先级,如果有很多效果音,优先级较低的不会被播放,数字越大优先级越高
ac.play(1.0, 0.0, 1.0, 0, 0);

//播放一次
ac.play(1.0);

//停止播放
ac.stop();

com.sun.media.jfxmedia.AudioClip与javafx.media.AudioClip比较

javafx.media.AudioClip内部封装了com.sun.media.jfxmedia.AudioClip

大部分用法相同,不同的是com.sun.media.jfxmedia.AudioClip可以通过音频采样数据直接创建音频片段:

public static AudioClip create(byte [] data, int dataOffset, int sampleCount, int sampleFormat, int channels, int sampleRate)
            throws IllegalArgumentException
    {
        return AudioClipProvider.getProvider().create(data, dataOffset, sampleCount, sampleFormat, channels, sampleRate);
    }

AudioClip与MediaPlayer比较

前面已经讲过MediaPlayer适合播放比较长的媒体文件或者媒体流,并且MediaPlayer支持视频和音频;

而AudioClip只支持音频,并且只适合播放较短的音频剪辑。

AudioClip加载和解码原理

AudioClip是把所有音频文件加载到内存中并进行完全解码,将解码后得音频采样也全都缓存在内存中,如果是加载较大得音频剪辑文件,很明显会比较吃内存。

MediaPlayer加载和解码原理

MediaPlayer读取媒体(不仅是音频,也支持视频),是在初始化时加载并解码一段缓存到内存中备用,等到播放时边加载编解码边缓冲到内存中,所以在处理较大音频文件的时候,相对AudioClip来说会更节省内存。

MediaPlayer的使用

MediaPlayer播放一段比较长的音乐代码:

//音乐文件放在项目根目录下的的audio路径下

String src=System.getProperty("user.dir").replace("\\", "/")+"/audio/pipa.mp3";

Media media=new Media(src)

MediaPlayer gbAC=new MediaPlayer(media);

//自动播放
gbAC.setAutoPlay(true);

//音量(0-1.0)0表示静音,1.0表示最大音量
gbAC.setVolume(1.0);

//重复播放次数,最大可以支持Integer.MAX_VALUE
gbAC.setCycleCount(Integer.MAX_VALUE);

//播放
gbAC.play();

最后,如果觉得博主写得不错,建议“关注、点赞、收藏”一键三连

猜你喜欢

转载自blog.csdn.net/eguid_1/article/details/107396447