java 实现循环播放wav文件

原创 2011年01月16日 22:52:00

package com.hf.app.lucky.comm;

import java.io.File;

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

import javazoom.jlgui.basicplayer.BasicPlayerEvent;

import com.hf.app.lucky.config.DesignPanelConfigTitle;
import com.hf.app.lucky.design.DesignPanelTitle;

public class PlayerWav {

 // 播放器使用单例模式
 private static PlayerWav instace = null;

 public static PlayerWav getInstance() {
  if (instace == null) {
   instace = new PlayerWav();
  }
  return instace;
 }

 private PlayerWav() {
 }

 // PlayerCTL
 private PlayerCTL playerCTL = null;

 public PlayerCTL getPlayerCTL() {
  if (playerCTL == null) {
   playerCTL = new PlayerCTL();
  }
  return playerCTL;
 }

 // wav文件名
 private String strSongFileName = null;

 public String getSongFileName() {
  return strSongFileName;
 }

 public void setSongFileName(String szSongFileName) {
  if (strSongFileName == null) {
   strSongFileName = new String(szSongFileName);
  } else {
   strSongFileName = szSongFileName;
  }
 }

 public class PlayerCTL {
  File wavFile = null;

  // 打开文件
  public void openSong(String strFileName) {
   try {
    wavFile = new File(getSongFileName());
   } catch (Exception ex) {
    ex.printStackTrace();
   }
  }

  // 播放文件
  public void play() {
   try {
    AudioInputStream ais = AudioSystem.getAudioInputStream(wavFile);
    AudioFormat af = ais.getFormat();
    SourceDataLine sdl = null;
    DataLine.Info dinfo = new DataLine.Info(SourceDataLine.class,
      af);
    sdl = (SourceDataLine) AudioSystem.getLine(dinfo);
    sdl.open(af);
    byte[] lbytes = new byte[sdl.available()];
    int lReadBytes = 0;
    sdl.start();
    while (lReadBytes != -1) {
     lReadBytes = ais.read(lbytes, 0, lbytes.length);
     if (lReadBytes > 0) {
      sdl.write(lbytes, 0, lReadBytes);
     }
    }
    
    // 是否持续播放
    // 循环播放,只有在设置为循环播放时才使用循环播放功能
    // 单次播放和不播放情况下均不进行循环动作
    DesignPanelConfigTitle designPanelConfigTitle = DesignPanelTitle
    .getInstance().getConfig();
    int nPlayType = designPanelConfigTitle.getBakSndDisType();
    switch (nPlayType) {
    case LuckyChooserConst.SND_DIS_TYPE_DISVISIBLE:
     break;
    case LuckyChooserConst.SND_DIS_TYPE_SINGLE:
     break;
    case LuckyChooserConst.SND_DIS_TYPE_LOOP:
     getPlayerCTL().openSong(getSongFileName());
     getPlayerCTL().play();
     break;
    default:
    }
   } catch (Exception ex) {
    ex.printStackTrace();
   }
  }
 }

 public void playSong(String strFilePath) {
  setSongFileName(strFilePath);
  getPlayerCTL().openSong(getSongFileName());
  getPlayerCTL().play();
 }
}

关于Java音频播放不循环和暂停、继续播放(非Android)

我使用的是MediaPlayer播放,设置其不循环播放方法为setPlaybackLoop() 需要暂停时,只需要设置setPlaybackLoop()为true,使用stop()方法,即可暂停播放 ...
  • guozhangjie1992
  • guozhangjie1992
  • 2016年11月24日 15:44
  • 854

Java切割wav音频文件

import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.MultimediaInfo; import j...
  • beiguoshaoxia
  • beiguoshaoxia
  • 2017年12月06日 14:02
  • 159

java切割wav音频文件

import it.sauronsoftware.jave.Encoder;   import it.sauronsoftware.jave.MultimediaInfo;      impor...
  • qq_24672309
  • qq_24672309
  • 2016年12月05日 12:21
  • 1093

Java实现播放Mp3的功能

这里需要导入一个jar包:jl1.0.1.jarimport java.io.BufferedInputStream; import java.io.FileInputStream;import ja...
  • qq_26641781
  • qq_26641781
  • 2017年09月25日 12:58
  • 223

java 播放 wav 声音文件

import java.io.FileInputStream; import sun.audio.AudioPlayer; import sun.audio.AudioStream; public...
  • grpideas
  • grpideas
  • 2014年08月02日 21:45
  • 7626

SDL2.0例子代码分析---循环播放wav loopwav

SDL2.0中循环播放一段声音文件 ,并且添加上注释。 /* 加载并且循环播放一个WAV文件*/ /* loopwaves.c is much more robust in handling WA...
  • yue7603835
  • yue7603835
  • 2014年12月23日 10:37
  • 2238

使用mciSendCommand循环播放音乐

方法一:最简单的方法 使用重复播放参数:MCI_DGV_PLAY_REPEAT mciSendCommand(m_nDeviceID, MCI_PLAY, MCI_DGV_PLAY_REP...
  • zhanglidn013
  • zhanglidn013
  • 2015年07月31日 23:02
  • 1593

MediaPlayer和AudioTrack播放Audio的区别与联系

转:http://blog.csdn.net/ameyume/article/details/7618820 MediaPlayer和AudioTrack播放Audio的区别与联系 播放声音可以用...
  • abcd_3344_abcd
  • abcd_3344_abcd
  • 2016年02月23日 10:48
  • 320

[译]Android音频: 如何使用AudioTrack播放一个WAV格式文件?

原文链接:Android Audio: Play a WAV file on an AudioTrack 译者注: 1. 由于这是技术文章,所以有些词句使用原文,表达更准确。 2. 由于水平有效...
  • langwang2
  • langwang2
  • 2015年12月05日 22:34
  • 644

android wav录音,停止和播放

这几天一直在做录音方面的应用,下面一个wav的录音,停止和播放。 public class AudioFileFunc {     //音频输入-麦克风     public final...
  • flamejack
  • flamejack
  • 2016年01月22日 22:38
  • 2591
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 实现循环播放wav文件
举报原因:
原因补充:

(最多只允许输入30个字)