用Java实现音频播放

2016-02-19 19:13 8 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+的系统上运行,无需加装任何支持软件。

  

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

  一、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/。

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

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

   
  图一:JavaSound体系结构

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

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

二、JavaSound混频原理

  

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

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

  
  图二:JavaSound混频器

  

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

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

  输入到混频器的信号可以

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

延伸阅读
电子邮件传递可以由多种协议来实现。目前,在Internet 网上最流行的三种电子邮件协议是SMTP、POP3 和 IMAP,下面分别简单介绍。 ◆ SMTP 协议 !-- frame contents --!-- /frame contents -- 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一个运行在TCP/IP之上的协议,用它发送和接...
Java语言从其诞生到现在不过短短五年时间,却已经成为全球最热门的语言,Java程序员正成为IT业其它程序员中薪金最高的职员。这一切都应归功于Java良好的特性:简单、面向对象、分布式、平台无关性、可移植性、支持多线程等等。本文将用Java的多线程特性来实现线程等待提示框。 1、问题的提出 在Java应用程序编程中,有时需要在GUI(图形化用...
标签: 电脑入门
过去,在幻灯片演示结束后,习惯用一个谢谢大家的画面来结束播放。不过近年来这一做法却不再流行,大家更倾向于播放结束后马上回到封面页,以显示授课题目和授课人等信息。特别是一些固定场所的演示,更希望能够循环播放,而不是播放完成后退出播放状态,再从第一张进入重新播放。 其实,要实现这样的效果并不难,只需要一个小小的超链接就可...
标签: 电脑入门
过去,在幻灯片演示结束后,习惯用一个谢谢大家的画面来结束播放。不过近年来这一做法却不再流行,大家更倾向于播放结束后马上回到封面页,以显示演讲题目和演讲人等信息。特别是一些固定场所的演示,更希望能够循环播放,而不是播放完成后退出播放状态,再从第一张进入重新播放。 其实,要实现这样的效果并不难,只需要一个小小的超链接就可...
一、概述 首先我们来看看构造这个媒体播放器要达到什么样的目标,确定了目标也就确定了代码量和程序的复杂程度。本文的媒体播放器要达到如下目标: 媒体播放器是一个菜单驱动的简单AWT应用。 媒体播放器包含一个文件菜单,文件菜单包含三个菜单项: 打开,用来打开媒体文件。 循环,是播放一次(默认),还是重复...

经验教程

849

收藏

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