首页 > 代码库 > java sound初探

java sound初探

网上关于java sound的正规资源讲解的非常好,本文不再给出示例,主要提供一些好的资源,并说说我的一些理解,用于形成对java sound的整体认识.

一.几个词汇

TTS:text-to-speech,文本到语音转换

OCR:optical-character-recignition光学字符识别

MIDI:Musical Instrument Digital Interface,乐器数字化接口

MIDI是20世纪80年代初由Dave Smith提出的,目的是解决电声乐器之间的通信.现代音乐都是通过MIDI+音色库合成的.MIDI传输的不是声音信号而是一系列音符控制参数等指令,它告诉MIDI设备要做什么.MIDI传输的信号被统一成MIDIMessage,通过异步串行通信来传递.

Tritonus:java sound是一种标准,有两套实现.一套是Sun公司的,一套是Tritonus.在Java 1.3中,Sun公司的被纳入Java标准库.从那时起,Tritonus就很尴尬了.要想使用Tritonus就需要禁用掉Sun的,而禁用Sun的是一件多此一举的事情.Tritonus目前只支持Linux系统,但Tritonus的一些单独下载的插件也可以运行在其他系统上.

SPI:Service Provider Interface服务提供接口,这是API中常见的一种模式.把代码写成接口的形式,一些服务可以遵照这些接口来实现,从而实现可插拔式的编程.SPI还有另外一个意思:在电路中,SPI指串行外设接口,Serial Peripheral Interface,它是一种高速全双工,同步的通信总线.

Acousitic声学,Reverb回响,Gain增益,Pan声象.DAC(digital analog converter)数模转换器.

二.学习资源

http://www.jsresources.org

  js指java sound,这个网站专门讲解java sound,包罗万象,堪称java sound的百科全书,有这一个网站就足够了,现在需要做的就是把这个网站从头看到尾.

http://www.oracle.com/technetwork/java/index-139508.html

  官网一向都是最重要的文档提供者,在oracle官网上,有一个详尽强大的样例,它展示了java sound的各个方面.从这个页面上可以下载样例.这个样例特别好,竟然可以用来弹奏钢琴,充分展示了java sound的强大功能.

http://www.oracle.com/technetwork/java/javase/downloads/index.html

  这个页面也是Oracle官网页面,是jdk下载页面.在这个页面中,有jdk的demo,doc的下载链接,这些都是学习java的上好资源,下载下来,仔细阅读javax.sound模块.

http://www.javazoom.net/index.shtml

  java sound直接支持的音频格式非常少,只包括.wav(多见于windows)和.AIFF(多见于macintosh)和.au(多见于unix)三种格式的音频文件.但通过SPI,我们不须修改java代码,只需要提供相应格式的SPI就能够实现播放多种文件.javazoom网站提供了一套mp3解码库,名字叫做JLayer.

  Java Zoom网站上有多个关于java音频的项目,这里主要介绍JLayer和MP3SPI和jlGUI.JLayer于1999年2月启动,目标是为Java提供实时的MP3解码器.它还包括JLayerME子项目,是JLayer在JavaME上的版本.MP3SPI是一个基于JLayer和Tritonus的Java插件,Tritonus是java sound标准的另一种实现,要想使用MP3SPI,需要三个jar包:mp3spi.jar和tritonus.jar和jlayer.jar,将这三个jar包放到类路径下,java sound便具备了播放MP3的能力.jlGUI是一个图形界面的音乐播放器,它纯粹用Java写成,依赖于MP3SPI,这个音乐播放器简洁简陋,用着还行.

三.补充

AudioSystem是javax.sound包的重要入口类,一切都是以它为中心展开的,AudioSystem的默认输入设备是麦克风,默认输出设备是扬声器

.SourceDataLine和TargetDataLine都可以通过AudioSystem获得.SourceDataLine意思是"源数据流",是指AudioSystem的输入流,把音频文件写入到AudioSystem中,AudioSystem就会播放音频文件.TargetDataLine意思是"目标数据流",是指AudioSystem的输出流,是AudioSystem的target.所以,当播放文件时,把文件内容写入AudioSystem的SourceDataLine;当录音时,把AudioSystem的TargetDataLine中的内容读入内存.

Clip是"剪辑","片段",表示内存中的一段完整的音频数据,可以一遍一遍的播放,非常适合播放游戏的背景音乐.Clip和SourceDataLine都是AudioSystem的输入端口.

在java中处理声音的包括四个包:

  javax.sound.sample处理数字音频

  javax.sound.midi处理midi形式的音频

  javax.sound.sample.spi相当于sample类型的服务提供接口

  javax.sound.midi.spi相当于midi类型的服务提供接口

 

java sound初探