码迷,mamicode.com
首页 > 其他好文 > 详细

简单音频播放器

时间:2015-06-13 17:14:59      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:小程序   java   音频播放器   框架   

注意:按钮图片和音频文件(*.wav)需要自己去网上下载替换(这里不方便上传),有什么问题,可以留言。。。

技术分享

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Font;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MusicPlayer extends JFrame {
	JLabel songNameLabel = null; // 用标签显示状态

	// 四个播放功能键按钮
	JButton btnLast = null; // 上一曲
	JButton btnPlay = null; // 播放/停止
	JButton btnNext = null; // 下一曲
	JButton btnLoop = null; // 循环

	// 显示歌曲列表
	JLabel listLabel = null;
	List songsList = null;
	AudioClip[] songs;// 将音频文件放在数组当中
	AudioClip currentSong;// 当前选定播放的音频文件
	// 本例,此处把歌曲名写死了。同学们自己可以进行扩展:由用户从文件对话框动态加载
	String[] strSongNames = { "song1.wav", "song2.wav", "song3.wav",
			"song4.wav", "song5.wav", "song6.wav" };
	String strCurrentSongName; // 当前选定播放歌曲的名称
	int index = 0; // 记录当前选定播放的歌曲的序号(当前播放的那首歌曲),默认第一首
	boolean isPlayOrStop = true;// 记录播放状态(播放/停止),默认为播放
	boolean isLoop = false; // 记录循环状态,默认为不循环播放

	Thread playerThread; // 音频播放线程

	public MusicPlayer() {
		super("音乐播放器");
		this.setLayout(null);
		this.setBounds(300, 50, 310, 500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// 标签:我的音乐播放器/歌曲名
		songNameLabel = new JLabel();
		Font songNameFont = new Font("斜体", Font.ITALIC, 18);
		songNameLabel.setFont(songNameFont);
		songNameLabel.setText("我的音乐播放器");
		songNameLabel.setBounds(10, 10, 300, 40);
		this.getContentPane().add(songNameLabel);

		// 四个播放功能键按钮
		// 构造四个按钮
		btnLast = new JButton();
		btnPlay = new JButton();
		btnNext = new JButton();
		btnLoop = new JButton();
		// 设置位置和大小
		btnLast.setBounds(10, 70, 50, 40);
		btnPlay.setBounds(70, 70, 50, 40);
		btnNext.setBounds(130, 70, 50, 40);
		btnLoop.setBounds(190, 70, 50, 40);
		// 设置图片
		btnLast.setIcon(new ImageIcon("1.png"));
		btnPlay.setIcon(new ImageIcon("2.png"));
		btnNext.setIcon(new ImageIcon("3.png"));
		btnLoop.setIcon(new ImageIcon("4.png"));
		// 给按钮添加监听
		MouseListener mlc = new MouseListenerC();// 鼠标监听器对象
		btnLast.addMouseListener(mlc);
		btnPlay.addMouseListener(mlc);
		btnNext.addMouseListener(mlc);
		btnLoop.addMouseListener(mlc);

		// 添加到框架
		getContentPane().add(btnLast);
		getContentPane().add(btnPlay);
		getContentPane().add(btnNext);
		getContentPane().add(btnLoop);

		// 以下这段设置歌曲播放列表
		// 设置播放列表的标签
		listLabel = new JLabel("播放列表");
		listLabel.setBounds(10, 120, 100, 30);
		Font listLabelFont = new Font("宋体", Font.BOLD, 15);
		listLabel.setFont(listLabelFont);
		this.getContentPane().add(listLabel);
		// 设置播放列表控件
		songsList = new List();
		songsList.setBounds(10, 150, 250, 300);
		songsList.setBackground(Color.cyan);
		songs = new AudioClip[10];
		// 把歌曲根据文件名逐个加载进来
		for (int i = 0; i < strSongNames.length; i++) {
			songs[i] = loadSound(strSongNames[i]);// 加载音频文件
			songsList.add(strSongNames[i]);// 将歌曲名称添加到列表中
		}
		songsList.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent e) {
				currentSong.stop();
				index = songsList.getSelectedIndex();
				playerThread = new Thread( new MusicRun() );
				playerThread.start();
			}
		});
		
		this.getContentPane().add(songsList);

		playerThread = new Thread( new MusicRun() );
		playerThread.start();

		this.setVisible(true);
	}

	private class MusicRun implements Runnable {
		@Override
		public void run() {
			currentSong = songs[index];
			if (isLoop) {
				currentSong.loop();
			}
			strCurrentSongName = strSongNames[index];
			songNameLabel.setText("正在播放:" + strCurrentSongName);
			songsList.select(index);// 在播放列表中选定当前播放歌曲条目
			btnPlay.setIcon(new ImageIcon("5.png"));// 切换成“停止”图标
			if (isPlayOrStop) {
				currentSong.play();
			}
		}
	}

	private class MouseListenerC implements MouseListener {
		@Override
		public void mouseClicked(MouseEvent e) {
			JButton btn = (JButton) e.getSource();
			currentSong.stop();
			if (btn == btnPlay) {
				isPlayOrStop = !isPlayOrStop;
			} else if (btn == btnLast) {
				index--;
				if (index < 0) {
					index = strSongNames.length - 1;
				}
				isPlayOrStop = true;
				isLoop = false;
			} else if (btn == btnNext) {
				index++;
				index = index % strSongNames.length;
				isPlayOrStop = true;
				isLoop = false;
			} else if (btn == btnLoop) {
				isLoop = !isLoop;
			}

			if (isPlayOrStop) {
				playerThread = new Thread(new MusicRun() );
				playerThread.run();
			} else {
				songNameLabel.setText("停止播放:" + strCurrentSongName);
				btnPlay.setIcon(new ImageIcon("2.png"));
			}

		}

		@Override
		public void mousePressed(MouseEvent e) {
		}

		@Override
		public void mouseReleased(MouseEvent e) {
		}

		@Override
		public void mouseEntered(MouseEvent e) {
		}

		@Override
		public void mouseExited(MouseEvent e) {
		}

	}

	public AudioClip loadSound(String filename) {
		URL url = null;
		try {
			url = new URL("file:" + filename);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		return Applet.newAudioClip(url);
	}

	public static void main(String[] args) {
		MusicPlayer mp = new MusicPlayer();
	}

}

简单音频播放器

标签:小程序   java   音频播放器   框架   

原文地址:http://blog.csdn.net/xionghui2013/article/details/46482955

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!