javasound程序指南.docx

上传人:b****6 文档编号:8495696 上传时间:2023-01-31 格式:DOCX 页数:86 大小:113.39KB
下载 相关 举报
javasound程序指南.docx_第1页
第1页 / 共86页
javasound程序指南.docx_第2页
第2页 / 共86页
javasound程序指南.docx_第3页
第3页 / 共86页
javasound程序指南.docx_第4页
第4页 / 共86页
javasound程序指南.docx_第5页
第5页 / 共86页
点击查看更多>>
下载资源
资源描述

javasound程序指南.docx

《javasound程序指南.docx》由会员分享,可在线阅读,更多相关《javasound程序指南.docx(86页珍藏版)》请在冰豆网上搜索。

javasound程序指南.docx

javasound程序指南

Java声音程序员指南

介绍性材料

序言

为谁而本指南的目的

本指南描述了什么

欲了解更多信息

章:

1到Java

声音API

设计目标

是谁的Java声音API?

Java声音API与其他接口如何?

采样音频

什么是采样音频?

音频配置

MIDI

什么是MIDI?

MIDI配置

服务提供程序接口

第一部分:

采样音频

第2章:

概述的抽样

设计目标

数据传输上的一个焦点

缓冲和非缓冲的音频处理

要点:

格式,搅拌机,和行

是什么格式的音频数据?

调音台是什么?

什么是行吗?

在音频输出配置线

音频输入配置线

线路接口层次结构

第3章:

访问音频系统

资源

AudioSystem类

信息对象

获得调音台

获取所需的类型

直接从AudioSystem旅游线路

从调音台的线路

选择输入和输出端口

允许使用音频资源

第4章:

播放音频

使用剪辑

设置播放剪辑

启动和停止播放

使用一个SourceDataLine

设置播放SourceDataLine

启动和停止播放

监测线路的状态

多条线路上的同步播放

加工传出音频

第5章:

捕获音频

设置一个TargetDataLine

从TargetDataLine读取数据

监控线的状态

处理传入的音频

第6章:

处理音频

控制

控件

获得具有所需的控制线路

从线的控件

使用控制改变的音频信号

控制线路的静音状态

更改线路的音量

各混响预置的选择

直接操纵的音频数据

第7章:

使用文件和文件格式

转换器

读书声文件

编写声音文件

文件和数据格式转换

文件从一种格式转换到另一个

不同的数据格式之间的转换音频

学习哪些转换可用

第二部分:

MIDI

第8章:

概述的MIDI

一个MIDI复习:

电线和文件

在MIDIWire协议的数据流

标准MIDI文件测序数据

Java声音APIMIDI数据的代表性

MIDI信息

MIDI事件

序列和轨道

Java声音APIMIDI设备的代表性

MidiDevice的接口

发射器和接收器

音序器

合成器

第9章:

访问MIDI系统

资源

MidiSystem类

获取默认设备

学习什么设备安装

获取所需的设备

开启装置

第10章:

发送和

接收MIDI信息

了解设备,发射机和接收机

消息发送到一个接收器,而无需使用发射机

了解时间戳

消息发送到设备上的时间邮票

将发射器连接到接收器

连接到一台设备

连接多台设备

关闭连接

第11章:

播放,录制和

编辑MIDI序列

到音序器

当使用音序器

了解序列数据

序列和轨道

MidiEvents和扁虱

音序器的方法概述

获得序列发生器

载入序列

播放序列

记录和保存序列

编辑序列

使用先进的音序器功能

移动到一个序列中的任意位置

改变播放速度

静音或独奏个人

在序列的轨道

与其它MIDI设备同步

指定特殊的事件监听器

第12章:

合成声音

了解MIDI合成

仪器

频道

Soundbanks和修补程序

声音

管理工具和Soundbanks

学习什么样的仪器被加载

装入不同的仪器

卸载工具

访问音库资源

查询合成的能力和现状

使用渠道

没有控制的合成器

使用音序器

取得通道的当前状态

静音和独奏频道

玩合成声音的权限

第三部分:

服务提供程序接口

第13章:

介绍服务

提供程序接口

什么是服务?

服务工作

供应商如何准备新的服务

用户如何安装新的服务

第14章:

提供采样音频

服务

简介

提供音频文件写作服务

提供音频文件的阅读服务

提供格式转换服务

提供新类型的搅拌机

第15章:

提供的MIDI服务

简介

提供MIDI文件写作服务

提供MIDI文件阅读服务

提供特定的MIDI设备

提供音库文件读取服务

附录

附录1:

代码概述:

AudioSystem.java

最后更新2002年1月11日

序言

为谁而本指南的目的

本指南旨在为三组读者:

应用程序开发:

软件程序员谁想要写的JavaTM应用程序或applet

使用音频或MIDI。

大多数读者都属于这一类。

服务提供商:

软件模块的开发,扩展的能力

Java声音应用程序编程接口(API)的实施。

例如,

供应商可能会提供一个新的音频混频器或MIDI合成器,或读写能力

新的文件格式。

 Java声音API的目的是让程序自动获取所有这些

“插件”模块,在一个特定的系统。

升API的实现:

创建新的Java声音API实现的开发人员。

这是假设读者已经在Java语言中的编程的基本知识。

熟悉

音频和MIDI是有益的,但​​没有承担。

本指南说明了什么

这是一个Java声音API的基本概念的描述,与一些代码片段作为编程

例子。

 Java声音API允许应用程序指定一个软件层

沟通与音频和MIDI发动机。

 Java声音API的JavaTM2平台的一部分,

标准版(J2SE),版本1.3,这是本指南中所描述的版本。

声音API

中包含了Java2软件开发工具包(SDK),标准版,Java2运行时

环境,标准版。

作为早期的实现提供的Java声音API

独立的产品和他们的节目interfacea从这里所描述的不同。

注意:

本指南是没有任何特别的Java声音实现的描述

空气污染指数。

特别是,它没有具体描述的参考实现

例如由SunMicrosystems公司创建的Java声音的API,你会

这里找不到一个完全的列表,在支持的声音文件格式

参考实现。

 (因为Java声音API使“插件”服务

可能的话,API的实现者和/或第三方可以添加新格式的支持,

本指南具有的特殊功能等一般)的端口,忽略了独特的功能,

扩展,限制,或特定的实现中的错误。

作为为开发人员提供了方便,但它使现有的一些限制

Sun的参考implemenation。

如果你有问题,这是非常

建议您查阅:

升Sun公司在JavaDeveloperConnection的Bug数据库

升Java声音首页

升Java声音参考实现说明

欲了解更多信息

参见Java声音API参考文档的链接

参考实现,以及有关Java声音API链接到其他资源,如演示

方案,邮件列表,并经常回答问题(FAQs)。

还请参阅Java声家庭

页上面提到的。

版权所有©2000年,Sun微系统公司保留所有权利。

第1章:

到Java

声音API

设计目标

使用的JavaTM声音API是一个低级别的API,以便对影响和控制的输入和输出的声音

媒体,包括音频和乐器数字接口(MIDI)数据。

 Java声音API

超过通常所需的声音输入和输出能力提供了明确的控制,在

框架,以促进可扩展性和灵活性。

是谁的Java声音API?

因为声音是如此基本,Java声音API实现了广泛的应用需求

开发商。

潜在的应用领域包括:

升通信框架,如会议和电话

升最终用户的内容交付系统,如媒体播放器和使用音乐,流媒体内容

升交互式应用程序,如游戏和动态内容的Web站点使用

升内容的创建和编辑

升工具,工具箱和公用事业

Java声音API与其他接口如何?

Java声音API在Java平台上提供声音支持的最低水平。

它提供

与稳健经营,控制了大量的应用程序,它是可扩展的。

对于

例如,Java声音API供应机制,用于安装,访问和操纵系统

资源,如音频混频器,MIDI合成器,其他的音频或MIDI设备,文件的读者和作家,

声音格式转换器。

 Java声音API不包括复杂的音效编辑或

图形化工具,但它提供了这种方案可建的能力。

它强调

低层次的控制超出通常由最终用户的预期。

有其他Java平台API,有健全相关的元素。

 Java媒体框架(JMF)

是更高级别的API,它是目前作为一个标准扩展到Java平台提供。

 JMF

用于捕获和指定一个统一的架构,消息传递协议和编程接口

基于时间的媒体播放。

 JMF提供基本的媒体播放器应用程序更简单的解决方案

方案,它使不同的媒体类型,如音频和视频之间的同步。

另一方面,方案,重点是健全的Java声音API可以从中受益,特别是如果他们需要

更先进的功能,如能够小心控制缓冲的音频播放,或直接

操纵一个MIDI合成器。

其他声音方面的JavaAPI,包括Java3D和API,用于

电话和语音。

执行任何这些API可能会使用Java实现

内部声音API,但并不要求这样做。

Java声音API包括用于数字音频和MIDI数据的支持。

这两个主要模块

功能是提供单独的包:

javax.sound.sampled

这个包指定接口,用于捕获,混合和数字播放

(采样)音频。

javax.sound.midi

这个包提供了接口,MIDI合成,测序和事件的交通。

另外两个包,允许服务供应商(而不是应用程序开发人员)创建自定义

软件组件,延长执行的Java声音API的能力:

升javax.sound.sampled.spi在

升javax.sound.midi.spi在

本章的其余部分简要讨论了系统的采样音频,MIDI系统,和SPI

包。

每个然后详细讨论,在随后的指导。

采样音频

什么是采样音频?

javax.sound.sampled包处理数字音频数据,Java声音API是指

作为采样的音频。

样品信号的连续快照。

在音频的情况下,信号是一个声音

波。

麦克风转换成相应的模拟电信号的声波信号,并

模拟到数字转换器转换成模拟信号采样的数字化形式。

以下

图显示了一个短暂的瞬间,在录音。

采样的声波

此图绘制的声压(振幅)上的垂直轴,横轴上的时间和。

在一定的速度,导致在离散模拟声波的振幅是定期测量

样本(图中红色的数据点),包括数字音频信号。

该中心的水平

行表示零振幅线以上的点是积极的价值的样品,并点以下

阴性。

模拟信号的数字近似的准确性取决于其时间分辨率

(采样率)和其量化,或决议的振幅(用来表示数位

每个样品)。

作为一个参考点,记录存储在光盘的音频采样44100

次每秒和每个样本16位代表。

“采样音频”一词用在这里略松散。

声波可以在离散采样

而间隔被留在一个模拟的形式。

 Java声音API的目的,但是,“采样

音频“等同于”数字音频“。

通常情况下,一台计算机上的音频采样来自录音,但声音可以改为

综合产生的(例如,创建一个按键式电话的声音)。

长期“采样

音频“,是指类型的数据,而不是它的起源。

有关数字音频数据结构的进一步信息是根据“是什么格式音频

数据?

“第2章中,”采样包的概述。

音频配置

Java声音API不承担特定的音频硬件配置,它的设计允许

将不同种类的音频组件系统上安装的API访问。

 Java声音

API支持通用的功能,如输入和输出的音效卡(例如,

录制和播放声音文件)以及混合多个音频流。

下面是一个

例如,一个典型的音频架构:

一个典型的音频架构

在这个例子中,一个设备,如声卡,不同的输入和输出端口,混合提供

在软件中。

该混频器,可能会收到已经从文件中读取数据,从网络传输,

通过一个应用程序的动态生成,或由一个MIDI合成器产生。

 (本

javax.sound.midi包,讨论未来,为合成器提供一个Java语言接口。

该混频器结合到一个单一的流音频输入,可发送到输出设备

渲染。

MIDI

javax.sound.midi包包含运输和测序MIDI事件的API,

从这些事件中合成的声音。

什么是MIDI?

而取样的音频是一个声音本身的直接代表,MIDI数据可以被认为是作为一个

为营造良好的,特别是音乐声音的配方。

 MIDI数据,音频数据不同,没有描述

声音直接。

相反,它描述的事件,影响声音合成器是。

 MIDI数据

类似的图形用户界面的键盘和鼠标事件。

在MIDI的情况下,事件

被认为是音乐键盘后的行动,以及各种踏板,滑块,开关上的行动,

和旋钮,乐器。

这些事件不需要硬件音乐实际上源于

仪器;他们可以模拟软件,他们可以在MIDI文件存储。

一个程序,可以

创建,编辑和执行这些文件被称为音序器。

许多电脑声卡

可控的MIDI音乐合成器芯片,音序器可以发送MIDI事件。

合成器

也可以实现完全的软件。

合成器MIDI事件的解释,

接收并产生音频输出。

通常MIDI数据合成的声音是音乐的声音(如

相对于语音,例如)。

 MIDI合成器也能够产生各种

声音效果。

有些声卡的MIDI输入和输出端口的外部MIDI硬件设备(如

可连接键盘合成器或其他文书)。

从MIDI输入端口,应用程序

程序可以接收由外部配有MIDI的乐器生成的事件。

该计划

可能播放的音乐性能,使用计算机的内部合成器,将它保存到磁盘作为MIDI

文件,或渲染成乐谱。

一个程序可能会使用一个MIDI输出端口,播放外部

仪器,或控制其它外部设备,如录音设备。

有关MIDI数据的更多信息是在第8章“的MIDI包的概述,”尤其是

一节中的“MIDI复习:

电线和文件。

MIDI配置

下图说明了在可能的主要组成部分之间的功能关系

MIDI配置的基础上的Java声音API。

 (音频,Java声音API允许多种

MIDI软件设备安装和相互关联的。

此处所示的系统是一个潜在

组件之间的数据流的情况。

)用箭头表示。

这些数据可以在一个标准的文件

格式,或(如,在图的右下角的关键所示),它可以是音频,原始的MIDI

字节,或时间标记的MIDI信息。

一个可能的MIDI配置

在这个例子中,应用程序准备通过加载一个乐谱的音乐表现

作为一个标准的MIDI文件在磁盘上(图左侧)的存储。

标准MIDI文件包含

曲目,其中每个时间标记的MIDI事件列表。

大多数的事件表示音符

(球场和节奏)。

该MIDI文件读取和软件音序器,然后“执行”。

音序器

MIDI信息发送到其他一些设备,如内部或外部,执行它的音乐

集大成者。

合成器本身可能会读一个音库文件,其中包含仿效的说明

某些乐器的声音。

如果没有,合成器播放MIDI文件存储的笔记

使用任何仪器的声音已经加载到的集大成者。

如图所示,MIDI事件必须被发送之前都会被翻译成原始(非时间标签)的MIDI

通过外部合成器的MIDI输出端口。

同样,进入原始的MIDI数据

从外部MIDI源(图)键盘乐器,电脑被翻译成

时间标记,可以控制合成器的MIDI信息,或音序器可以存储供以后使用。

所有

MIDI数据流的这些方面的MIDI后续章节(见第二部分详细解释

本指南)。

服务提供程序接口

javax.sound.sampled.spi在和javax.sound.midi.spi在包中包含的API,让

软件开发人员创建新的音频或MIDI资源可以单独提供给用户,并

“插入”到一个现有的Java声音API实现。

这里有一些例子服务

(资源),这样可以添加:

升一个音频混合器

l一个MIDI合成器

l一个文件解析器,可以读取或写入新的音频或MIDI文件类型

l一个转换器,不同的声音数据格式之间的转换

在某些情况下,服务是软件接口的硬件设备的功能,如声音,

卡,服务供应商可能是相同的硬件供应商。

在其他情况下,

服务存在纯粹的软件。

例如,合成器或混频器,可以到一个芯片上的接口

音效卡,或它可以实现没有任何人在所有的硬件​​支持。

Java声音API的一个实现包含一套基本的服务,但服务提供商

接口(SPI)包允许第三方创建新的服务。

这些第三方服务

集成到系统中内置的服务相同的方式。

在AudioSystem类

作为协调员,让MIDI包行为采样的包和MidiSystem类

应用程序访问的服务或明或暗地。

通常情况下,服务的存在是

一个使用它的应用程序完全透明的。

服务提供者机制的好处

基于Java的声音API的应用程序的用户,因为新的声音功能,可以添加到

没有要求一个新版本的JavaSDK或运行时环境,并在许多情况下,的方案,

甚至不需要一个新版本的应用程序本身。

第2章:

概述的抽样

本章提供了一个引进的声音的JavaTMAPI的数字音频架构,这是

通过javax.sound.sampled包的访问。

首先,包的解释

焦点:

播放和捕获格式的音频数据。

本章介绍的三个基本

播放或捕获音频数据格式,一条线和一个混频器,需要的组件。

该线

简要介绍了接口及其子接口。

设计目标

在审查的Java声音API的元素,它有助于理解的方向

javax.sound.sampled包。

数据传输上的一个焦点

javax.sound.sampled包是从根本上关注的音频传输,在其他

也就是说,Java声音API侧重于播放和捕获。

的中心任务,Java声音API

地址是如何将进,出系统格式的音频数据的字节。

这项任务包括

打开音频输入和输出设备和管理,获得实时声音数据填充的缓冲区。

还涉及到多个音频流混合成一个流(不论为输入或输出)。

运输进入或退出系统的声音,要正确处理当用户请求

声音流开始,暂停,恢复,或停止。

为了支持这个基本的音频输入和输出的重点,Java声音API提供的方法

之间的转换各种音频数据格式,阅读和写作常见的类型的声音文件。

然而,它并不试图成为一个全面的声音文件的工具包。

特定的实现

Java声音API需要支持广泛的文件类型或数据格式转换。

第三方服务供应商可以提供模块的“即插即用”,支持现有实施

其他文件类型和转换。

缓冲和非缓冲的音频处理

Java声音API可以处理在一个流,时尚缓冲和内存中的音频传输,

无缓冲时尚。

“流”是用在这里指一般意义上的实时音频处理

字节;它不是指具体的,众所周知的的情况下,通过互联网发送音频在一定

格式。

换句话说,音频流是一个简单的音频字节到达或连续设置

以同样的速度,他们将被处理(播放,记录等)。

操作的字节

开始之前,所有的数据已经到达。

在流模式,特别是在音频输入的情况下

而不是音频输出,你不一定知道提前多久的声音,以及何时会

完成到达。

您只需一次处理一个音频数据的缓冲区,直到操作停止。

音频输出(播放)的情况下,你还需要缓冲数据,如果您要播放的声音太大,

适合在内存中一次。

换句话说,你的声音引擎提供您的音频字节块,和

它需要在合适的时间打每个样品的照顾。

提供机制,可以很容易地知道

提供多少数据在每个块。

Java声音API还允许的情况下只播放无缓冲运输,假设你

已经在手的所有音频数据和它不是太大,适合在内存中。

在这种情况下,没有

需要为应用程序的缓冲区中的音频,虽然缓冲的,实时的态度仍然是

如果需要的话。

相反,整个声音可以预装在到内存中进行后续

播放。

因为所有的声音数据是提前加载,播放,可以立即启动,例如,

只要用户点击“开始”按钮。

这可以是一个缓冲模型相比的优势,

播放等待第一个缓冲区,以填补。

此外,在内存中,无缓冲模式

允许听起来要容易循环(循环),或设置在任意位置的数据。

播放这两款车型是在第4章进一步讨论,“播放音频。

”缓冲

录音是在第5章讨论,“捕捉音频。

要点:

格式,搅拌机,和行

要播放或使用Java声音API捕捉声音,你需要至少三件事情:

格式的音频数据,

一个混频器,和一条线。

这些都说明如下。

是什么格式的音频数据?

格式的音频数据是指在任何一个标准格式的声音。

Java声音API

区分的数据格式和文件格式。

数据格式

数据格式,告诉你如何解释“原始”取样的音频数据的字节的系列,如样品,

已经从声音文件中读取,或者已经从麦克风捕获的样本

输入。

例如,您可能需要知道,有多少位构成一个样本(代表性

最短的声音瞬间),同样你可能需要知道声音的采样率(如何快速

样品应该遵循相互)。

当设置为播放或捕获,可以指定

拍摄或播放的声音,你的数据格式。

在Java声音API,数据格式由AudioFormat对象,其中包括

以下属性:

升编码技术,通常脉码调制(PCM)

升通道数(1立体声,单声道,2等)

升采样率(每秒,每通道的样本数)

升位每个样品数(每通道)

升帧速率

升外形尺寸(以字节为单位)

升字节顺序(big-endian或little-endian的)

PCM是一种声音的波形编码。

Java声音API包括两个PCM编码

使用振幅线性量化,符号或无符号整型值。

线性量化

这意味着存储在每个样本的数量成正比(任何失真除外)

原来的声压在那一瞬间,同样比例扬声器的位移

或在那一瞬间的声音与振动的耳膜。

例如,光盘,使用线性

PCM编码的声音。

MU-law编码和A-law编码是常见的非线性编码

提供的音频数据的压缩版本;这些编码通常使用电话或

录音讲话。

一个非线性的编码映射的原始声音的振幅储值使用

一个非线性函数,可以设计比安静的声音,让更多的振幅分辨率

响亮的声音。

一个帧包含在某一特定时间的所有通道的数据。

对于PCM编码数据,帧

简单的设置在所有通道同时采样,在给定时间的瞬间,无需任何额外

信息。

在这种情况下,帧速率等于采样率,并在字节的帧大小是

数乘以位,由一个字节中的比特数除以样本大小的渠道。

对于其他种类的编码,一个框架可能包含更多的信息,除了样品,并

帧速率可能是完全不同的采样率。

例如,考虑的MP3(MPEG-1

音频层3)编码,这是当前版本的Java声音API中没有明确提到,

但它可以支持Java声音API的实现,或由第三方服务

供应商。

在MP3,每帧包含了一系列样品的压缩数据包,不只是一个

样品每通道。

由于每帧封装全系列的样品,帧速率较慢

比采样率。

该框架还包含一个头。

尽管头,以字节为单位的帧大小小于

比同等数量的PCM帧的字节大小。

(毕竟,MP3的目的是为了

更紧凑的PCM数据。

对于这样一个编码,采样率,样本大小)是指到PCM

编码的声音最终会被转换成数据,然后再被传递到

数字-模拟转换器(DAC)。

文件格式

文件格式指定的声音文件的结构,包括不仅是原始的音频数据格式

该文件,但也可以存储在文件中的其他信息。

在各种标准的声音文件

品种,如波(也称为WAV,并经常与电脑相关的),AIFF(常

与麦金塔电脑)和Au(常与UNIX系统)。

声音文件的不同类型

不同的结构。

例如,他们可能有不同的安排“头文件中的数据。

一个头包含描述性信息,通常先于实际的音频文件的样品,虽然

某些文件格式允许连续“块”的描述和音频数据。

头包括一个

规范的数据格式的声音文件存储在音频。

任何这些类型

声音文件可以包含各种数据格式(虽然通常有内只有一个数据格式

给定的文件),并使用相同的数据格式,可以在不同的文件格式的文件。

在Java声音API,文件格式由一个AudioFileFormat对象,其中包含:

l的文件类型(WAVE,AIFF等)

升该文件的长度(以字节为单位)

l的长度,在该文件中包含的音频数据帧,

升一个AudioFormat对象,指定在该文件中包含的音频数据的数据格式

AudioSystem类(第3章所述,“访问音频系统资源”)提供

用于阅读和写作在不同的文件格式的声音的方法,并为不同的转换

数据格式。

一些方法让你可以通过一种流文件的内容,被称为

AudioInputStream。

AudioInputStream是一个通

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1