无聊中想想用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. 简单验证码的识别:Bitmap类的使用

    验证码的智能识别是一项比较复杂的工作,甚至需要掌握点图像学的知识. 当然对于写程序的来说不用那么深入,只需要掌握几个常规步骤就行了. 验证码图像识别步骤:1.获取图像 2.清除边框 3.灰度处理 4. ...

  2. Python高阶函数之 - 装饰器

    高阶函数:  1. 函数名可以作为参数传入     2. 函数名可以作为返回值. python装饰器是用于拓展原来函数功能的一种函数 , 这个函数的特殊之处在于它的返回值也是一个函数 , 使用pyth ...

  3. macOS High Sierra Terminal巨卡问题的解决

    输入命令特别卡,拖拽窗口也特别卡,想到可能和界面渲染有关系,到设置里面把不透明度调成满值,问题解决. 真正的技术原因是看iOS开发相关的书的时候,书里面有这方面渲染消耗的提示说明.

  4. Bootstrap免费模板站推荐

    第一个:http://startbootstrap.com/ 第二个:http://www.bootstrapzero.com/ 第三个:https://bootswatch.com/ 第四个:htt ...

  5. Jenkins实现Android自动化打包

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/77102359 本文出自[赵彦军的博客] 1.Tomcat 进入 https://t ...

  6. android点击返回键,如何做到不destory当前activity,只是stop。重新返回该activity的 时候可以直接使用,不需要创建新的activity实例

    问题描述,如题目: android点击返回键,顺序执行 pause,stop,destory. 以至于想重新进入这个activity的时候还要重新执行onCreate()方法,那么如何解决不再重新执行 ...

  7. 基于Python的数据分析(3):文件和时间

    在接下来的章节中,我会重点介绍一下我自己写的基于之前做python数据分析的打包接口文件common_lib,可以认为是专用于python的第三方支持库.common_lib目前包括文件操作.时间操作 ...

  8. 解决vue在ios或android中用webview打开H5链接时#号后面的参数被忽略问题angular同样适用

    在ios或android如果直接用webview在打开H5链接例如: 打开:http://localhost:8080/#/answer?id=1509335039582001 会变成 http:// ...

  9. jmeter如何录制App及Web应用

    1.添加一个线程组(Test Plan上右键,添加_Threads_线程组) 2.添加一个HTTP代理服务器(Test Plan上右键,添加_非测试元件_HTTP代理服务器) 3.在HTTP代理服务器 ...

  10. Python_struct模块操作二进制文件

    ''' 使用struct模块写入二进制文件 ''' import struct n=130000000 x=96.45 b=True s='a1@中国' sn=struct.pack('if?',n, ...