java audioclip_java.applet.AudioClip替代

package 5xstar.sound;

import java.io.File;

import java.applet.AudioClip;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.Clip;

import javax.sound.sampled.UnsupportedAudioFileException;

/**

*Java 9后,java.applet.AudioClip不再底层支持,编译和运行都没异常,就是播不出声音,官方也不提供替代

*本工具用javax.sound.sampled.Clip进行打包替代

*五行星软件  微信公众号:学思营            2020-4-24

**/

public class AudioClipCreater

{

final private static class MyAudioClip implements AudioClip{

final private Clip clip;

private MyAudioClip(final  Clip clip){

this.clip=clip;

}

//下面实现AudioClip接口

//单纯播放

public void play(){

clip.setFramePosition(0);  //把指针移到开始

clip.start();

}

//循环播放

public void loop(){

clip.setFramePosition(0);  //把指针移到开始

clip.loop(Clip.LOOP_CONTINUOUSLY);

}

//停止

public void stop(){

clip.stop();

}

}

/**

*通过文件获取已加载音乐的AudioClip

*@audioFile 音乐文件 官方推荐wav和au格式

*@return 已加载音乐的AudioClip

**/

public static AudioClip createAudioClip(final File audioFile){

try{

//获取Clip对象

final Clip clip=AudioSystem.getClip();

//获取音乐输入流

AudioInputStream ais=AudioSystem.getAudioInputStream(audioFile);

//加载音乐

clip.open(ais);

//设置循环播放范围是整个音频

clip.setLoopPoints(0,-1);

//返回clip

return new MyAudioClip(clip);

}catch(UnsupportedAudioFileException e){

e.printStackTrace();

System.err.println("系统不音乐文件:"+audioFile.getAbsolutePath()+"的格式。" );

}catch(Exception e){

e.printStackTrace();

System.err.println("加载音乐文件:"+audioFile.getAbsolutePath()+"时发送系统错误。" );

}

return null;

}

/**

*关闭由上面生成的AudioClip释放资源

*@audioClip AudioClip

**/

public static void closeAudioClip(final AudioClip audioClip){

if(audioClip!=null && audioClip instanceof MyAudioClip){

try{ ((MyAudioClip)audioClip).clip.close();}catch(Exception e){}

}

}

/**

*测试

**/

public static void main(String[] args){

if(args!=null && args.length>0){

AudioClip cp=createAudioClip(new File(args[0]));

if(cp!=null){

cp.loop();

try{Thread.sleep(30000);}catch(Exception e){}

closeAudioClip(cp);  //如果close成功,音乐就停止

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值