JavaFX实战教程
javaFX线程结构分析
javaFX系列之launcher启动器:两种启动javaFX的方式及launch(args[])参数设置和获取javaFX2.0窗体(Stage)分析及使用
javaFX2.0场景(Scene)分析及使用,多场景切换实现
javaFX系列之Image组件:最简单的图片浏览器实现
JavaFX之音频播放:MediaPlayer和AudioClip播放音频剪辑以及AudioClip与MediaPlayer的区别
javaFX之media组件:最简单的视频播放器实现
javaFX之Canvas画板绘制组件:最简单的画板绘制图形实现javaFX之web组件:史上最简单的javaFX浏览器实现(web component组件)
本章会介绍AudioClip和MediaPlayer
javafx.media.AudioClip是JavaFX中用于加载和控制音频播放的类。
AudioClip会在加载音乐时把音频全部加载和解码到内存中,实际应用中适合比较小的音乐文件播放,不适合播放较大的音频剪辑,需要播放较大的音频剪辑可以使用MediaPlayer。
它可以从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();
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);
}
前面已经讲过MediaPlayer适合播放比较长的媒体文件或者媒体流,并且MediaPlayer支持视频和音频;
而AudioClip只支持音频,并且只适合播放较短的音频剪辑。
AudioClip是把所有音频文件加载到内存中并进行完全解码,将解码后得音频采样也全都缓存在内存中,如果是加载较大得音频剪辑文件,很明显会比较吃内存。
MediaPlayer读取媒体(不仅是音频,也支持视频),是在初始化时加载并解码一段缓存到内存中备用,等到播放时边加载编解码边缓冲到内存中,所以在处理较大音频文件的时候,相对AudioClip来说会更节省内存。
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();
最后,如果觉得博主写得不错,建议“关注、点赞、收藏”一键三连