• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: Java
  • 标签: javaSound  

资源简介

自己写的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\BasicPlayer.java

     文件       1120  2008-01-22 14:59  javaSound\Player.java

     文件        848  2008-01-22 15:02  javaSound\Test.java

----------- ---------  ---------- -----  ----

                 6277                    4


评论

共有 条评论

相关资源