想使用开源的jlayer编个可以单曲循环播放mp3的程序,怎么实现?目前只使用了下面三个类,
javazoom.jl.player.advanced.AdvancedPlayer
javazoom.jl.player.advanced.PlaybackListener
javazoom.jl.player.advanced.PlaybackEvent
javazoom.jl.player.advanced.AdvancedPlayer是主要类,有播放,停止,接受输入流等方法,
javazoom.jl.player.advanced.PlaybackListener是监听器,用于监听javazoom.jl.player.advanced.PlaybackEvent事件,可获得播放开始和播放结束两个事件,并可在监听器提供的两个方法内做相应处理,目前单曲播放可以,可是单曲循环播放怎么实现,弄了好久了,都不行,是否还需要其他的类?jmf可以解决轻松实现循环播放,可是我嫌它麻烦,需要安装,所以想用jlayer来实现。
javazoom.jl.player.advanced.AdvancedPlayer
javazoom.jl.player.advanced.PlaybackListener
javazoom.jl.player.advanced.PlaybackEvent
javazoom.jl.player.advanced.AdvancedPlayer是主要类,有播放,停止,接受输入流等方法,
javazoom.jl.player.advanced.PlaybackListener是监听器,用于监听javazoom.jl.player.advanced.PlaybackEvent事件,可获得播放开始和播放结束两个事件,并可在监听器提供的两个方法内做相应处理,目前单曲播放可以,可是单曲循环播放怎么实现,弄了好久了,都不行,是否还需要其他的类?jmf可以解决轻松实现循环播放,可是我嫌它麻烦,需要安装,所以想用jlayer来实现。
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.SourceDataLine;public class JLayerTest {
public static void main(String[] args) {
AudioInputStream din = null;
try {
File file = new File("f:/download/hyrz-gd.mp3");
AudioInputStream in = AudioSystem.getAudioInputStream(file); /*
* 取得音频输入流的格式,将其解码为可用的mp3编码格式
*/
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(),
16,
baseFormat.getChannels(),
baseFormat.getChannels() * 2,
baseFormat.getSampleRate(),
false); /*
* 使用得到的mp3编码格式,对音频输入流进行解码,得到一个新的可识别的mp3编码格式的音频输入流
*/
din = AudioSystem.getAudioInputStream(decodedFormat, in);
/*
* 连接音频设备,打开数据线路
*/
DataLine.Info info = new DataLine.Info( SourceDataLine.class,decodedFormat);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
if (line != null) {
line.open(decodedFormat);
/*
* 一旦打开线路,我们得实现一个缓冲策略来从输入流挖掘数据到我们的输出线路,即音频设备。
* 注意,这就像是在写一个复制两个文件的缓冲策略,这个技巧不一定只用在音频传输。
*/
byte[] data = new byte[4096]; /*
* 开始
*/
line.start();
int nBytesRead;
while ((nBytesRead = din.read(data, 0, data.length)) != -1) {
line.write(data, 0, nBytesRead);
} /*
* 停止
*/
line.drain();
line.stop();
line.close();
din.close();
} } catch (Exception e) {
e.printStackTrace();
} finally {
if (din != null) {
try {
din.close();
} catch (IOException e) {
}
}
}
}
}
这是另一种实现播放mp3的方法,可是没实现单曲循环,有高手来指点一下。
这个方案用到了3个包
mp3spi1.9.4.jar
jl1.0.jar
tritonus_share.jar
package cn.dyc.opensource.jlayer.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.DataLine;
import javax.sound.sampled.SourceDataLine;public class JLayerTest {
public static void main(String[] args) {
AudioInputStream din = null;
try {
File file = new File("f:/download/hyrz-gd.mp3");
AudioInputStream in = AudioSystem.getAudioInputStream(file); /*
* 取得音频输入流的格式,将其解码为可用的mp3编码格式
*/
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(),
16,
baseFormat.getChannels(),
baseFormat.getChannels() * 2,
baseFormat.getSampleRate(),
false); /*
* 使用得到的mp3编码格式,对音频输入流进行解码,得到一个新的可识别的mp3编码格式的音频输入流
*/
din = AudioSystem.getAudioInputStream(decodedFormat, in);
/*
* 连接音频设备,打开数据线路
*/
DataLine.Info info = new DataLine.Info( SourceDataLine.class,decodedFormat);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
if (line != null) {
line.open(decodedFormat);
/*
* 一旦打开线路,我们得实现一个缓冲策略来从输入流挖掘数据到我们的输出线路,即音频设备。
* 注意,这就像是在写一个复制两个文件的缓冲策略,这个技巧不一定只用在音频传输。
*/
byte[] data = new byte[4096]; /*
* 开始
*/
line.start();
int nBytesRead;
while ((nBytesRead = din.read(data, 0, data.length)) != -1) {
line.write(data, 0, nBytesRead);
} /*
* 停止
*/
line.drain();
line.stop();
line.close();
din.close();
} } catch (Exception e) {
e.printStackTrace();
} finally {
if (din != null) {
try {
din.close();
} catch (IOException e) {
}
}
}
}
}
这是另一种实现播放mp3的方法,可是没实现单曲循环,有高手来指点一下。
这个方案用到了3个包
mp3spi1.9.4.jar
jl1.0.jar
tritonus_share.jar格式不好看,重新发