⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testbase.java

📁 java音乐播放器。 如果音乐文件不在默认的music目录下
💻 JAVA
字号:
package test;
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.LineUnavailableException;
import	javax.sound.sampled.SourceDataLine;
import	javax.sound.sampled.DataLine;

public class TestBase implements Runnable {
  private static final int BUFFER_SIZE = 64000;
  private String fileToPlay = "test.mp3";
  private boolean pause = false;
  private boolean stop = false;
  private static boolean threadExit = false;
  private static boolean stopped = true;
  private static boolean paused = false;
  private static boolean playing = false;
  public static Object synch = new Object();
  private Thread playerThread = null;

  public TestBase() {
   }

  public void run() {
    while (! threadExit)  {
     waitforSignal();
     if (! stopped)
          playMusic();
     }
  }

  public void endThread() {
     threadExit = true;
     synchronized(synch) {
        synch.notifyAll();
        }
     try {
        Thread.sleep(500);
        } catch (Exception ex) {}
  }

 public void waitforSignal() {
   try {
        synchronized(synch) {
           synch.wait();
            }
        } catch (Exception ex) {}
 }

  public void play() {
   if ((!stopped) || (paused)) return;

   if (playerThread == null)  {
     playerThread = new Thread(this);
     playerThread.start();
     try {
         Thread.sleep(500);
         } catch (Exception ex) {}
    }

    synchronized(synch) {
      stopped = false;
      synch.notifyAll();
     }
  }



  public void setFileToPlay(String fname) {
   fileToPlay = fname;
  }

  public void playFile(String fname) {

    setFileToPlay(fname);
    play();
  }

  public void playMusic() {
      byte[]	audioData = new byte[BUFFER_SIZE];
      AudioInputStream	ais = null;
      SourceDataLine  line = null;
      AudioFormat baseFormat = null;
      try  {
	ais = AudioSystem.getAudioInputStream(new File (fileToPlay));
      }
      catch (Exception e) {
            }

      if (ais != null) {
      baseFormat = ais.getFormat();
      line = getLine(baseFormat);
     

      if (line == null) {
           AudioFormat	decodedFormat = new AudioFormat(
			AudioFormat.Encoding.PCM_SIGNED,
			baseFormat.getSampleRate(),
			16,
			baseFormat.getChannels(),
			baseFormat.getChannels() * 2,
			baseFormat.getSampleRate(),
			false);
            ais = AudioSystem.getAudioInputStream(decodedFormat, ais);
            line = getLine(decodedFormat);
         }
       }
       if (line == null) return;  // 不能播放此文件

       playing = true;
       line.start();
       int inBytes = 0;
       while ((inBytes != -1) && (!stopped) && (!threadExit))  {
			try  {
				inBytes = ais.read(audioData, 0, BUFFER_SIZE);
			}
			catch (IOException e)  {
				e.printStackTrace();
			}

			if (inBytes >= 0) {
				int	outBytes = line.write(audioData, 0, inBytes);
			}

                         if (paused)
                             waitforSignal();
          	}
        line.drain();
        line.stop();
      line.close();
      playing = false;
     }

  public void stop() {
    if(paused) return;
       stopped = true;
    waitForPlayToStop();
  }

  public void waitForPlayToStop() {
     while( playing)
     try {
       Thread.sleep(500);
       } catch (Exception ex) {}
  }

  public void pause() {
    if (stopped) return;
    synchronized(synch) {
       paused = !paused;
       synch.notifyAll();
      }
  }

  private SourceDataLine getLine(AudioFormat audioFormat)  {
     SourceDataLine res = null;
  	DataLine.Info	info = new DataLine.Info(
			SourceDataLine.class,
			audioFormat);
		try  {
			res = (SourceDataLine) AudioSystem.getLine(info);
			res.open(audioFormat);
		}
		catch (Exception e) {

		}
      return res;
  }



}

⌨️ 快捷键说明

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