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();
        }
    }
}
posted @ 2024-04-30 11:26  meow_world  阅读(161)  评论(0)    收藏  举报