无聊中想想用java调用下听音乐的api。晚上很多文章用的比较老大方法了,都是用原生的代码写,而且不支持mp3格式,BasicPlayer第三方包提供了很好的api调用,简单的3行代码就可以调用mp3了。如果喜欢自己动手的,可以去BasicPlayer官网下载源代码,里面包含所需要的jar包和测试类。

先介紹下BasicPlayer。官方是这样介绍的:

BasicPlayer层是jlGui的简单播放器API。这些类被设计用于需要简单功能(播放,停止,暂停,恢复,寻找)播放音频文件或流的任何应用程序。它是JavaSound API的高级API。

官网地址:http://www.javazoom.net/jlgui/api.html

官方源代码中包含包有:

1:basicplayer3.0.jar

2:commons-logging-api.jar

3:jl1.0.jar

4:jogg-0.0.7.jar

5:jorbis-0.0.15.jar

6:jspeex0.9.7.jar

7:mp3spi1.9.4.jar (注意!这个版本如果出现了java.io.IOException: Resetting to invalid mark       这个错误,需要把版本更新到mp3spi1.9.5.jar就解决了)

8:tritonus_share.jar

vorbisspi1.0.2.jar

在测试前要确保网卡和音响或耳机正常,不然会提示一些莫名的错误哦。

下面贴出我测试成功的代码。如下

 package fff;

 /*
* BasicPlayerTest.
*
* JavaZOOM : jlgui@javazoom.net
* http://www.javazoom.net
*
*-----------------------------------------------------------------------
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as published
* by the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*----------------------------------------------------------------------
*/ import java.io.File;
import java.io.PrintStream;
import java.util.Map; import javazoom.jlgui.basicplayer.BasicController;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerEvent;
import javazoom.jlgui.basicplayer.BasicPlayerException;
import javazoom.jlgui.basicplayer.BasicPlayerListener; /**
* 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 (from JavaZOOM)
* and Vorbis SPI( from JavaZOOM) 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.
* @throws Exception
*/
public static void main(String[] args) throws Exception {
BasicPlayerTest test = new BasicPlayerTest();
test.play("D:/xxx.mp3"); // //简单测试代码
// BasicPlayer player = new BasicPlayer();
// player.open(new File("D:/xxx.mp3"));
// player.play(); } /**
* 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) to play.
control.open(new File(filename));
// control.open(new URL("http://yourshoutcastserver.com:8000")); // Start playback in a thread.
control.play(); // Set Volume (0 to 1.0).
// setGain should be called after control.play().
control.setGain(0.85); // Set Pan (-1.0 to 1.0).
// setPan should be called after control.play().
control.setPan(0.0); // 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 (JavaZOOM) and SUN SPI's
// (WAVE, AU, AIFF). } catch (BasicPlayerException e) {
e.printStackTrace();
}
} /**
* Open callback, stream is ready to play.
*
* properties map includes audio format dependant features such as bitrate,
* duration, frequency, channels, number of frames, vbr flag, id3v2/id3v1
* (for MP3 only), comments (for Ogg Vorbis), ...
*
* @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.
*
* 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());
if (event.getCode() == BasicPlayerEvent.STOPPED) {
System.exit(0);
}
} /**
* 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);
} }

java基于BasicPlayer调用 播放音乐的更多相关文章

  1. JAVA基于AE调用GP实现泰森多边形

    调用GP实现数据处理是较快捷.较易入手的方法. 使用JAVA语言基于AE调用GP实现泰森多边形的代码例如以下: public void CreatVoronoi(){ try { GeoProcess ...

  2. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下:http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该怎 ...

  3. Inno调用dll --- 实现背景播放音乐

    Inno 播放音乐可以调用系统api函数mciSendString来实现,而mciSendString函数存在C:\Windows\System32\winmm.dll中,因此最终只要成功从该dll文 ...

  4. Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用

    目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...

  5. C#播放音乐,调用程序

    一:C# 播放音乐 string sound = Application.StartupPath + "/sound/msg.wav"; //Application.Startup ...

  6. 基于jQuery仿QQ音乐播放器网页版代码

    基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="m ...

  7. Swift 3 :基于 AVAudioPlayer 的简单音乐播放器

    2017.05.22 17:46* 字数 1585 阅读 5095评论 0喜欢 8赞赏 2 https://www.jianshu.com/p/4d5c257428a1 学习ios以来差不多接近两个月 ...

  8. C# 调用系统winmm.dll 播放音乐wav mp3

    using System.Runtime.InteropServices;//放wav public partial class frmMain : Form { 系统放 播放音乐 wav mp3 [ ...

  9. Android-AIDL调用Android操作系统Music的方式来播放音乐

    Android操作系统Music源码修改:把包名,各种命名都修改成自己的 修改Android操作系统Music源码,把后台播放核心服务对外暴漏: <!-- 核心服务 --> <!-- ...

随机推荐

  1. JavaScript中对象数组,如何给对象添加一个新属性

    var a =[{name: 'Tom',age:20},{name: 'Tom2',age:22}] 现在给a数组中的第一个对象添加性别属性 a[0]['gender']='women' a[0][ ...

  2. Using RequireJS in AngularJS Applications

    http://www.sitepoint.com/using-requirejs-AngularJS-applications/ While writing large JavaScript appl ...

  3. PHP快速获取MySQL数据库表结构

    直接举例某个数据库中只有两个数据表,一个 test ,一个 xfp_keywords ,获取他们的数据库表结构. 此功能可以用于开发人员快速获取数据表结构通过获取的数据生成各种文件形式,用来快速理解数 ...

  4. CF877F

    题目大意:给定n个数有正有负,有Q次询问,每次询问区间[l,r]中有几个子区间满足和为k 做法:显然的莫队 每次用map记录一下当前区间[l,r]中的前缀和的值的个数 然后r的话找sum[r]-k的, ...

  5. C#学习笔记 day_two

    C#学习笔记 day two Chapter 2 c#基本概念 2.1编译与运行hello world应用程序 点击f5或者vs2010中的运行图标即可 2.3C#的概念拓展 (1)继承性:一个类含有 ...

  6. Web移动端页面 --响应式和动态REM

    响应式 什么是响应式页面呢? 顾名思义响应式页面就是能做出响应的页面,它的页面效果不是定死的,会随着用户的改变而改变. 如何着手响应式有以下几个思考的方向 找一份设计图 使用Media Query 隐 ...

  7. java原子操作的实现原理--转载

    原文地址:http://www.infoq.com/cn/articles/atomic-operation 1. 引言 原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic ...

  8. 判断NaN in JavaScript

    [NaN 作用是用来表示一个值不是数字] NaN在JavaScript中行为很怪异,是因为那NaN和任何值都不相等(包括它自己).            NaN === NaN; // false因为 ...

  9. python:Json模块dumps、loads、dump、load介绍

    由上篇文章(python3+requests:get/post请求)涉及到的json.dumps()扩展 1.json.dumps()用于将dict类型的数据转成str 备注:文件路径前面加上 r 是 ...

  10. 基于ubuntu16.04快速构建Hyperledger Fabric网络

    前言 最近在参加一个比赛,使用到了区块链的开源软件hyperledger,由于之前从未接触过区块链,以及和区块链开发相关的内容,所有在网上查阅了大量的资料,并且通过学习yeasy(杨宝华)开源的入门书 ...