简单音频播放器

注意:按钮图片和音频文件(*.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();
	}

}

时间: 2024-11-04 05:35:09

简单音频播放器的相关文章

IOS开发之简单音频播放器

今天第一次接触IOS开发的UI部分,之前学OC的时候一直在模拟的使用Target-Action回调模式,今天算是真正的用了一次.为了熟悉一下基本控件的使用方法,和UI部分的回调,下面开发了一个特别简易的音频播放器,来犒劳一下自己这一天的UI学习成果.在用到UI的控件时如果很好的理解之前博客在OC中的Target-Action回调模式,感觉控件的用法会很顺手.下面的简易播放器没有用到多高深的技术,只是一些基本控件和View的使用. 话不多说简单的介绍一下今天的音频播放器.在播放器中我们用到了UIP

WIN32下使用DirectSound接口的简单音频播放器(支持wav和mp3)

刚好最近接触了一些DirectSound,就写了一个小程序练练手,可以用来添加播放基本的wav和mp3音频文件的播放器.界面只是简单的GDI,dxsdk只使用了DirectSound8相关的接口. DirectSound的使用步骤很简单 首先你要创建一个DirectSound8设备对象 1 HRESULT DirectSoundCreate8( 2 LPCGUID lpcGuidDevice, 3 LPDIRECTSOUND8 * ppDS8, 4 LPUNKNOWN pUnkOuter 5 )

简单mp3音频播放器的实现

本篇主要介绍使用Mediaplayer实现mp3简易音乐播放器,程序运行界面如下 下面是代码实现,因为代码比较简单,注释已经比较明确了. public class PlayActivity extends Activity implements OnClickListener { private EditText filenameText; // 音频播放的主要类 private MediaPlayer mediaPlayer; private String filename; // 记录播放位

最简单的基于FFMPEG+SDL的音频播放器:拆分-解码器和播放器

本文补充记录<最简单的基于FFMPEG+SDL的音频播放器>中的两个例子:FFmpeg音频解码器和SDL音频采样数据播放器.这两个部分是从音频播放器中拆分出来的两个例子.FFmpeg音频解码器实现了视频数据到PCM采样数据的解码,而SDL音频采样数据播放器实现了PCM数据到音频设备的播放.简而言之,原先的FFmpeg+SDL音频播放器实现了: 音频数据->PCM->音频设备 FFmpeg音频解码器实现了: 音频数据->PCM SDL音频采样数据播放器实现了: PCM->

最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)

简介 之前做过一个简单的音频播放器:<最简单的基于FFMPEG+SDL的音频播放器>,采用的是SDL1.2.前两天刚把原先做的<最简单的基于FFMPEG+SDL的视频播放器>更新采用了SDL2.0,于是顺手也把音频播放器更新成为SDL2.0. SourceForge项目主页:https://sourceforge.net/projects/simplestffmpegaudioplayer/ 完整工程下载地址:http://download.csdn.net/detail/leix

Android通过意图使用内置的音频播放器

如果实现一个音频文件的播放,那么在应用程序中提供播放音频文件功能的最简单的方式是利用内置的"Music(音乐)"应用程序的功能--即使用系统自带的或已安装好的音乐播放器来播放指定的音频文件. 本例比较简单,下面直接给出源代码: 布局文件activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http:/

OCiOS开发:音频播放器 AVAudioPlayer

简单介绍 AVAudioPlayer音频播放器可以提供简单的音频播放功能.其头文件包括在AVFoudation.framework中. AVAudioPlayer未提供可视化界面,须要通过其提供的播放控制接口自行实现. AVAudioPlayer仅能播放本地音频文件,并支持以下格式文件:.mp3..m4a..wav..caf..aif?. 经常用法 初始化方法 // 1.NSURL 它仅仅能从file://格式的URL装入音频数据,不支持流式音频及HTTP流和网络流. - (id)initWit

Android——简单音乐播放器

使用MediaPlayer做的简单音乐播放器,更多内容请到百度经验查看   http://jingyan.baidu.com/article/60ccbceb63452364cab197f1.html <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:l

Android 实现简单音乐播放器(二)

在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我将解析MusicPlayer的功能实现,就讲一些主要的点和有趣的细节,结合MainActivity.java代码进行说明(写出来可能有点碎……一向不太会总结^·^). 一.功能菜单 在MusicPlayer中,我添加了三个菜单: search(搜索手机中的音乐文件,更新播放列表). clear(清除播放列表……这个功能是最初加进去的,后来改进之后,已经没什么实际意义). exit(退出). menu