Java代码操作音乐


一、 jlGui 介绍

 jlGui is a Music Player application for the Java™ Platform. It supports MP3OGG Vorbis,FLACMONKEY's AUDIOWAVAIFF, AU and SPEEX audio formats. Front-end is WinAmp skins 2.0 compliant. That's why one could say that jlGui is a Java WinAmp clone. You can select your own skin even with the WebStart launcher. As jlGui is written in Java, it will run on Win32, Linux, Solaris, MAC ... operating systems.

jlGui is an open source project licensed under LGPL. Anyone can add his contribution or use jlGui classes for it's own project/solution. Adding a new audio format support is as easy as copy/paste the matching JAVA codec (SPI) to CLASSPATH. Learn more in developer guide.

<!--播放音乐-->
<!-- https://mvnrepository.com/artifact/com.googlecode.soundlibs/basicplayer -->
<dependency>
    <groupId>com.googlecode.soundlibs</groupId>
    <artifactId>basicplayer</artifactId>
    <version>3.0.0.0</version>
</dependency>

<!--日志-->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.0-alpha0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>2.0.0-alpha0</version>
    <scope>test</scope>
</dependency>

 

二、使用jlGui播放音乐 

public static void main(String[] args) throws InterruptedException, BasicPlayerException, IOException {
    // 1. 播放网络音乐
    String url = "https://m8.music.126.net/20190702225325/d18b7fbf5c36d0b3c12c7c80603f3799/ymusic/918c/1958/7d87/022d7d76c923b1caaca6e30ca47d0f69.mp3";
    //playOnLine(url);

    String path = "F:/Test/test.mp3";
    // 2. 通过文件
    //playByFile(new File(path));

    // 3. 通过 IO
    UrlResource urlResource = new UrlResource("https://m8.music.126.net/20190702225325/d18b7fbf5c36d0b3c12c7c80603f3799/ymusic/918c/1958/7d87/022d7d76c923b1caaca6e30ca47d0f69.mp3");
    //playByStream(urlResource.getInputStream());

    UrlResource urlResource02 = new UrlResource("file:"+path);
    //playByStream(urlResource02.getInputStream());

    //不可以,我不知道为什么原因
    FileInputStream stream = new FileInputStream(path);
    playByStream(stream);

}


/**
 * 3. 通过IO
 */
private static void playByStream(InputStream stream) throws BasicPlayerException {
    BasicController control = new BasicPlayer();
    control.open(stream);
    control.play();
}


/**
 * 2. 通过文件播放音乐
 */
private static void playByFile(File file) throws BasicPlayerException {
    BasicController control = new BasicPlayer();
    control.open(file);
    control.play();
}


/**
 * 1. 播放网络音乐
 * @param inputUrl 音乐地址
 */
private static void playOnLine(String inputUrl) throws InterruptedException, MalformedURLException, BasicPlayerException {
    BasicController control = new BasicPlayer();
    URL url = new URL(inputUrl);
    control.open(url);
    control.play();
}


二、播放暂停等功能

 


 

 

官方给的样例文件

import javazoom.jlgui.basicplayer.*;

import java.io.File;
import java.io.PrintStream;
import java.util.Map;

/**
 * This class implements a simple player based on BasicPlayer.
 * BasicPlayer is a threaded class providing most features
 * of a music player. BasicPlayer works with underlying JavaSound
 * SPIs to support multiple audio formats. Basically JavaSound supports
 * WAV, AU, AIFF audio formats. Add MP3 SPI and Vorbis
 * SPI in your CLASSPATH to play MP3 and Ogg Vorbis file.
 */
public class BasicPlayerTest implements BasicPlayerListener {
    private PrintStream out = null;

    /**
     * Entry point.
     *
     * @param args filename to play.
     */
    public static void main(String[] args) {
        BasicPlayerTest test = new BasicPlayerTest();
        String path = "F:/Test/test.mp3";
        test.play(path);
    }

    /**
     * Contructor.
     */
    public BasicPlayerTest() {
        out = System.out;
    }

    public void play(String filename) {
        // Instantiate BasicPlayer.
        BasicPlayer player = new BasicPlayer();
        // BasicPlayer is a BasicController.
        BasicController control = (BasicController) player;
        // Register BasicPlayerTest to BasicPlayerListener events.
        // It means that this object will be notified on BasicPlayer
        // events such as : opened(...), progress(...), stateUpdated(...)
        player.addBasicPlayerListener(this);

        try {
            // Open file, or URL or Stream (shoutcast, icecast) to play.
            control.open(new File(filename));

            // control.open(new URL("http://yourshoutcastserver.com:8000"));

            // Start playback in a thread.
            control.play();

            // If you want to pause/resume/pause the played file then
            // write a Swing player and just call control.pause(),
            // control.resume() or control.stop().
            // Use control.seek(bytesToSkip) to seek file
            // (i.e. fast forward and rewind). seek feature will
            // work only if underlying JavaSound SPI implements
            // skip(...). True for MP3SPI and SUN SPI's
            // (WAVE, AU, AIFF).

            // Set Volume (0 to 1.0).
            control.setGain(0.85);
            // Set Pan (-1.0 to 1.0).
            control.setPan(0.0);
        } catch (BasicPlayerException e) {
            e.printStackTrace();
        }
    }

    /**
     * Open callback, stream is ready to play.
     * <p>
     * properties map includes audio format dependant features such as
     * bitrate, duration, frequency, channels, number of frames, vbr flag, ...
     *
     * @param stream     could be File, URL or InputStream
     * @param properties audio stream properties.
     */
    public void opened(Object stream, Map properties) {
        // Pay attention to properties. It's useful to get duration,
        // bitrate, channels, even tag such as ID3v2.
        display("opened : " + properties.toString());
    }

    /**
     * Progress callback while playing.
     * <p>
     * This method is called severals time per seconds while playing.
     * properties map includes audio format features such as
     * instant bitrate, microseconds position, current frame number, ...
     *
     * @param bytesread    from encoded stream.
     * @param microseconds elapsed (<b>reseted after a seek !</b>).
     * @param pcmdata      PCM samples.
     * @param properties   audio stream parameters.
     */
    public void progress(int bytesread, long microseconds, byte[] pcmdata, Map properties) {
        // Pay attention to properties. It depends on underlying JavaSound SPI
        // MP3SPI provides mp3.equalizer.
        display("progress : " + properties.toString());
    }

    /**
     * Notification callback for basicplayer events such as opened, eom ...
     *
     * @param event
     */
    public void stateUpdated(BasicPlayerEvent event) {
        // Notification of BasicPlayer states (opened, playing, end of media, ...)
        display("stateUpdated : " + event.toString());
    }

    /**
     * A handle to the BasicPlayer, plugins may control the player through
     * the controller (play, stop, ...)
     *
     * @param controller : a handle to the player
     */
    public void setController(BasicController controller) {
        display("setController : " + controller);
    }

    public void display(String msg) {
        if (out != null) out.println(msg);
    }
}

 

log4j.properties

log4j.rootLogger=DEBUG,consoleAppender,logfile

log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%l]-[%p] %m%n

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=/home/admin/demo/logs/demo.log
log4j.appender.logfile.Append = true
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
#log4j.appender.logfile=org.apache.log4j.RollingFileAppender
#log4j.appender.logfile.File=/home/admin/demo/logs/demo.log
#log4j.appender.logfile.Append = true
#log4j.appender.logfile.MaxFileSize = 10MB
#log4j.appender.logfile.MaxBackupIndex = 20
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.8.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

<!-- 添加HttpCient支持 -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.7</version>
</dependency>

<!-- 添加Jsoup支持 -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.11.3</version>
</dependency>


<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13-beta-2</version>
</dependency>


<!--播放音乐-->
<!-- https://mvnrepository.com/artifact/com.googlecode.soundlibs/basicplayer -->
<dependency>
    <groupId>com.googlecode.soundlibs</groupId>
    <artifactId>basicplayer</artifactId>
    <version>3.0.0.0</version>
</dependency>

<!--日志-->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.0-alpha0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>2.0.0-alpha0</version>
    <scope>test</scope>
</dependency>


<!--javaMail 发邮件-->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.6</version>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.3</version>
</dependency>

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值