资源简介
自己写的java音频播放实例
代码片段和文件信息
package com.test;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.sound.sampled.SourceDataLine;
import java.util.Date;
import java.io.IOException;
import java.io.File;
public class BasicPlayer implements Runnable{
//音频输入流
private AudioInputStream stream = null;
//音频格式
private AudioFormat format = null;
//源数据行
private SourceDataLine sourceDataLine;
//缓冲区大小
private static final int BUFFER_SIZE=1024*50;
private File fileName;
//能否播放
public static boolean isActive=true;
//是否停止
public static boolean isStop=true;
/**
* 构造器
* @param fileName 音频文件
*/
public BasicPlayer(File fileName) {
this.fileName=fileName;
}
/**
* 播放音频文件
*/
public void play(){
try {
//从提供的 File 获得音频输入流
stream=AudioSystem.getAudioInputStream(fileName);
//获得此音频输入流中声音数据的音频格式
format=stream.getFormat();
//音频编码转换
if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED //音频编码技术
format.getSampleRate() //每秒的样本数
16 //每个样本的位数
format.getChannels() //声道数
format.getChannels() * 2 //每帧的字节数
format.getSampleRate() //每秒的帧数
false //指示是否以big-endian字节顺序存储单个样本中的数据(false 意味着 little-endian)
);
//格式化音频输入流
stream = AudioSystem.getAudioInputStream(format stream);
}
//获得源数据行
sourceDataLine=getDataLine(format);
//允许数据行执行数据 I/O操作
sourceDataLine.start();
int inBytes=0;
byte[] audioData=new byte[BUFFER_SIZE];
BasicPlayer.isStop=false;
Date date=new Date();
System.out.println(“开始时间:“+date.getMinutes()+“:“+date.getSeconds());
while(inBytes!=-1){
//判断能否播放
if(BasicPlayer.isActive){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(“处于播放状态“);
//从音频输入流读取一定数量的字节,并将其存储在缓冲区数组audioData中
inBytes = stream.read(audioData 0 BUFFER_SIZE);
if (inBytes >= 0) {
//通过此源数据行将音频数据写入混频器
int outBytes = sourceDataLine.write(audioData 0 inBytes);
}
}else{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(“处于暂停状态“);
}
}
date=new Date();
System.out.println(“结束时间:“+date.getMinutes()+“:“+date.getSeconds());
BasicPlayer.isStop=true;
sourceDataLine.drain();
sourceDataLine.stop();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedAudioFileException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finall
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2008-01-22 15:16 javaSound
文件 4309 2008-01-22 15:13 javaSound\BasicPla
文件 1120 2008-01-22 14:59 javaSound\Pla
文件 848 2008-01-22 15:02 javaSound\Test.java
----------- --------- ---------- ----- ----
6277 4
- 上一篇:ffmpeg-3.1.2-1.2.jar
- 下一篇:java 实现旋转的八卦
评论
共有 条评论