Java打开窗体后自动播放背景音乐代码实现学习教程

简易音乐播放器
新建一个窗体后程序自动播放音乐,可以选择自己喜欢的歌曲播放,可用于平时的窗体练习或者游戏界面的背景音乐,拿走不谢。
首先,该播放器需要两个类,一个用来构建窗体,一个用来设置音乐。
话不多说,直接上代码

窗体类


package 音乐播放窗体;

import java.awt.Color;
import java.awt.Container;
import java.awt.Frame;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
import 音乐播放窗体.MusicFrame;
import 音乐播放窗体.Sound;

public class MusicFrame extends JFrame{
	
	

	public static void main(String[] args) throws InterruptedException {
		
		//1.创建音乐窗体
		JFrame f = new JFrame("自制音乐播放器");
		
		//2.设置容器
		Container con=f.getContentPane();
		 
		//3.设置窗口的背景色
        con.setBackground(Color.pink) ; 
         
		//4.设置大小
		f.setSize(400, 400);
						
		//5.设置位置居中显示
		f.setLocationRelativeTo(null);
		
		//6.设置可见
		f.setVisible(true);
		
		//7.设置关闭窗体时关闭窗体
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//8.创建音乐播放器
		Sound player = new Sound("E:/kkkkk/博客斐日常练习/src/稻香.wav");   
		
		//循环播放
        player.start(true);
 
        TimeUnit.SECONDS.sleep(4);
		        
        //继续开始播放音频
        player.continues();
        
        /**
         * 第二,三步可以省略,此处为了美观,设置窗体颜色。
         */
        
		
	}
	
		
}


音乐类


package 音乐播放窗体;

/**
* Description: 简易音频播放器(只支持AU,RA,WAV)
* 			   在不使用JMF的情况下快速实现音频播放
*/
import javax.sound.sampled.*;
import java.io.*;
import java.util.concurrent.TimeUnit;
 
public class Sound {
	private String musicPath; //音频文件
	private volatile boolean run = true;  //记录音频是否播放
	private Thread mainThread;   //播放音频的任务线程
	
	private AudioInputStream audioStream;
	private AudioFormat audioFormat;
	private SourceDataLine sourceDataLine;
	
	public Sound(String musicPath) {
		this.musicPath = musicPath;
		prefetch();
	}
	
	//数据准备
	private void prefetch(){
		try{
		//获取音频输入流
	    audioStream = AudioSystem.getAudioInputStream(new File(musicPath));
		//获取音频的编码对象
		audioFormat = audioStream.getFormat();
		//包装音频信息
		DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class,
				audioFormat,AudioSystem.NOT_SPECIFIED);
		//使用包装音频信息后的Info类创建源数据行,充当混频器的源
		sourceDataLine = (SourceDataLine)AudioSystem.getLine(dataLineInfo);
		
		sourceDataLine.open(audioFormat);
		sourceDataLine.start();
		
		}catch(UnsupportedAudioFileException ex){
			ex.printStackTrace();
		}catch(LineUnavailableException ex){
			ex.printStackTrace();
		}catch(IOException ex){
			ex.printStackTrace();
		}
		
	}
	//析构函数:关闭音频读取流和数据行
	protected void finalize() throws Throwable{
		super.finalize();
		sourceDataLine.drain();
		sourceDataLine.close();
		audioStream.close();
	}
	
	//播放音频:通过loop参数设置是否循环播放
	private void playMusic(boolean loop)throws InterruptedException {
		try{
				if(loop){
					while(true){
						playMusic();
					}
				}else{
					playMusic();
					//清空数据行并关闭
					sourceDataLine.drain();
					sourceDataLine.close();
					audioStream.close();
				}
			
		}catch(IOException ex){
			ex.printStackTrace();
		}
		
		
	}
	private void playMusic(){
		try{
			synchronized(this){
				run = true;
			}
			//通过数据行读取音频数据流,发送到混音器;
			//数据流传输过程:AudioInputStream -> SourceDataLine;
			audioStream = AudioSystem.getAudioInputStream(new File(musicPath));
			int count;
			byte tempBuff[] = new byte[1024];
			
				while((count = audioStream.read(tempBuff,0,tempBuff.length)) != -1){
					synchronized(this){
					while(!run)
						wait();
					}
					sourceDataLine.write(tempBuff,0,count);
							
			}
 
		}catch(UnsupportedAudioFileException ex){
			ex.printStackTrace();
		}catch(IOException ex){
			ex.printStackTrace();
		}catch(InterruptedException ex){
			ex.printStackTrace();
		}
		
	}
	
	
	//暂停播放音频
	private void stopMusic(){
		synchronized(this){
			run = false;
			notifyAll();
		}
	}
	//继续播放音乐
	private void continueMusic(){
		synchronized(this){
			 run = true;
			 notifyAll();
		}
	}
	
	
	//外部调用控制方法:生成音频主线程;
	public void start(boolean loop){
		mainThread = new Thread(new Runnable(){
			public void run(){
				try {
					playMusic(loop);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		});
		mainThread.start();
	}
	
	//外部调用控制方法:暂停音频线程
	public void stop(){
		new Thread(new Runnable(){
			public void run(){
				stopMusic();
				
			}
		}).start();
	}
	//外部调用控制方法:继续音频线程
	public void continues(){
		new Thread(new Runnable(){
			public void run(){
				continueMusic();
			}
		}).start();
	}  
 }

Java打开窗体后自动播放背景音乐代码实现学习教程

1. 全库网所有资源均来源于用户上传和网络,如有侵权请发送邮箱联系站长处理!
2. 如果你有好的资源或者原创教程,可以到审核区投稿发布,分享会有钻石奖励和额外收入!
3. 全库网所有的源码、教程等其它资源均源于用户上传发布,如有疑问,可直接联系发布作者处理
4. 如有链接无法下载、失效或广告,请联系全库网管理员核实处理!
5. 通过发布原创教学视频或优质源码资源可以免费获得全库网站内SVIP会员噢
6.全库网管理猿邮箱地址:admin@qkuser.com,我们会在收到您的邮件后三个工作日内完成处理!
7. 如遇到加密压缩包,默认解压密码为"qkuser.com",如遇到无法解压的请联系管理员!

全库网 » Java打开窗体后自动播放背景音乐代码实现学习教程
禁止此类操作!