Java Sound初探

本文介绍了Java Sound的基本概念、学习资源和实践应用,包括TTS、OCR、MIDI等技术。提供了详细的资源链接,如jsresource、Oracle官网和JavaZoom。文章通过实例演示了如何使用AudioSystem、SourceDataLine、Clip进行音频播放和录音,以及如何播放MP3文件。还涉及了混音器、MIDI系统和音频文件转换,深入探讨了Java Sound在音频处理领域的应用。
摘要由CSDN通过智能技术生成

网上关于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)数模转换器.

二.学习资源

jsresource

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

oracle官网上的java sound介绍

官网一向都是最重要的文档提供者,在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,这个音乐播放器简洁简陋,用着还行.

http://www.sauronsoftware.it/projects/jave/manual.php

jave(java audio video encoder)是一个纯java版的音视频转码器.

三.概述

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类型的服务提供接口

四.最简单的播放器

AudioInputStream cin = AudioSystem.getAudioInputStream(new File("haha.wav"));
AudioFormat format = cin.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
line.open(format);//或者line.open();format参数可有可无
line.start();
int nBytesRead = 0;
byte[] buffer = new byte[512];
while (true) {
    nBytesRead = cin.read(buffer, 0, buffer.length);
    if (nBytesRead <= 0)
        break;
    line.write(buffer, 0, nBytesRead);
}
line.drain();
line.close();

这个程序只能播放wav,pcm文件,不能播放mp3文件.
第一步,从文件对象构建AudioInputStream cin,这个cin对象包含文件的格式数据和音频数据.
第二步,根据cin的AudioFormat创建DataLine.Info对象.
第三步,根据AudioFormat来获取SourceDataLine,扬声器有了SourceDataLine就有了数据流,扬声器就可以发声了.

SourceDataLine像一个管道一样,数据流从计算机内部的音频文件中流到AudioSystem音频系统中,line.open()打开管道入口端,line.start()打开管道的出口端.line.drain()将管道的出口端导入另一个地方将管道中剩余的数据流放空.line.close()关住了管道的出口端.

以上代码中有一个地方可以化简一下:

      //DataLine.Info info = new DataLine.Info(SourceDataLine.class, ais.getFormat());
      //SourceDa
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值