您的位置 首页 java

Java,音频,播放MP3,jlayer实现,音频编解码器,音频标签库

音频& Mp3

音频

人类能够听到的所有声音都称之为音频,包括噪音等,声音被录制下来以后,无论是说话声、歌声、乐器都可以通过数字音乐软件处理。

Mp3是一种能播放音乐文件的播放器,主要由存储器(存储卡)、显示器(LCD显示屏)、 中央处理器 [MCU( 微控制器 )或解码DSP(数字信号处理器) 等组成。

Java x.sound.sampled包

javax.sound.sampled, 提供用于捕获,处理和回放采样音频数据的接口和类。

javax.sound.sampled.spi包

提供新 音频设备 、声音文件reader和 writer,或音频格式转换器时,提供将为其创建子类的服务提供程序的抽象类。

JLayer,MP3解码器库

JLayer是一个库,可为JAVA(tm)平台实时解码/播放/转换MPEG 1/2 / 2.5 Layer 1/2/3(即MP3),这是一个非商业项目,任何人都可以添加自己的贡献,JLayer已获得LGPL许可。

音频流(mp3spi LIB)

mp3spi用于支持音频/mpeg mime类型。

VorbisSPI:

VorbisSPI是一个用于支持OGG音频格式的Java SPI (Service Provider Interface) 基于JOrbis Java库开发的。

tritonus-share:

maven artifact for tritonus-share library of tritonus.org,Tritonus是Java Sound API的一个实现。

jflac-codec:

FLAC文件的编码器和解码器,包括Java声音SPI。是免费无损音频编解码器(FLAC)库到Java的一个端口。

jaudiotagger,音频标签库:

支持MP3, mp4 (MP4音频, M4A ,M4P Ogg Vorbis音频),FLAC和 wav 和WMA,但真正支持的格式有限,项目地址:。

提供最流行的三十个属性都完全支持格式的通用接口:1、支持读取和写入 MP4 ,M4A和mp4p(保护)的文件,包括多个图像和反向DNS域;2、支持多页的 Ogg Vorbis 评论;3、支持MP3 ID3v1,id3v11,id3v2.2,V2.3和V2.4是透明的;4、允许的ID3标签版本之间轻松转换;5、支持FLAC,包括嵌入和链接图像支持;6、提供最合适的域对象的表示,而不是一个简单的字节表示;7、完全支持 Unicode 文本编码;8、正在积极开发和支持;9、采用自动测试保证代码的兼容性之间的版本;10、使用代码覆盖工具保证代码的实际被测试。

Java,Maven

 <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

<dependencies>
    <!-- apache commons-lang3 -->
    <dependency>
        <groupId>org. apache .commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
    <!-- jlayer -->
    <dependency>
        <groupId>javazoom</groupId>
        <artifactId>jlayer</artifactId>
        <version>1.0.1</version>
    </dependency>
    <!--音频流(mp3spi LIB) -->
    <dependency>
        <groupId>com.googlecode.soundlibs</groupId>
        <artifactId>mp3spi</artifactId>
        <version>1.9.5.4</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.soundlibs</groupId>
        <artifactId>tritonus-share</artifactId>
        <version>0.3.7.4</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.soundlibs</groupId>
        <artifactId>vorbisspi</artifactId>
        <version>1.0.3.3</version>
    </dependency>
    <!-- 解码播放flac文件则引入这个jar包 -->
    <dependency>
        <groupId>org.jflac</groupId>
        <artifactId>jflac-codec</artifactId>
        <version>1.5.2</version>
    </dependency>
    <!--audiotagger -->
    <dependency>
        <groupId>org</groupId>
        <artifactId>jaudiotagger</artifactId>
        <version>2.0.3</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>aliyun</id>
        <name>aliyun</name>
        <url>
    </repository>
</repositories>  

播放音频代码案例

案例1:

 package com.what21.music01.demo01;

import javazoom.jl.player.Player;

import java.io.Buffered InputStream ;
import java.io. File InputStream;

public class MusicPlayer {

     private  String filename;
    private Player player;

    public MusicPlayer(String filename) {
        this.filename = filename;
    }

    public  void  play() {
        try {
            BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(filename));
            player = new Player(buffer);
            player.play();
        } catch ( Exception  e) {
            System.out.println(e);
        }
    }

    public  static  void main(String[] args) {
        String musicFile = "D:/Data/video/2/虎年大吉.mp3";
        MusicPlayer player = new MusicPlayer(musicFile);
        new Thread(()->player.play()).start();
    }

}
  

案例2:

 package com.what21.music01.demo02;

import org.apache.commons.lang3.StringUtils;

/**
 * @author Administrator
 */
public enum Audio {
    /**
     * Specifies a WAVE file.
     */     WAVE (1, "WAVE", "wav"),
    /**
     * Specifies an AU file.
     */    AU(2, "AU", "au"),
    /**
     * Specifies an  aif F file.
     */    AIFF(3, "AIFF", "aif"),
    /**
     * Specifies an AIFF-C file.
     */    AIFF_C(4, "AIFF-C", "aifc"),
    /**
     * Specifies an SND file.
     */    SND(5, "SND", "snd"),
    /**
     * Specifies an MP3 file.
     */    MP3(6, "MP3", "mp3"),
    /**
     * Specifies an FLAC file.
     */    FLAC(7, "FLAC", "flac");

    private int index;
    private String type;
    private String suffix;

    Audio(int index, String type, String suffix) {
        this.index = index;
        this.type = type;
        this.suffix = suffix;
    }

    public int index() {
        return index;
    }

    public static int getIndex(String name) {
        if (StringUtils.isBlank(name)) {
            throw new RuntimeException("文件名称为空!");
        }
        name = StringUtils.substring(name, StringUtils.lastIndexOf(name, ".") + 1);
        for (Audio audio : values()) {
            if (StringUtils.equalsIgnoreCase(audio.suffix, name)) {
                return audio.index;
            }
        }
        return -1;
    }

    public static boolean isSupport(String name) {
        if (StringUtils.isBlank(name)) {
            throw new RuntimeException("文件名称为空!");
        }
        name = StringUtils.substring(name, StringUtils.lastIndexOf(name, ".") + 1);
        for (Audio audio : values()) {
            if (StringUtils.equalsIgnoreCase(audio.suffix, name)) {
                return true;
            }
        }
        return false;
    }

}  
 package com.what21.music01.demo02;

import org.apache.commons.lang3.StringUtils;

/**
 * @author Administrator
 */
public enum Audio {
    /**
     * Specifies a WAVE file.
     */    WAVE(1, "WAVE", "wav"),
    /**
     * Specifies an AU file.
     */    AU(2, "AU", "au"),
    /**
     * Specifies an AIFF file.
     */    AIFF(3, "AIFF", "aif"),
    /**
     * Specifies an AIFF-C file.
     */    AIFF_C(4, "AIFF-C", "aifc"),
    /**
     * Specifies an SND file.
     */    SND(5, "SND", "snd"),
    /**
     * Specifies an MP3 file.
     */    MP3(6, "MP3", "mp3"),
    /**
     * Specifies an FLAC file.
     */    FLAC(7, "FLAC", "flac");

    private int index;
    private String type;
    private String suffix;

    Audio(int index, String type, String suffix) {
        this.index = index;
        this.type = type;
        this.suffix = suffix;
    }

    public int index() {
        return index;
    }

    public static int getIndex(String name) {
        if (StringUtils.isBlank(name)) {
            throw new RuntimeException("文件名称为空!");
        }
        name = StringUtils.substring(name, StringUtils.lastIndexOf(name, ".") + 1);
        for (Audio audio : values()) {
            if (StringUtils.equalsIgnoreCase(audio.suffix, name)) {
                return audio.index;
            }
        }
        return -1;
    }

    public static boolean isSupport(String name) {
        if (StringUtils.isBlank(name)) {
            throw new RuntimeException("文件名称为空!");
        }
        name = StringUtils.substring(name, StringUtils.lastIndexOf(name, ".") + 1);
        for (Audio audio : values()) {
            if (StringUtils.equalsIgnoreCase(audio.suffix, name)) {
                return true;
            }
        }
        return false;
    }

}  

案例3:

 package com.what21.music01.demo03;

import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;

import java.io.File;

public class MusicPlayer {

    public static void main(String[] args) throws Exception {
        String musicFile = "D:/Data/video/2/虎年大吉.mp3";
        int musicLength = getMusicPlayLength(musicFile);
        System.out.println("音乐长度:" + musicLength); // 音乐长度:53
    }

    /**
     * Java Music 获取歌曲播放时长
     */    public static int getMusicPlayLength(String path) throws Exception {
        File file = new File(path);
        AudioFile mp3 = AudioFileIO.read(file);
        return mp3.getAudioHeader().getTrackLength();
    }

}  

文章来源:智云一二三科技

文章标题:Java,音频,播放MP3,jlayer实现,音频编解码器,音频标签库

文章地址:https://www.zhihuclub.com/175935.shtml

关于作者: 智云科技

热门文章

网站地图