音乐播放器java源代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package com.ding.player;

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.SourceDataLine;

public class Player {

private String path;//文件路径

private String name;//文件名称

private AudioFormat audioFormat;//播放格式

private AudioInputStream audioInputStream;//音乐播放输入流

private SourceDataLine sourceDataLine;// 播放设备

private boolean isStop = false;// 播放停止标志

/**

* 创建对象时需要传入播放路径及文件名称

* @param path

* @param name

*/

public Player(String path ,String name) {

this.path = path;

= name;

}

/**

* 播放音乐

*/

public void play() {

File file = new File(path + name);

try {

//获取音乐播放流

audioInputStream = AudioSystem.getAudioInputStream(file);

//获取播放格式

audioFormat = audioInputStream.getFormat();

/*System.out.println("取样率:"+ audioFormat.getSampleRate());

Map map = audioFormat.properties();

Iterator it = map.entrySet().iterator();

while(it.hasNext()) {

Map.Entry m = (Entry) it.next();

System.out.println(m.getKey()+":"+m.getValue());

}*/

//其它格式音乐文件处理

if(audioFormat.getEncoding() !=

AudioFormat.Encoding.PCM_SIGNED) {

audioFormat = new

AudioFormat(AudioFormat.Encoding.PCM_SIGNED, audioFormat.getSampleRate(), 16, audioFormat.getChannels(), audioFormat.getChannels()*2,

audioFormat.getSampleRate(), audioFormat.isBigEndian());

audioInputStream =

AudioSystem.getAudioInputStream(audioFormat, audioInputStream);

}

//打开输出设备

dataLineInfo = new

(SourceDataLine.class,

audioFormat,AudioSystem.NOT_SPECIFIED);

sourceDataLine = (SourceDataLine)

AudioSystem.getLine(dataLineInfo);

sourceDataLine.open(audioFormat);

sourceDataLine.start();

//启动播放线程

new Thread() {

@Override

public void run() {

try {

int n = 0;

byte tempBuffer[] = new byte[320];

while(n != -1) {

//停止播放入口,如果isStop被置为真,结束播放

if(isStop) break;

//将音乐输入流的数据读入tempBuffer缓存

n = audioInputStream.read(tempBuffer,0 , tempBuffer.length);

if(n>0) {

//将缓存数据写入播放设备,开始播放

sourceDataLine.write(tempBuffer, 0, n);

}

}

audioInputStream.close();

sourceDataLine.drain();

sourceDataLine.close();

} catch (IOException e) {

e.printStackTrace();

throw new RuntimeException();

}

}

}.start();

} catch (Exception e) {

e.printStackTrace();

System.exit(0);

throw new RuntimeException();

相关文档
最新文档