java播放pcm/mp3音频流
<dependency>
<groupId>javazoom</groupId>
<artifactId>jlayer</artifactId>
<version>1.0.1</version>
</dependency>
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import java.io.ByteArrayInputStream;
import java.nio.ByteBuffer;
/**
* 播放pcm音频
*
* @author Administrator
*/
@Slf4j
public class PcmPlayer {
private static final byte[] b = new byte[256];
private static AudioFormat.Encoding encoding;
private static AudioFormat format;
private static DataLine.Info info;
private static SourceDataLine audioLine;
public static void play(ByteBuffer byteBuffer) {
try {
if (ObjectUtil.isNull(encoding)) {
encoding = new AudioFormat.Encoding("PCM_SIGNED");
format = new AudioFormat(encoding, 16000, 16, 1, 2, 16000, false);//编码格式,采样率,每个样本的位数,声道,帧长(字节),帧数,是否按big-endian字节顺序存储
info = new DataLine.Info(SourceDataLine.class, format);
audioLine = (SourceDataLine) AudioSystem.getLine(info);
audioLine.open(format);
audioLine.start();
}
ByteArrayInputStream fis = new ByteArrayInputStream(byteBuffer.array());
while (fis.read(b) > 0) {
audioLine.write(b, 0, b.length);
}
} catch (Exception e) {
log.error("播放pcm格式音频异常", e);
}
}
public static void close() {
audioLine.close();
}
}
import javazoom.jl.player.advanced.PlaybackEvent;
import javazoom.jl.player.advanced.PlaybackListener;
import javazoom.jl.player.advanced.jlap;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
public class MP3Player {
public static void main(String[] args) {
try {
InputStream is = new FileInputStream("C:\\Users\\1\\2.mp3");// 创建音频文件的输入流对象
jlap.playMp3(is, // 创建播放器,播放音频输入流
0, // 从第50帧开始播放
10000, // 播放至第100帧
new PlaybackListener() {// 触发的监听
@Override
public void playbackStarted(PlaybackEvent arg0) {// 播放开始前触发
System.out.println("播放开始");
}
@Override
public void playbackFinished(PlaybackEvent arg0) {// 播放结束后触发
System.out.println("播放结束");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public static void play(ByteBuffer byteBuffer) {
try {
ByteArrayInputStream mp3Stream = new ByteArrayInputStream(byteBuffer.array());
jlap.playMp3(mp3Stream, // 创建播放器,播放音频输入流
0, // 从第50帧开始播放
10000, // 播放至第100帧
new PlaybackListener() {// 触发的监听
@Override
public void playbackStarted(PlaybackEvent arg0) {// 播放开始前触发
System.out.println("播放开始");
}
@Override
public void playbackFinished(PlaybackEvent arg0) {// 播放结束后触发
System.out.println("播放结束");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
touch fish