Bootstrap

Java播放音频

Java播放音频

在写完Java播放wav后,我又对代码进行了优化,支持了各种种类音频。
基础功能

  1. 开始
  2. 暂停
  3. 继续
  4. 停止

本次添加功能:

  1. 获取音频进度
  2. 跳过某一段
  3. 从某一段开始播放
  4. 各种音频格式支持

本次改变

  1. 播放方式改变
  2. 修复部分bug
  3. 增加注释

本次未修复的问题

  1. 部分安全方面的问题尚未攻克
  2. protected变量,不够安全

建议使用本次更新代替原来版本。

java格式

wav_improved.java

package 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.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;


public class wav_improved
{
   
	protected String path="audio.wav";
	protected AudioFormat format=null;
	protected AudioInputStream aistream=null;
	protected float sampleRate=0;
	protected float framelength=0;
	protected DataLine.Info datalineinfo=null;
	protected SourceDataLine dataline=null;
	protected int played=0;
	protected boolean _set=false;
	protected int length=0;
	protected byte[] bytes=new byte[512];
	public wav_improved()
	{
   
	}
	public boolean set(String p)  //设置播放路径
	{
   
		if(_set)  //如果已经被初始化了(缓冲区已经有音频准备播放了)
		{
   
			boolean stop_playing_return=stop_playing();  //关闭当前缓冲区
			if(!stop_playing_return)  //如果失败
			{
   
				return false;
			}
		}
		path=p;  //更新音频路径
		try
		{
   
			//初始化音频
			aistream=AudioSystem.getAudioInputStream(new File(path));
			format=aistream.getFormat();
			sampleRate=format.getSampleRate();
			framelength=aistream.getFrameLength();
			datalineinfo=new DataLine.Info(SourceDataLine.class, format);
			dataline=(SourceDataLine)AudioSystem.getLine(datalineinfo);
		}
		catch(LineUnavailableException err)
		{
   
			System.out.println("LineUnavailableException");
			return false;
		}
		catch(UnsupportedAudioFileException err)
		{
   
			System.out.println("UnsupportedAudioFileException");
			return false;
		}
		catch(IOException err)
		{
   
			System.out.println("IOException");
			err.printStackTrace();
			return false;
		
;