原文来源:http://blog.csdn.net/liuzhongbing/article/details/4535402

JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。在JDK 1.3.0之前,JavaSound是一个标准的Java扩展API,但从Java 2的1.3.0版开始,JavaSound就被包含到JDK之中。由于Java有着跨平台(操作系统、硬件平台)的特点,基于JavaSound的音频处理程序(包括本文的程序)能够在任何实现了Java 1.3+的系统上运行,无需加装任何支持软件。使用JavaSound API,可以实现各种基于声音的应用,例如声音录制、音乐播放、网络电话、音乐编辑等。JavaSound API又以各种解码和合成器SPI(服务提供者接口, Service Provider Interface)为基础,实现各种音乐格式的解码与转码。在处理输入音频时,对于来自各种音频输入端口的信号,例如麦克风、CD播放器、磁带播放器等,可以在它们到达TargetDataLine之前,利用混频器控制输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。类似地,在处理输出音频时,混频器用来对一系列来自SourceDataLine的数据进行混频处理,经处理后的信号可输出到各种输出端口,例如扬声器、耳机等。SourceDataLine是一个可写入音频信号数字流的设备,例如,我们可以从一个WAV文件读取内容写入到SourceDataLine,然后再通过扬声器输出。其流程图如图17-7所示。图17-7  音频输入输入流程图为了支持mp3的播放,我们必须添加mp3的SPI支持库。首先需要下载mp3的支持库:●     官方网站:http://www.javazoom.net/●     下载页面:http://www.javazoom.net/mp3spi/sources.html●     下载地址:http://www.javazoom.net/mp3spi/sources/mp3spi1.9.4.zip●     下载文件:mp3spi1.9.4.zip将mp3spi1.9.4.zip中的三个Jar文件jl1.0.jar 、mp3spi1.9.4.jar 、tritonus_share.jar添加到当前项目中即可。下面我们来实现一个MP3音乐播放器,实现的功能是:单击【文件】à【打开】弹出文件选择对话框,将选择目录的所有mp3和wav文件加入到播放列表中,双击播放列表中的音乐文件实现音乐的播放和切换。要实现该程序,首先需要提供了一个主程序窗口,该窗口提供了各种界面组件和操作事件的控制,并包含一个音乐播放的子线程,子线程由主线程控制。因此有两个类:●     音乐播放器主程序MusicPlayer.java●     播放线程PlayThread.java
(1)音乐播放器主程序MusicPlayer.java
package com.test.audio;import java.io.File;import java.awt.BorderLayout;import java.awt.FileDialog;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Label;import java.awt.List;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.MenuShortcut;import java.awt.Panel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.SourceDataLine;public class MusicPlayer extends Frame {boolean isStop = true;// 控制播放线程boolean hasStop = true;// 播放线程状态String filepath;// 播放文件目录String filename;// 播放文件名称AudioInputStream audioInputStream;// 文件流AudioFormat audioFormat;// 文件格式SourceDataLine sourceDataLine;// 输出设备List list;// 文件列表Label labelfilepath;//播放目录显示标签Label labelfilename;//播放文件显示标签public MusicPlayer() {// 设置窗体属性setLayout(new BorderLayout());setTitle("MP3音乐播放器");setSize(350, 370);// 建立菜单栏MenuBar menubar = new MenuBar();Menu menufile = new Menu("文件");MenuItem menuopen = new MenuItem("打开", new MenuShortcut(KeyEvent.VK_O));menufile.add(menuopen);menufile.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {open();}});menubar.add(menufile);setMenuBar(menubar);// 文件列表list = new List(10);list.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {// 双击时处理if (e.getClickCount() == 2) {// 播放选中的文件filename = list.getSelectedItem();play();}}});add(list, "Center");// 信息显示Panel panel = new Panel(new GridLayout(2, 1));labelfilepath = new Label("播放目录:");labelfilename = new Label("播放文件:");panel.add(labelfilepath);panel.add(labelfilename);add(panel, "North");// 注册窗体关闭事件addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});setVisible(true);}// 打开private void open() {FileDialog dialog = new FileDialog(this, "Open", 0);dialog.setVisible(true);filepath = dialog.getDirectory();if (filepath != null) {labelfilepath.setText("播放目录:" + filepath);// 显示文件列表list.removeAll();File filedir = new File(filepath);File[] filelist = filedir.listFiles();for (File file : filelist) {String filename = file.getName().toLowerCase();if (filename.endsWith(".mp3") || filename.endsWith(".wav")) {list.add(filename);}}}}// 播放private void play() {try {isStop = true;// 停止播放线程// 等待播放线程停止System.out.print("开始播放:" + filename);while (!hasStop) {System.out.print(".");try {Thread.sleep(10);} catch (Exception e) {}}System.out.println("");File file = new File(filepath + filename);labelfilename.setText("播放文件:" + filename);// 取得文件输入流audioInputStream = AudioSystem.getAudioInputStream(file);audioFormat = audioInputStream.getFormat();// 转换mp3文件编码if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,audioFormat.getSampleRate(), 16, audioFormat.getChannels(), audioFormat.getChannels() * 2,audioFormat.getSampleRate(), false);audioInputStream = AudioSystem.getAudioInputStream(audioFormat,audioInputStream);}// 打开输出设备DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat,AudioSystem.NOT_SPECIFIED);sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);sourceDataLine.open(audioFormat);sourceDataLine.start();// 创建独立线程进行播放isStop = false;Thread playThread = new Thread(new PlayThread());playThread.start();} catch (Exception e) {e.printStackTrace();}}public static void main(String args[]) {new MusicPlayer();}}在该主程序中添加一个入口主函数main()来启动该主程序即可。
(2)播放线程PlayThread.java该程序的代码如下:class PlayThread extends Thread {byte tempBuffer[] = new byte[320];public void run() {try {int cnt;hasStop = false;// 读取数据到缓存数据while ((cnt = audioInputStream.read(tempBuffer, 0,tempBuffer.length)) != -1) {if (isStop)break;if (cnt > 0) {// 写入缓存数据sourceDataLine.write(tempBuffer, 0, cnt);}}// Block等待临时数据被输出为空sourceDataLine.drain();sourceDataLine.close();hasStop = true;} catch (Exception e) {e.printStackTrace();System.exit(0);}}}

(3)运行MP3音乐播放器

完成以上代码后,即可运行主程序MusicPlayer,就会显示如图17-9示的窗口:

图17-9  音乐播放器主窗口

单击【文件】à【打开】,就会弹出如图17-10所示的打开窗口:

图17-10  选择文件

选中某一个音乐文件后,单击【打开】按钮,就会将该目录下的所有mp3和wav音乐文件添加到播放器的播放列表中,如图17-11所示。

图17-11  播放列表

双击该播放列表中的音乐文件,就会开始播放音乐了。在音乐播放的过程中,你还可以随时双击某一个文件来停止当前的音乐播放,并开始播放新的音乐文件。

【转】使用Java实现MP3音乐播放器相关推荐

  1. 使用Java实现MP3音乐播放器

    原文链接:http://www.cnblogs.com/haoxia/archive/2009/06/03/1495419.html 使用Java实现MP3音乐播放器 JavaSound是一个小巧的低 ...

  2. Android应用开发--MP3音乐播放器滚动歌词实现

    Android应用开发--MP3音乐播放器滚动歌词实现 2013年6月2日  简.美音乐播放器开发记录 -----前话 有网友给我博客评论说,让我借鉴好的Android代码,代码贴出来的时候最好整体先 ...

  3. 使用Java实现MP3音乐播放

    使用Java实现MP3音乐播放 Java SE自带的API中缺少对MP3格式音频文件的支持,想要使用Java代码播放MP3需要第三方库.JLayer-MP3 library是一款Java语言编写的开源 ...

  4. Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51448597 项目源码(打赏5积分请点这边):http://download.csdn ...

  5. Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现NetM ...

  6. Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...

  7. java课程设计-音乐播放器_java课程设计---java音乐播放器.doc

    java课程设计---java音乐播放器 Java程序设计课程设计 题 目 java音乐播放器 学 号: 姓 名: 指导教师: 完成时间: 目 录 第一章 系统概述3 1.需求分析3 1.1任务目的: ...

  8. Android应用开发--MP3音乐播放器Service实现

    Android应用开发--MP3音乐播放器Service实现 2013年5月29日简.美音乐播放器开发记录 让网友们久等啦,关于简.美音乐播放器的开发,最重要的Service类总算是要发博了.关于An ...

  9. Android应用开发 MP3音乐播放器滚动歌词实现

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Andr ...

最新文章

  1. Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)
  2. 初学PHP:用post传递checkbox
  3. dedecms channel php,织梦标签代码Channel标记怎么用
  4. 学python可以做什么职业好-业余学Python能做什么?对职业发展有什么帮助?
  5. kali linux解密栅栏密码,最详细bugku加密小白解法---持续更新!
  6. java sax解析xml_【转】java使用sax解析xml文件
  7. java对象布局查看工具_Java 查看对象布局工具 - Java Object Layout
  8. 设置mybb论坛后台显示为中文
  9. C# UDP 发送 接收
  10. 常用的java开发框架_Java开发中常用框架
  11. 计算机应用基础配书光盘,计算机应用基础配书光盘系统客户端
  12. 百度“有啊”困局之源:流量到交易的转化
  13. 我的大脑越来越喜欢那些碎片化的、不用思考的文章了!
  14. 数据库实验一 熟悉数据库管理系统环境及SQL定义语言
  15. DSPE-PEG-cRGD,磷脂-聚乙二醇-环肽RGD,靶向穿膜肽RGD环肽供应
  16. 有一个已经排好序的数组,现输入一个数,要求按原来的规律将它插入数组中。——C与C++实现
  17. win10/win1桌面图标锁定,防止桌面图标移动
  18. 大数据实践:数据指标中心的建设思路
  19. 李子柒——成功的网络视频制作人及其营销分析
  20. MIT6.828课程JOS在macOS下的环境配置

热门文章

  1. [Emuelec]在gamelist.xml中,为中文游戏名生成拼音字母
  2. Vue自定义InputNumber 计数器组件
  3. Harmony的UI基础
  4. 李小龙的重要年表摘要
  5. 【learning】二分图最大匹配的König定理
  6. Figma如何创建蒙版,小白教程
  7. AI(8)---人工智能发展的关键技术
  8. mybatis三种起别名的方法
  9. 美国经济危机日趋严重,科技行业裁员已达10万
  10. 博客搬家:hntea.xyz