soundplay.java

来自「这是我们专业的课程设计」· Java 代码 · 共 100 行

JAVA
100
字号
package Sound;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;

import Commen.BufferStream;

public class SoundPlay extends Thread {

	AudioFormat audioFormat = null;
	SourceDataLine sourceDataLine = null;
	DataLine.Info dataLineInfo = null;
	BufferStream bufferStream = null;
	boolean isPlaying = false;

	public SoundPlay(byte[] buffer) {
		try {
			bufferStream = new BufferStream(15000);
			audioFormat = new AudioFormat(20000, 16, 2, true, true);
			bufferStream.puts(buffer);
			dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat);
			sourceDataLine = (SourceDataLine) (AudioSystem
					.getLine(dataLineInfo));
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public SoundPlay() {
		try {
			bufferStream = new BufferStream(15000);
			audioFormat = new AudioFormat(20000, 16, 2, true, true);
			dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat);
			sourceDataLine = (SourceDataLine) (AudioSystem
					.getLine(dataLineInfo));
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public void StopPlaying() {
		try {
			System.out.println("StopPlaying");
			isPlaying = false;
			sourceDataLine.stop();
			sourceDataLine.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public void StartPlaying() {
		try {
			System.out.println("StartPlaying");
			isPlaying = true;
			sourceDataLine.open(audioFormat, sourceDataLine.getBufferSize());
			sourceDataLine.start();
			super.start();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public void Append(byte[] add) {
		synchronized (bufferStream) {
			bufferStream.puts(add);
		}
	}

	public void run() {// 从流中读 写入管子 写入管子就是放音的过程
		try {
			byte[] buffer;
			while (isPlaying) {
				synchronized (bufferStream) {
					buffer = bufferStream.gets();
				}
				// System.out.println(buffer == null);
				if (buffer == null)// 缓冲区里没有东西
					continue;
				sourceDataLine.write(buffer, 0, buffer.length);
			}
			System.out.println("StopPlaying");
			isPlaying = false;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public boolean IsPlaying() {
		return isPlaying;
	}

	public int Remain() {
		return bufferStream.Remain();
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?