用Java实现音频播放

2016-02-19 19:13 10 1 收藏

今天图老师小编要向大家分享个用Java实现音频播放教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】


  桌面PC的性能日益提高,Java虚拟机的优化技术也不断获得突破,这一切使得用Java处理实时信号成为可能。本文将通过设计和构造一个支持实时mp3、WAV和Ogg音频格式解码/回放的Java音乐播放器,阐述用JavaSound API编写音频处理程序的思路和一般过程。

   !-- frame contents --!-- /frame contents --   JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。在JDK 1.3.0之前,JavaSound是一个标准的Java扩展API,但从Java 2的1.3.0版开始,JavaSound就被包含到JDK之中。由于Java有着跨平台(操作系统、硬件平台)的特点,基于JavaSound的音频处理程序(包括本文的程序)能够在任何实现了Java 1.3+的系统上运行,无需加装任何支持软件。

  

  一、JavaSound的体系结构

  当前JDK的JavaSound API随同Java媒体框架(JMF,Java Media Framework)一起发布,主页在java.sun.com/prodUCts/java-media/jmf/,适合JDK 1.1以及更高的版本。除了JDK实现的JavaSound API之外,还有一个源代码开放的JavaSound实现是Tritonus,主页在http://www.tritonus.org/。

  图一描述了JavaSound API的体系结构,虚线表示Sun的JavaSound标准定义的API调用。上面一根虚线表示我们编写音频处理程序要调用的API,JavaSound API包含在javax.sound.sampled和javax.sound.midi包中。两根虚线之间的部分就是JavaSound API的具体实现。

   
  图一:JavaSound体系结构

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  就象上面一根虚线表示的API具有统一标准一样,在所有的JavaSound实现中,图一下面一根虚线表示的SPI(服务提供者接口, Service Provider Interface)也是统一的。SPI的作用是以插件(Plug-In)的形式提供自定义的扩展模块,我们只要提供与SPI兼容的插件扩展模块,就可以在不改变API的情况下扩展音频处理程序的能力。SPI包含在java.sound.sampled.spi和javax.sound.midi.spi包中。

  例如,假设有一个只能播放WAV文件的程序,我们只要增加一个支持MP3文件解码的插件模块,就可以在不改动播放程序的任何一行代码的前提下,为这个播放程序添加播放MP3的能力。

二、JavaSound混频原理

  

  图二阐述了JavaSound的混频器原理。在处理输入音频的应用中,对于来自各种音频输入端口的信号,例如麦克风、CD播放器、磁带播放器,等等,我们可以在它们到达TargetDataLine之前,利用混频器控制输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。

  
  图二:JavaSound混频器

  

  类似地,在处理输出音频的应用中,混频器用来对一系列来自SourceDataLine的数据进行混频处理,经处理后的信号可输出到各种输出端口,例如扬声器、耳机等。SourceDataLine是一个可写入音频信号数字流的设备,例如,我们可以从一个WAV文件读取内容写入到SourceDataLine,然后再通过扬声器输出。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  输入到混频器的信号可以

来源:http://www.tulaoshi.com/n/20160219/1620353.html

延伸阅读
标签: ASP
  虽然Netscape和IE都支持音频文件的播放,但在制作过程中还是遇到了这样一个问题: 如果用隐藏方式播放则没有声卡的用户要出错,影响主页的整体效果。编一个既便于用户控制又能给页面起到点缀作用的音频播放器不失为一个好办法。下面详细介绍用JavaScript 自编音频播放器的方法。 1. Netscape的音频播放器 1)直接打开 N...
Java语言从其诞生到现在不过短短五年时间,却已经成为全球最热门的语言,Java程序员正成为IT业其它程序员中薪金最高的职员。这一切都应归功于Java良好的特性:简单、面向对象、分布式、平台无关性、可移植性、支持多线程等等。本文将用Java的多线程特性来实现线程等待提示框。 1、问题的提出 在Java应用程序编程中,有时需要在GUI(图形化用...
标签: 电脑入门
过去,在幻灯片演示结束后,习惯用一个谢谢大家的画面来结束播放。不过近年来这一做法却不再流行,大家更倾向于播放结束后马上回到封面页,以显示授课题目和授课人等信息。特别是一些固定场所的演示,更希望能够循环播放,而不是播放完成后退出播放状态,再从第一张进入重新播放。 其实,要实现这样的效果并不难,只需要一个小小的超链接就可...
标签: 电脑入门
过去,在幻灯片演示结束后,习惯用一个谢谢大家的画面来结束播放。不过近年来这一做法却不再流行,大家更倾向于播放结束后马上回到封面页,以显示演讲题目和演讲人等信息。特别是一些固定场所的演示,更希望能够循环播放,而不是播放完成后退出播放状态,再从第一张进入重新播放。 其实,要实现这样的效果并不难,只需要一个小小的超链接就可...
一、概述 首先我们来看看构造这个媒体播放器要达到什么样的目标,确定了目标也就确定了代码量和程序的复杂程度。本文的媒体播放器要达到如下目标: 媒体播放器是一个菜单驱动的简单AWT应用。 媒体播放器包含一个文件菜单,文件菜单包含三个菜单项: 打开,用来打开媒体文件。 循环,是播放一次(默认),还是重复...

经验教程

457

收藏

75
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部