2008-11-14 20:53

声明Java Sound教程系列属于Sun MicrosystemJava Tutorials,由kingmmxtj2008115日开始翻译,并将在http://hi.baidu.com/kingmmxtj上发布。译者尊重Sun的权利,仅仅把文章用于学习交流。转贴请保留,谢谢!

原文地址http://java.sun.com/docs/books/tutorial/sound/sampled-overview.html

文件格式(File Formats

文件格式描绘了声音文件的结构,不仅包括了文件中原始音频数据的格式,也包括了可以存储进文件的其他信息。声音文件有多种格式,像WAVE(也称为WAV,通常在PC上常见)、AIFF(通常在Mac机器上)、AU(通常在UNIX系统上)。不同的声音文件类型有着不同的结构。例如,可能对文件“头部里的数据有不同的排放。头部包含了在文件实际音频采样之前的描述性信息。也有一些文件格式允许包含有描述性信息和音频数据的连续“块”(chunks)。头部包含了对数据格式的详细描述,数据格式说明了在声音文件中音频的存储方式。任何一种声音文件类型(file types)都可以包含多种数据格式(data formats)(虽然通常在一个给定文件里只有一种数据格式),而某些数据格式可以应用在具有不同文件格式的文件中。

Java Sound API中,一个文件格式有一个AudioFileFormat对象表示,包含有:

l         文件类型(file types)(WAVAIFF,等等)

l         文件的字节长度

l         文件中音频数据的长度(用帧来衡量)

l         一个AudioFormat对象,描绘了文件中音频数据的数据格式

AudioSystem类提供了在不同文件格式中读取写入的方法,和在不同数据格式中转换的方法。其中一些方法可以让你通过一种叫做的AudioInputStream流来访问一个文件的内容。AudioInputStreamInputStream类的子类,InputStream类把一系列字节封装来提供连续读取。相对于其父类,AudioInputStream类增加了对音频数据格式字节的深入(由一个AudioFormat对象来表示)。通过把一个声音文件当作AudioInputStream来读取,你可以直接访问采样点,而不需要区关心声音文件的结构(头部信息,块,等等)一个单一方法调用就可以给你所需要的关于数据格式和文件类型的所有信息。

什么是混频器(mixer)?

许多针对声音的应用程序编程接口(APIs)都使用音频设备(device)这个概念。所谓设备通常是一个物理输入/输出设备的软件接口。例如,一个声音输入设备可能代表一个声卡的输入功能,包括了一个麦克风输入、一个线路电平(line-level)模拟输入、或者可能会有一个数字音频输入。

Java Sound API中,设备由Mixer对象来表示,混频器的作用是处理一个或多个音频输入流和一个或多个音频输出流。在典型应用中,混频器实际上把多路输入流混成一个输出流。一个Mixer对象代表了物理设备的混频能力,像一个声卡可能会把从电脑上的各种输入混音,或者把来自应用程序并且需要输出的声音混音。

另一方面,一个Mixer对象也可以单边一个没有继承任何物理设备接口,完全由软件来实现的设备的声音混频功能。

Java Sound API中,像麦克风输入或者声卡等组件自身不被当作是设备,即不被当作是混频器(mixer),而是被当作混频器的输入或者输出端口(port)。一个端口通常提供混频器输入或输出的一个流(流可以多信道(multichannel),像立体声(stero))。混频器可以有多个端口。例如,代表一个声卡输出功能的混频器可能把多个音频流混在一起,然后把该混合信号送到连接该混频器的某个或这所有输出端口。这些输出端口可以是(举例)一个耳机插孔(headphone jack)、一个内置喇叭、或者一个线路级(line-level)输出。

理解Java Sound API中混频器的概念可以帮助我们视觉化一个真正的物理混频器控制台,像在现场音乐会和录音工作室里用的那些混频器。

一个物理混频控制台

一个物理混频器有许多的“路”(strips or slices),每一路代表一个音频信号进入混频器进行处理的路径。每一路有许多旋钮和其他可以控制该路信号音量和缩放(pan)(在立体图像stereo image中应用)(Panning解释:Panning is the spread of a monaural signal in a stereo or multi-channel sound field. A typical pan control is constant power. At one extreme, the sound appears in only one channel. In the middle, the sound is decreased in that channel by 3 dB, and the other channel is brought up to the same level, so that the overall sound power level is always constant.[1]――wikipedia)。混频器也有一条控制声音效果的总线,像混响(reverb),该总线可以连接到内置或者外置的混响单元。每条线路都有一个电压计来控制该条线路信号进入混响混合(reverbertated mix)的量。然后已混响混合(湿的“wet”)和来自线路“干的“(dry)信号进行混合。最后混频器把最终的混合信号发送到输出总线,通常是发送到录音器(或者是硬盘上的录音系统)或者是扬声器。

设想一个正在用立体声录音的现场音乐会。从许多麦克风连出来的电线(或者是无线连接)和台上的电子乐器都被接入混音控制台的输入端口。每一路输入都进入一条独立的strip中,如上所述。音响工程师决定了增益(gain),缩放(pan),和混响(reverb)的控制设置。所有strips和混响单元的输出被混合在一起进入2个声道。这2个声道直通混频器的2个输出,进入音乐会立体声录音器的输入。或者该2个声道通过放大器接到大厅的扬声器,这取决于音乐的类型和演奏厅的大小。

再设想一个录音工作室。在这里,每一种乐器或者人声被多轨录音机(multitrack tape recorder)录制到独立的轨道(track)上。在所有乐器和人声录音完成后,录音工程师开始“mixdown”来把录制的所有轨道的声音混合成一个2声道(立体声)录音,这种录音就是CD格式。在这种情况下,混频器的各路strip输入不在是一个麦克风,而是多轨录音中的一轨。同样,工程师可以使用strips上的控制按钮来决定每轨的音量(volume)、缩放(pan)、和混响(reverb)量。混频器的输出再次接入一个立体声录音机和一个立体声扬声器,与现场音乐会的例子差不多。

以上2个例子描绘了2种不同的使用混频器的情况:捕捉多输入声道信号,混合为较少的轨,保存混合声音,或者回放多轨录音的同时进行混频至较少的音轨。

Java Sound API种,一个混频器同样可以用来处理输入(捕捉音频)和输出(回放音频)。在输入的情况下,从混频器得到的要混频的音频源(source)是一个或多个端口(ports)。混频器把捕捉到的和混合的音频流送至目标(target)输出,目标通常为带有缓冲的对象,而从该对象中应用程序可以取回混频的音频数据。在音频输出的情况下,情况正好反过来。混频器的音频源是含有缓冲的一个或多个对象,而一个或多个应用程序可以把各自的音频数据写入到这些对象中;而混频器的目标输出将是一个或多个输出端口。


台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()