//此程序实现mid.wav格式音频文件的播放

//暂时只实现了单曲播放功能

//选项>其它功能会后继添加

//Version 1.0

// @author Zha_yongchun

// Email:1729465178@qq.com

package com.music; ​

import java.awt.event.*;

import java.io.File;

import java.io.IOException;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.SourceDataLine;

import javax.sound.sampled.UnsupportedAudioFileException;

import javax.swing.*;

import java.awt.*;

public class playAudio extends JFrame implements ActionListener

{

static String filePath =null;//播放文件路径

JButton btPause, btExit, btPlay, btLoop,

btStop;

JPanel panel;

JMenuBar mb;

JMenu menu;

JMenuItem menuMi1,menuMi2;

JTextArea textarea;

public static void main(String[] args) {

playAudio pa = new playAudio();

}

// 构造方法

public playAudio() {

// 定义按钮

btPause = new JButton("Pause");

btPause.setFont(new Font("Chaparral Pro

Light",Font.BOLD,15));

btExit = new JButton("EXIT");

btExit.setFont(new Font("Chaparral Pro

Light",Font.BOLD,15));

btPlay = new JButton("PLAY");

btPlay.setFont(new Font("Chaparral Pro

Light",Font.BOLD,15));

btLoop = new JButton("LOOP");

btLoop.setFont(new Font("Chaparral Pro

Light",Font.BOLD,15));

btStop = new JButton("STOP");

btStop.setFont(new Font("Chaparral Pro

Light",Font.BOLD,15));

//定义文本域

textarea=new JTextArea("Import music

fileDialog...");

textarea.setEditable(false);

textarea.setFont(new Font("Chaparral Pro

Light",Font.HANGING_BASELINE,20));

//定义菜单栏

mb=new JMenuBar();

menu=new JMenu("File");

menu.setMnemonic('F');

menu.setFont(new Font("Chaparral Pro

Light",Font.HANGING_BASELINE,15));

menuMi1=new JMenuItem("Open");

menuMi1.setMnemonic('O');

menuMi1.setFont(new Font("Chaparral Pro

Light",Font.HANGING_BASELINE,15));

menuMi2=new JMenuItem("Exit");

menuMi2.setMnemonic('E');

menuMi2.setFont(new Font("Chaparral Pro

Light",Font.HANGING_BASELINE,15));

//定义面板

panel = new JPanel();

// 添加面板组件

panel.add(btPlay);

panel.add(btLoop);

panel.add(btPause);

panel.add(btStop);

panel.add(btExit);

//添加菜单组件

mb.add(menu);

menu.add(menuMi1);

menu.add(menuMi2);

// 添加事件监听

btPause.addActionListener(this);

btPause.setActionCommand("pause");

btExit.addActionListener(this);

btExit.setActionCommand("exit");

btPlay.addActionListener(this);

btPlay.setActionCommand("play");

btLoop.addActionListener(this);

btLoop.setActionCommand("loop");

btStop.addActionListener(this);

btStop.setActionCommand("stop");

menuMi1.addActionListener(this);

menuMi1.setActionCommand("open");

menuMi2.addActionListener(this);

menuMi2.setActionCommand("exit");

// 流式布局

//this.setLayout(new GridLayout(2,

1,5,0));

this.setJMenuBar(mb);

this.add(textarea);

this.add(panel,BorderLayout.SOUTH);

// 显示窗口

this.setIconImage(new

ImageIcon("image/music.JPG").getImage());

this.setTitle("MusicPlayer");// 设置用户界面

this.setSize(400, 150);// 设置窗口大小,数字代表像素

this.setLocation(300, 260);// 设置窗体位置

this.setResizable(false);// 设置窗体大小是否可调整

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭进程

this.setVisible(true);// true 显示,false不显示

}

// 事件监听

public void actionPerformed(ActionEvent e)

{

String text="";//文件路径载体

Audio player = new

Audio(filePath);//初始化播放器

// 打开

if (e.getActionCommand().equals("open"))

{

// 打开选择文件选择歌曲

FileDialog fd = new

FileDialog(this,"Chooes music", FileDialog.LOAD);

fd.setVisible(true); //

显示选择框

filePath = fd.getDirectory()

+fd.getFile(); // 文件名称=获取此文件对话框的目录+文件名

if(filePath!=null)

System.out.println(text="filePath is: "+filePath);

else

System.out.println(text="Couldn't open file");

}

// 退出

else if (e.getActionCommand().equals("exit"))

{

player.interrupt();

System.out.println(text="Exit program!");

System.exit(0);

}

// 播放

else if (e.getActionCommand().equals("play"))

{

if(filePath!=null){

player.start();

System.out.println(text="Play music: "+filePath);

}else

System.out.println(text="There is not any file!");

}

// 循环

else if (e.getActionCommand().equals("loop"))

{

if(filePath!=null){

while(!player.isAlive()){

try{

player.start();

System.out.println(text="Loop playing"+filePath);

}catch(Exception e1){

System.err.println(text="Loop Error");

}

}

}else

System.out.println(text="There is not any file!");

}

// 停止

else if (e.getActionCommand().equals("stop"))

{

player.interrupt();

System.out.println(text="Stop playing!");

}

//暂停

else

if(e.getActionCommand().equals("pause")){

player.interrupt();

System.out.println(text="Pause playing!");

}

this.textarea.setText(text);

}

}

//Audio类实现声音流播放 1.定义音频文件的变量,

//变量需要: 一个用于存储音频文件对象名字的String对象 filename;

//2.构造函数,初始化filename

//3.线程运行函数重写

class Audio extends Thread {

// 1.定义音频文件的变量,变量需要:一个用于存储音频文件对象名字的String对象

filename

private String filename;

// 2.构造函数,初始化filename

public Audio(String filename) {

this.filename = filename;

}

// 3.线程运行函数重写

public void run() {

// 1.定义一个文件对象引用,指向名为filename那个文件

File sourceFile = new File(filename);

// 定义一个AudioInputStream用于接收输入的音频数据

AudioInputStream audioInputStream = null;

// 使用AudioSystem来获取音频的音频输入流

try {

audioInputStream =

AudioSystem.getAudioInputStream(sourceFile);

} catch (UnsupportedAudioFileException e)

{

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

// 4,用AudioFormat来获取AudioInputStream的格式

AudioFormat format =

audioInputStream.getFormat();

// 5.源数据行SoureDataLine是可以写入数据的数据行

SourceDataLine auline = null;

// 获取受数据行支持的音频格式DataLine.info

DataLine.Info info = new

DataLine.Info(SourceDataLine.class, format);

// 获得与指定info类型相匹配的行

try {

auline = (SourceDataLine)

AudioSystem.getLine(info);

//

打开具有指定格式的行,这样可使行获得所有所需系统资源并变得可操作

auline.open();

} catch (LineUnavailableException e) {

e.printStackTrace();

}

// 允许某一个数据行执行数据i/o

auline.start();

// 写出数据

int nBytesRead = 0;

byte[] abData = new byte[1024];

// 从音频流读取指定的最大数量的数据字节,并将其放入给定的字节数组中。

try {

while (nBytesRead != -1)

{

nBytesRead =

audioInputStream.read(abData, 0, abData.length);

// 通过此源数据行将数据写入混频器

if (nBytesRead

>= 0)

auline.write(abData, 0, nBytesRead);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

auline.drain();

auline.close();

}

}

}

简单音频播放器java代码_Java实现简易音乐播放器相关推荐

  1. 扑克牌游戏java代码_java实现简易扑克牌游戏

    本文实例为大家分享了java实现扑克牌游戏的具体代码,供大家参考,具体内容如下 游戏功能描述 1.创建一副扑克牌: 包括四种花色:黑桃,红桃,梅花,方片 包括十三种点数:2-10,J,Q,K,A 2. ...

  2. 简易atm java代码_Java的简易ATM系统

    大纲 ATM 机系统 1.注册(账户(系统随机生成 15 位) - 密码(6位) - 余额) 2.登录 4.修改密码 3.查询余额 4.存钱 -(显示操作完成后的余额) 5.取钱 - (显示操作完成后 ...

  3. html音乐播放器样式,html5扁平化mp3音乐播放器样式代码

    特效描述:html5 扁平化mp3 音乐播放器样式.扁平风格的简易的mp3音乐播放器样式代码.html5 mp3音乐播放器 代码结构 1. 引入JS 2. HTML代码 0:00 0:00 'use ...

  4. 【Java项目实战】在线音乐播放器(从需求到产品完整解析)

    准备工作必看:[Java项目实战]在线音乐播放器(前期准备) 核心功能 登录.注册 上传音乐 删除某一个音乐信息 删除选中的音乐信息 查询音乐(包含查找指定/模糊匹配的音乐) 添加音乐到"喜 ...

  5. 【Java实战】Java实现简易音乐播放器

    作者博客地址:http://www.yooongchun.cn/ 摘要:本文使用java基础技术实现了一个可播放mid.wav格式音乐的简易音乐播放器,带UI //此程序实现mid.wav格式音频文件 ...

  6. html音乐播放器代码自动,html5 css3音乐播放器代码

    特效描述:html5 css3 音乐播放器代码.html5 css3音乐播放器代码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 标题歌手 00:00/00:00 var music ...

  7. java计算机毕业设计Vue.js音乐播放器设计与实现源码+数据库+系统+lw文档

    java计算机毕业设计Vue.js音乐播放器设计与实现源码+数据库+系统+lw文档 java计算机毕业设计Vue.js音乐播放器设计与实现源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S ...

  8. html5在线音乐列表播放器,简洁的html5 mp3列表音乐播放器代码

    特效描述:简洁的html5 mp3列表 音乐播放器代码.html5网页音乐播放器,mp3播放器,简洁音乐播放器 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 标题歌手 00:00/0 ...

  9. java计算机毕业设计Vue.js音乐播放器设计与实现源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计Vue.js音乐播放器设计与实现源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计Vue.js音乐播放器设计与实现源码+mysql数据库+系统+lw文档+部署 ...

最新文章

  1. LeetCode 316. Remove Duplicate Letters--贪心--Java,C++,Python解法
  2. 2018专业创业赛事服务平台
  3. 西南科技大学 计算机组成原理2011-2012,西南科技大学计算机组成原理2010-2011试卷A卷参考答案(2011)...
  4. 真香啊!基于SpringBoot 的CMS系统,拿去开发企业官网
  5. 8、Power Map—实例:制作独立播放的视频
  6. UGUI_UGUI事件系统简述及使用方法总结
  7. LiveVideoStackCon2021音视频技术大会北京站今日开幕!
  8. 在 .NET 6 Preview 3 ASP.NET Core 更新
  9. python restful api_用Python语言写一个restful API
  10. TCP协议 状态解析和状态统计
  11. 2.描述性统计的matlab 实现
  12. POJ 1328 —— 贪心专题【区间贪心问题】
  13. SQL Server安装下载教程
  14. Unable to connect to the server: x509: certificate is valid for问题解决
  15. 【转载】P2P镜像分发Dragonfly使用
  16. 谷歌浏览器fash弹框的设置
  17. 1788. 牛为什么过马路
  18. 2022年未来网络与通信专题讲座(南京专技人员继续教育)
  19. 攻防世界-PWN-house of grey-Linux系统文件泄漏
  20. 计算机毕业设计Python+uniapp客户拜访系统小程序(小程序+源码+LW)

热门文章

  1. 分布式追踪与监控:Skywalking
  2. jsp内置对象及其方法
  3. 【转】Windows CALLBACK 函数
  4. transform归一化处理
  5. linux子系统0x80070003错误
  6. Anroid组件化构架设计
  7. 计算机房铺什么样的地板,机房铺哪种地板好些
  8. 使用定时器按键扫描数码管制作一个可存储数据的秒表
  9. ValueError: You are trying to load a weight file containing 5 layers into a model with 9 layers.
  10. 华泰单因子测试之估值类因子(因子数据获取分析处理)