java版javafc模拟器器的声音设置

声音声音对象允许你设置和控制指定MC中的声音。或者你可以通过在产生新的声音对象时,不指定target选项来控制整体MC中的声音。你必须使用构造函数 new Sound() 来产生一个声音对象的实例,才能调用声音对象的成员函数来控制它。 声音对象只能被Flash5的播放器支持。声音对象的成员函数列表:----------------------------------------------------------------------构造函数 说明----------------------------------------------------------------------attachSound(); 绑定参数中指定的声音。getPan (); 返回上次 setPan 函数调用的结果。getTransform(); 返回上次 setTransform 函数调用的结果。getVolume(); 返回上次 setVolume 函数调用的结果。setPan(); 设置声音的左右均衡值。setTransform(); 设置声音的变换。setVolume(); 设置声音的音量值。start(); 开始播放声音,从起始位置开始或者从参数中设置的偏移点开始播放。stop(); 停止播放指定的声音或者停止当前播放的所有声音。----------------------------------------------------------------------------------声音总览声音部分将使用相当大的一部分硬盘和内存空间。因为立体声将使用单声道声音的两倍空间,一般最好使用22-Khz,16-bit的单声道声音。你可以使用SetTransform函数来将单声道声音以立体声的方式来播放,或者将立体声播放成单声道,而且可以对声音加上一些有趣的效果。声音对象的构造函数:语法:new Sound();new Sound(target);参数:target 用于指定生成的声音对象所在和控制的MC。该参数是可选参数。说明:成员函数;作用是产生指定的MC中的新声音对象,该对象将用于控制这个MC中的声音,如果没有指定target参数,则产生的对象将控制所有的时间线上的声音。播放器:flash5或以后版本例子:GlobalSound = new Sound();MovieSound = new Sound(mymovie);Sound.attachSound语法:mySound.attachSound("idName" ) ;参数:idName 声音对象的新实例名。这个名字和元素的Linkage Properties对话框中输入的标识名是相同的。该参数必须包含在""中。说明:成员函数;该函数的作用就在于将idName所指定的声音元素绑定到指定的声音对象中。绑定的声音元素必须位于当前的库中,并且在元素的Linkage Properties对话框中指定输出。大家可以使用Sound.start来开始播放声音。播放器:Flash5或以后版本例子:Sound.getPan语法:mySound.getPan();参数:无说明:成员函数;该函数返回上次 setPan 调用后设置的声音均衡值,数值为在-100~100的整数。这个值将控制当前以及以后播放的声音的左/右平衡。该成员函数与setVolume和setTransform函数相关。播放器:Flash5或以后版本例子:Sound.getTransform语法:mySound.getTransform();参数:无说明:成员函数;返回指定声音对象中上一次 setTransform 调用后的声音变换信息。播放器:Flash5或以后版本例子:Sound.getVolume语法:mySound.getVolume();参数:无说明:成员函数;返回当前音量值,数值在0~100,其中0为静音,100为音量最大值,缺省设置为100。播放器:Flash5或以后版本例子:Sound.setPan语法:mySound.setPan(pan);参数:pan 设置声音左右均衡度的一个整数值,范围在-100~100之间。-100表示只使用左声道,100表示只使用右声道,等于0表示左右声道平均分配。说明:成员函数;决定声音是如何在左右声道(音箱)中播放的。对于单声道声音,pan将影响声音到底是通过哪个音箱(左或者右)播放。该成员函数同setVolume和setTransform函数相关,调用了该函数将删除和重新设置先前的setPan()和setTransform()函数的设置值。播放器:Flash5或以后版本例子:下面例子将使用setVolume 和 setPan 来控制指定目标"u2"中的声音对象:onClipEvent(mouseDown){//产生一个新的声音对象并且s =new Sound(this);//绑定一个库中的声音元素s.attachSound("u2" ) ;//设置音量值为 50%s.setVolume(50);//将右声道的声音关掉s.setPan(-100);//从声音的第30秒开始播放,并循环播放5次。s.start(30,5);Sound.setTransform语法:mySound.setTransform(soundTransformObject);参数:soundTransformObject 是一个通过调用特殊对象Object的构造函数生成的对象。说明:成员函数;设置声音对象的声音变换信息。该函数和 setVolume 以及 setPan 相关,调用该函数将修改先前 setPan 或 setVolume 所做的设置。该函数是为那些想在声音中添加有趣的效果的专家们所设置。soundtransformobject 参数是一个对象,你通过调用特殊对象Object的构造函数来生成它,它的参数指定了声音是如何分布在左/右声道(音箱)中的。soundtransformobject 对象的参数如下:ll 指定声音左边输入值在左音箱中播放的百分数(-100到100)。lr 指定声音右边输入值在左音箱中播放的百分数(-100到100)。rr 指定声音右边输入值在右音箱中播放的百分数(-100到100)。rl 指定声音左边输入值在右音箱中播放的百分数(-100到100)。输出将按以下的公式给出:左边输出=左边输入*ll+右边输入*lr右边输出=右边输入*rr+左边输入*rl左边输入值以及右边输入值由播放的声音对象的类型(立体声或者单声道)来决定。立体声将声音输入平均划分到左右两个音箱中,具有如下缺省变换设置:ll =100lr =0rr =100rl =0单声道将所有的声音输入在左音箱中播放,缺省变换设置如下:ll =100lr =100rr =0rl =0播放器:Flash5或以后版本例子1:下面的例子将产生一个声音变换对象,将所有左声道和右声道的声音都放到左声道播放。mySoundTransformObject =new ObjectmySoundTransformObject.ll =100mySoundTransformObject.lr =100mySoundTransformObject.rr =0mySoundTransformObject.rl =0上面的代码产生一个声音变换对象,为了将它应用到一个声音对象中,你需要象下面那样通过setTransform将它放入声音对象中:mySound.setTransform(mySoundTransformObject);下面的例子中,可以使用setTransform进行设置,但是不能使用setVolume 或者 setPan来设置,即使是组合起来用。这个代码将左右声道的声音都在左声道中播放:mySund.setTransform(soundTransformObjectLeft);上面的代码中,soundTransformObjectLeft具有如下的参数:11 =1001r =100rr =0rl =0例子2:下面代码将立体声当作单声道声音来播放:setTransform(soundTransformObjectMono);在上面的代码中,soundTransformObjectMono具有如下参数:ll =50lr =50rr =50rl =50例子3:这个代码将左声道的声音对半分开,一半在左声道中播放,另一半加到右声道中播放。setTransform(soundTransformObjectHalf);上面代码中,soundTransformObjectHalf具有如下参数:11 =50lr =0rr =100rl =50Sound.setVolume语法:mySound.setVolume(volume);参数:volume 声音的音量值,一般为0~100。100是全音量,0表示音量为0。缺省设置为100。说明:成员函数;该函数用于设置声音对象的音量值。该函数和 setPan 和 setTransform 函数相关。播放器:Flash5或以后版本参考:setPan的例子。Sound.start语法:mySound.start();mySound.start([secondOffset,loop]);参数:secondOffset 一个可选的参数,允许你在一个指定点上开始播放声音。例如,如果你有一个30秒的声音,希望能在声音的中间开始播放。在secondOffset参数中指定15,声音将不是延时15秒,而是在第15秒处立即开始播放。loop 一个可选的参数,允许你指定声音播放的循环次数。说明:成员函数;开始播放最后一次绑定的声音,如果不指定时间偏移的话,将从头开始播放。或者从secondOffset参数中所指定的偏移点上开始播放。播放器:Flash5或以后版本参考:setPan的例子。Sound.stop语法:mySound.stop();mySound.stop(["idName"]);参数:idName 可选参数,用于指定要停止播放的声音。idName必须包括在双引号""中。说明:成员函数;用于控制声音的停止,没有参数idName为停止当前所有声音的播放,如果指定了idName,则只停止播放指定的声音。播放器:Flash5或以后版本例子:_soundbuftime语法:instancename._soundbuftimesetProperty("movieclip",_soundbuftime,"integer" ) ;参数:integer 声音开始流式播放前的秒数movieclip MC的名字说明:全局属性;确定声音流预缓冲的秒数。缺省值为5秒。播放器:Flash4或以后版本
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:390522次
积分:5603
积分:5603
排名:第1688名
原创:170篇
转载:257篇
评论:57条
(2)(8)(2)(4)(2)(4)(3)(15)(5)(5)(30)(24)(4)(9)(5)(2)(21)(10)(8)(3)(11)(1)(18)(5)(3)(7)(7)(14)(8)(3)(9)(1)(2)(13)(7)(4)(32)(42)(20)(14)(20)(2)(7)(11)英文n64模拟器声音怎么关
我家的n64模拟器是英文的,我想把声音关掉,该怎么弄?
09-12-05 &匿名提问 发布
您好可能是你下载的模拟器的原因我把所有的PSP模拟器都收集了  你到讯雷去下在吧FCFC模拟器PSPFceUltraV2  日语FC模拟器NesterJ    英文SFCSFC模拟器snes9xTYL0.4.2.rar    英文JAVAJava手游模拟器PSPKVM v0.3.2   英文Java手游模拟器PSPKVM V3.1   英文Java模拟器 PSPKVM v0.3.0      英文MDMD模拟器PicoDrive_psp_140b     英文MD模拟器PSPGenesisV0.18        其它PSP用MD_CD模拟器PicoDrive v1.53b    英文世嘉MD模拟器DGEN1.70       英文 NGPPSP用NGP掌机模拟器NeoPop PSP v0.71.1(内含18款游戏)    日文CPSPSP用NGP掌机模拟器NeoPop PSP v0.71.1(内含18款游戏)     英文ColecoVisionColecoVision模拟器PSPColEmv1.0.9           日文N64N64模拟器Monkey_64     英文N64模拟器 Daedalus Shiff upv1.3   日语WCS-PCEPCE模拟器HueV0.7        英文WSC-PCE模拟器       日文GGGG模拟器MMSPlus_v1.1    英文GBGB模拟器RIN_v1_32    英文GB_GBC_SMS_G模拟器MB v2.02  英文GBAGBA模拟器PSPVBAv1.2.4   日文GBA模拟器gpSP3.2      英文街机NEOGEO街机模拟器MVSPSP2.2.4   英文Capcom街机模拟器CPS2PSPver.2.2.4   英文NEOGEOCD模拟器ncdzpsp 2.0联机版    英文MAME    MAME模拟器MAME4ALLv4.9r1   英文NDSPSP上的NDS模拟器     英文  (推荐)PSPS模拟器首领蜂       日文其他软件   PSP资源管理器 5.0          英文MVSPSP模拟器傻瓜包(KOF系列01-03)    英文30个PSP游戏开启画面整理下载     日文psp金手指工具FreeCheat     英文PSP用FLV播放器 PSPTube    英文
请登录后再发表评论!1042人阅读
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 设置和获得混音器音量
& //如果第一个参数是true,那么就是设置,否则就是获得
bool CTalkBackDlg::SetGetDevVolume(bool bIsSet,DWORD & dwVolume)
// 多媒体函数返回结果变量
hM // 混合器设备句柄
// 音频线路标准状态信息结构体
MIXERLINECONTROLS
// 音频线路控制器集合信息结构体
MIXERCONTROL
// 单个音频线路控制器信息结构体
// 打开混合器设备
rc = mixerOpen(&hMixer, // 返回的设备句柄
// 单声卡的设备ID为零
// 不使用回调机制
// 回调函数参数
// MIXER_OBJECTF_MIXER宏的值,表示任选有效设备ID
// 打开混合器设备无错的话,则
if (MMSYSERR_NOERROR == rc)
// MIXERLINE 结构体变量清零
ZeroMemory(&mxl, sizeof(MIXERLINE));
mxl.cbStruct = sizeof(MIXERLINE); // 微软用此办法判断版本
// 指出需要获取的通道,声卡的音频输出用MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
// 取得混合器设备的指定线路信息
rc = mixerGetLineInfo((HMIXEROBJ)hMixer,
// 取得MIXERLINE::dwComponentType指定类型的第一个音频线路信息
MIXER_GETLINEINFOF_COMPONENTTYPE);
// 取得混合器设备的指定线路信息成功的话,则
if (MMSYSERR_NOERROR == rc)
// MIXERCONTROL 结构体变量清零
ZeroMemory(&mxc, sizeof(MIXERCONTROL));
mxc.cbStruct = sizeof(mxc); // 微软用此办法判断版本
// MIXERLINECONTROLS 结构体变量清零
ZeroMemory(&mxlc, sizeof(MIXERLINECONTROLS));
mxlc.cbStruct = sizeof(mxlc); // 微软用此办法判断版本
mxlc.dwLineID = mxl.dwLineID; // 上面取得的声卡音频输出线路标识
// 控制类型为控制音量
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls = 1;
// 使用 MIXERCONTROL 结构体变量个数
mxlc.pamxctrl = &
// MIXERCONTROL 结构体变量指针
mxlc.cbmxctrl = sizeof(mxc); // MIXERCONTROL 结构体变量字节大小
// 取得控制器信息
rc = mixerGetLineControls((HMIXEROBJ)hMixer,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
// 取得控制器信息成功的话,则
if (MMSYSERR_NOERROR == rc)
// 获取控制器中的值的音量范围:mxc.Bounds.lMinimum到mxc.Bounds.lMaximum.
MIXERCONTROLDETAILS
// 控制器的状态信息
MIXERCONTROLDETAILS_SIGNED volS // 音量结构体变量(就一个成员量)
// MIXERCONTROLDETAILS 结构体变量清零
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd);
// 微软用此办法判断版本
mxcd.dwControlID = mxc.dwControlID; // 上面取得的控制器标识
mxcd.paDetails = &volS
// 音量结构体变量指针
mxcd.cbDetails = sizeof(volStruct); // 音量结构体变量字节大小
mxcd.cChannels = 1;
// 取得或设置全部通道
// 设置音量
if (bIsSet)
volStruct.lValue = dwV // 想要设置的值
rc = mixerSetControlDetails((HMIXEROBJ)hMixer,
MIXER_SETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc)
// 获得音量值
rc = mixerGetControlDetails((HMIXEROBJ)hMixer,
MIXER_GETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc)
dwVolume=volStruct.lV
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:757164次
积分:9532
积分:9532
排名:第633名
原创:237篇
转载:92篇
评论:128条
(1)(3)(4)(6)(1)(2)(2)(2)(2)(2)(2)(4)(2)(8)(16)(10)(23)(14)(7)(16)(4)(3)(3)(15)(3)(42)(6)(17)(16)(1)(4)(7)(6)(9)(17)(1)(1)(5)(2)(6)(1)(3)(1)(9)(7)(2)(1)(4)(5)(7)Java的声音处理介绍
核心提示:声音可以创造意境,触发遐想,Java的声音处理介绍,当与虚拟图像相结合时,更加可以让整个世界布满幻觉,新的媒体技术不断涌现,声音将扮演核心的角色,声音是多媒体技术的基础,这就是Sun公司的java媒体技术开发小组忙于预备Java Sound 1.0 API并将其包含于下一版本的JAVA开发工具库中的原因
  声音可以创造意境,触发遐想,当与虚拟图像相结合时,更加可以让整个世界布满幻觉。声音是多媒体技术的基础。这就是Sun公司的java媒体技术开发小组忙于预备Java Sound 1.0 API并将其包含于下一版本的JAVA开发工具库中的原因。   在JAVA2平台出现之前,JAVA语言只能处理电话音质的声音,以单声道8KHZ的采样频率存储为μ-law AU文件。JAVA2平台增加了对AIFF,WAV以及三种MIDI文件类型的支持。所支持的三种MIDI文件格式为MIDI文件类型0、MIDI文件类型1、以及RMF。  应用程序接口API1.0版提供了一个易于使用的工具集,使程序员可以访问底层的合成与演奏引擎,从而扩展了JAVA声音的应用。其中两个重要的领域是创建数字化音频以及乐器指令数字化接口MIDI。由于提供了大量的底层支持功能,所以程序员能输入输出声音,控制MIDI设备,并能查询系统运作情况。  声音文件类型简介  主要的声音文件类型如下:  AU - (扩展名为AU或SND)适用于短的声音文件,为Solaris和下一代机器的通用文件格式,也是JAVA平台的标准的音频格式。AU类型文件使用的三种典型音频格式为: 8位μ-law类型(通常采样频率为8kHz), 8位线性类型,以及16位线性类型。   WAV - (扩展名为WAV)由 Microsoft和 IBM共同开发,对WAV的支持已经被加进Windows 95并且被延伸到Windows 98. WAV文件能存储各种格式包括μ-law,a-law和 PCM (线性)数据。他们几乎能被所有支持声音的Windows应用程序播放。   AIFF - (扩展名为AIF或IEF)音频互换文件格式是为Macintosh计算机和Silicon Graphics (SGI)计算机所共用的标准音频文件格式。AIFF和 AIFF-C几乎是相同的,除了后者支持例如μ-law和 IMA ADPCM类型的压缩。  MIDI - (扩展名为MID)乐器数字接口MIDI是为音乐制造业所认可的标准,主要用于控制诸如合成器和声卡之类的设备。   MIDI文件不包含数字音频采样,而是包括一系列指令,这些指令控制把来自不同乐器上的音符序列合成乐曲。一些MIDI文件包含附加指令来为各种合成设置进行编程。   大多数合成器支持MIDI标准,所以在一个合成器上制作的音乐能够在另一个上播放。 有 MIDI接口的计算机能操纵 MIDI数据以产生新音乐或音响效果。例如,一个完整的音乐作品可以通过一个软件驱动的命令转换成全新的形式。  JAVA声音引擎支持两种MIDI文件类型:   MIDI类型0文件-包含仅仅一个序列,所有相关的乐器部分被包含在同一个逻辑 "磁道"上。   MIDI类型1文件-包含多重的 "磁道"使得不同的乐器被逻辑地分开,从而使对声音的操作和重组更加轻易。  RMF - (扩展名为RMF)混合音乐格式是由Beatnik设计出来的混合文件类型,通过交互式设定将MIDI和音频采样封装在一起。RMF好比是一个所有音乐相关文件的容器。RMF也包含对有关版权的具体文件说明的支持。RMF文件可以包含多个由不同艺术家创作的存储为MIDI类型或音频采样类型的作品,每个都关联着相关的版权信息。对声音引擎的选择   在1997年,SUN的JAVA媒体开发组试图找到一种方法,以增强声音的处理能力并为将来提供一个坚实的平台。根据JAVA媒体开发组经理Michael Bundschuh所说, "我们想要非常高质量的播放引擎以处理所有的从八位μ-law级直到 CD质量声音的每一件操作。 我们希望轻松跨越所有平台,诸如Solaris平台, Windows, Mac以及其他。我们也想要高度发展了的能够跨越不同平台的MIDI能力。为上述目的,合理的选择是Beatnik的音频引擎(从前是Headspace。)"SUN取得了Beatnik的音频引擎使用许可,把它当作JAVA声音应用程序接口API的基础。  Thomas Dolby Robertson-Beatnik简介  在90年代初之前,Thomas Dolby Robertson的职业完全在音乐方面。他1982推出的"她用科学照亮了我"是一部早期的MTV巨作。整个80年代,他都在不断地作曲和录音,使用一种非结构化音乐制作软件。但是在 1990,通过一次为Guggenheim博物馆演示虚拟现实的合作,他开始思考能否做一些提高音乐制作能力的工作。  "我当时正伏在 C程序员的肩上,并且我忽然熟悉到为做记录做了大量的工作,可是没有为演奏时的交互做任何事情。"有了这样的想法,Robertson在1992年建立了Headspace,雇用月光作曲组来帮助实现他的观点。Headspace于1996年成为公司,现在被称为Beatnik。   JAVA声音音频引擎  JAVA声音引擎为多媒体创建,同时考虑了游戏设计和发布WEB内容。用标准的 MIDI文件、RMF文件、并且/或来自任何源的采样,该引擎将播放音乐或制造音响效果,同时尽可能少用CPU。它提供完全的播放控制,具有混合音响的能力并可实时地回应用户的输入。   JAVA声音引擎是软件 MIDI合成器,采样播放设备,以及16位立体混声器。它支持混合直到64位的立体MIDI声音和音频采样。它直接支持MIDI类型0和类型1文件以及从8位设备到16位乐器的波表合成。该引擎支持所有通用的 MIDI控制器并且包含象回声处理, LFO (控制过滤器或立体声设备)之类的特性,以及ADSR信封 (播放时整形采样)。  即使用上所有的功能,JAVA声音引擎在一个90Mhz的奔腾计算机上也占用不超过30%的CPU时间。它还能通过有选择地禁用不需要的特性,使其变得更加高效一些。另外,它发布了存储在压缩的RMF音乐文件中的丰富的内容。Thomas Dolby Robertson的"她用科学照亮了我",一首7分21秒的歌曲,如存储为CD音质的文件足足占用70M字节空间。假如以RMF格式存储只需大约636 KB,是120:1的减少,同时丝毫不减音质。  JAVA平台声音的简要历史   在JDK 1.0.x及JDK 1.1.x下, AudioClip接口提供下列机能:  l AudioClip接口  播放  循环  停止  恢复和播放声音最简单的方法是通过Applet类的play()方法。调用play()方法有如下二种方式:   play()-带有一个参数,一个 URL对象,装载并演奏储存在 URL处的声音片断。  play()-带有二个参数,基本 URL和文件夹路径名,装载并演奏声音文件。第一参数经常是对getCodeBase()或 getDocumentBase()的调用。   下列代码片断举例说明了直接播放 hello.au的方法。AU文件与小应用程序位于相同文件夹或目录。  play(getCodeBase(), "hello.au");  play()一旦被调用马上开始恢复和播放声音。假如声音文件不能被查找,将不会有出错信息,仅仅是沉默。  启动和停止声音文件,或循环播放,你必须用 applet的 getAudioClip方法把它装载进入 AudioClip对象,类似上面play()方法的参数,getAudioClip方法要用一个或两个参数,当作播放的指示。 第一个或唯一的一个参数是 URL参数,用来指示声音文件的位置,第二参数是文件夹路径指针。   下列代码行举例说明加载声音文件进入剪贴对象:   AudioClip co = getAudioClip(getCodeBase(), "horns.wav");  getAudioClip()方法仅仅能被applet内调用。随着JAVA2的引入,应用程序也能用Applet类的newAudioClip方法装入声音文件。前一例子可以改写如下以用于Java应用程序:  AudioClip co = newAudioClip("horns.wav");  在你已创建 AudioClip对象之后,你能用该对象调用play()、loop()以及stop()方法。假如 getAudioClip或 newAudioClip方法不能找到指定的声音文件, AudioClip对象的值将是空的。试着播放空对象会导致出错,所以标准的过程首先是对该条件进行检测。  接下来是一个完整的程序设计示例,该程序将产生一个applet,当鼠标在该小应用程序applet范围内按下时会播放 flute+hrn+mrmba.au音乐样本。此AU示例文件与applet在相同目录或文件夹下的。import java.applet.*;import java.awt.event.*;public class PlayAudio extends Appletimplements MouseListener {AudioCpublic void init() {audio = getAudioClip(getDocumentBase(),"flute+hrn+mrmba.au");addMouseListener(this);}public void mousePRessed(MouseEvent evt) {if (audio != null) audio.play();}public void mouseEntered (MouseEvent me) {}public void mouseExited (MouseEvent me) {}public void mouseClicked (MouseEvent me) {}public void mouseReleased(MouseEvent me) {}}  注重: 在许多JAVA2技术书籍中,mouseDown()方法确实是JAVA 1.0事件模型的一部分。使用该方法会有一定的危险,因为该方法在将来可能不会被支持。在JAVA2平台下将MouseListener与mousePressed结合使用是优先的选择。API 1.0-质的飞跃  注重:下列备注是以JAVA API的早期版本0.86为基础的。虽然目前这里讨论的大多数对象和概念与过去保持一致,但由于该API版本已经终止,出现某些改变的可能是存在的。  JAVA声音 1.0 API为JAVA平台定义了一整套的基本的底层音频处理功能。它提供如下接口为:音频捕捉和播放 IDI合成及序列化   这两个主要的功能模块在各自的程序包中提供。  javax.media.sound.sampled-该程序包明确地说明了捕捉、混合以及回播数字采样音频的界面。  javax.media.sound.MIDI-该程序包提供MIDI合成、序列化以及事件传送的界面。   JAVA 1.0 API具备如下特性:  数字音频频捕捉-从输入源例如麦克风进行数据捕捉。 音和重播-将各种输入源的声音混合并重播。 制与编码-调整增益、定位、回音处理等等,以及进行格式转换。 态及其提示-当重播开始和结束、设备打开或关闭以及其他相关事件发生时接收事件。   对MIDI的支持 MIDI消息-交换消息(打开音符,关闭音符,诸如此类) 合成-从MIDI数据装入乐器并产生声音。 序列化-装入一个MIDI序列,开始和停止播放,以及调整节奏。   工具 件输入输出-读写通用音频文件例如WAV,AIFF及MIDI 置-查询系统来获得组件和设备的信息;安装或取消编码、文件分析器和设备等。   数字化音频  通道  Kara Kytle, JAVA声音 API主管工程师和系统设计师说:"Channel是音频管道中的基本功能部件"。实现Channel界面的类代表着该"管道"的一个元素,例如硬件设备,一个声音合成器,或者是一个单音频流。  InputChannel和 OutputChannel继续了Channel,分别用于读入被捕捉的数据和为播放写数据。子界面Clip支持对预装入的音频数据循环播放和重新定位。Device表示任何用于捕捉、播放或混和音频的硬件或软件设备。当一个Channel打开时,它为自己保留了系统资源 ,并且当它结束时,这些资源被释放给其他的应用程序和对象使用。用isOpen()方法可以查询Channel是打开还是关闭的。数据的处理通常由子界面方法比如read()方法来启动,这部分在InputChannel界面说明描述 (请看JAVA声音 API的说明书)。  处理方法使Channel处于负责输入或输出音频数据的状态。用isActive方法可以识别Channel是否处于这种状态。通过调用pause()方法可以使通道处于暂停状态,此状态可以通过isPaused()方法判别。当通道被暂停时,有三种选择:保留数据(缺省),用flush()方法丢弃内部缓冲器中的数据,或用drain()方法使内部缓存中的数据被立即处理。  对象事先可以注册,这样每当通道状态改变时它都可以收到通告信息。该注册对象必须实现Channel.Listener界面,该界面仅包含一个方法update()。当Channel打开、结束、启动、及停止时,该方法都将被调用。当Channel开始或停止活动以及开始或停止捕捉数据时,会产生start或stop事件。  输入通道  InputChannel是被捕捉的音频数据的源头。该界面提供了方法,可从 InputChannel缓冲器读取被捕捉的数据,并判定当前可读的数据量。假如应用程序试图读过多的数据,该读方法阻塞,直到所需读取数据达到为止。   输出通道  OutputChannel接收用于播放的音频数据。这接口提供方法,将要播放的数据写入OutputChannel的缓冲区,并能判定该通道不间断可接收的数据量。假如应用程序试图写过量的数据,该读方法阻塞,直到有足够数据为止。   剪贴  Clip接口表示一个非凡的通道,它可以在播放之前先装入音频数据。由于数据是预装入的,而不是流入的,所以clip可以支持持续查询、循环播放、以及重新定位播放。   设备  Device界面为表示音频设备的类提供方法。音频设备可以是共享的也可是独占的系统资源,它可以是基于硬件的,也可基于软件的,还可是同时基于两者的。它能被重复地打开和关闭,它能时常说明它的内在特性及支持的音频格式。同时,它也提供信息对象来描述设备。  JAVA声音 API进一步描述三种设备子界面:  InputDevice  InputDevice界面提供一个方法getInputChannel来获得一个InputChannel对象,从中捕捉可读的音频数据。  OutputDevice  OutputDevice界面提供一个方法getOutputChannel来获得一个OutputChannel对象,音频数据可以写入该输出通道,并予播放。  Mixer  Mixer支持多个InputChannel和/或Clip。 另外,它提供了查询方法,从中可得到它所支持的通道数量,它也提供了支持同步暂停和唤醒多个通道播放的方法。  控件  通道和音频端口 (比如扬声器和麦克风)一般能支持一组控件比如增益和定位。通过将它的类作为参数传给getControl()方法,JAVA声音 API的通道对象和端口对象可以获得一个非凡的控件。  编码器  Codecs可以对音频数据编码和解码,答应在不同格式和编码之间转换。JAVA声音 API通过AudioSystem类中的方法为这些转换提供了高级接口。假如给了一个非凡的音频流,应用程序会查询音频系统来找到相应的转换,从而得到指定格式的音频流。  文件和流  音频流是与音频数据格式和数据长度相关的输入流,文件流是与文件类型和数据长度相关的输入流。JAVA声音 API在AudioSystem类中为音频文件和音频流之间的转换提供了接口。  查询和访问安装组件  AudioSystem类充当到采样音频系统资源入口的角色。该类答应程序员查询和访问输入设备、输出设备以及安装好的混音设备。另外,AudioSystem包含许多在不同音频数据格式间转换的方法。它也提供一些方法,使得在不需要对设备直接操作的情况下,直接获得输入通道或输出通道。系统配置-服务提供者界面(SPI)  对采样音频系统的配置是由javax.media.sound.sampled.spi包来完成的。通过 AudioConfig类的方法,可以在系统中安装或卸载设备,并且可以建立起缺省状态。服务提供者可以希望提供和安装他们自己的编码器和分析器。这个包提供了完成这种功能的机制。  MIDI  javax.media.sound.MIDI程序包描述了 MIDI事件传送、合成、以及序列化的界面。下面介绍该程序包中所用到的主要概念。  传送  基本的MIDI传送界面是 MidiDevice。所有设备为列出其所支持的模式和查询当前模式提供了方法。设备支持监听器,可以监听各种事件如打开和关闭事件,并且有一个信息对象来描述设备状态。   通常,设备是MIDI事件的传送器或接收器之一。传送器界面提供了一些方法来设置和查询接收器,该接收器接收由该传送器发送出的MIDI事件。接收器为接收MIDI事件提供方法。   基本的 MidiEvent对象是通过一个消息说明事件类型、数据长度、以及状态。它也为涉及MIDI计时的设备例如音序器提供准确的计时信号。  合成器  合成器界面是一种生成声音的非凡类型的接收器。它也提供一些方法来治理声音库和乐器。另外,合成器可以支持一组全局的非-MIDI控件例如增益和定位。它也提供对一组MIDI通道的访问,实际上,声音就是通过这些通道产生的。  MidiChannel界面提供一组方法来表达公用的MIDI声音消息例如 noteON, noteOff以及controlChange。还支持对当前通道状态的查询。  序列化  Sequencer界面继续了MidiDevice,它提供了完成基本MIDI序列化操作的方法。音序器可以装载和播放一个序列,查询和设置节奏,并且控制主从同步方式。一个应用程序还可以通过注册使得音序器在处理设备单元和控制器事件时通知自己。  文件和序列化  序列化对象代表一个来自一个或多个磁道的MIDI序列以及相关的计时信息。一个磁道对象包含一系列加上时间标记的MIDI事件。  JAVA声音 API在 MidiSystem类中为在MIDI文件和序列化对象之间转换提供了高级的接口。  查询和访问已经安装了的组件  MidiSystem类充当MIDI音乐系统入口的角色。它提供相关设备的信息并对之进行访问,这些设备包括传送器,接收器,合成器,以及音序器。它也提供了对SoundBank对象的访问。   系统配置-服务提供者接口(SPI)  MIDI系统的配置由javax.media.sound.midi.spi包来完成的。通过MidiConfig类的方法,设备可以安装到系统中或从中卸载,并且可以建立起缺省状态。服务提供者可以希望提供和安装他们自己的文件和声音库分析器。该SPI程序包中包括了完成这种功能的机制。JAVA声音 API的市场目标  JAVA声音 API为各种各样的应用程序提供了声音支持。下面列举一些可能的应用。  通信框架  通过计算机召开远程会议  在计算机上实现电话功能   内容发布系统  音乐  信息流  媒体传播  交互式应用程序  游戏  WEB站点  产生动态内容  工具集  内容产生  各种工具  在此基础上我们能做什么?  JAVA 2通过 AudioClip界面来访问JAVA声音音频引擎。随着1.0 API的发布,我们所曾经探索的应用领域,就将提供给各地的开发人员使用。  "现在,我们通过在JAVA2平台中加入真实声音的支持,启动了计算机桌面多媒体市场。以后,我们将看见我们的JAVA声音API技术广泛应用于专业人员、普通用户以及国际互连网上的音频应用", Michael Bundschuh说。   电影和录音带公司通过使用JAVA声音 API技术可以获得专业质量音频效果。在JAVA声音引擎中实现支持24位音频和多通道配置将鼓励专业人员开发出高级的声音编辑和播放应用程序。  根据 Kara Kytle所说,对更多的音频数据类型例如mp3的支持已经被提到议事日程。"另一个议程是从外部设备对MIDI数据进行捕捉。这将很快实现。"她说。   "JAVA声音 API技术已经可以很好地适用于通过WEB的音频播放。"Bundschuh说。"但是我们总是跟踪最新的技术,并且开发象MP3这样的技术,同时还要保护音乐文件的安全传送。我们计划在JAVA声音 API今后的版本中提供对上述技术的支持"。   随着最近市场的发展,象播放基于WEB音乐上的竞争策略一样,大家都已经把发展数字化声音放在中心的位置。新的媒体技术不断涌现,声音将扮演核心的角色。JAVA声音 1.0 API将适时地加入到新的要害应用程序开发行列中来。
赞助商链接

我要回帖

更多关于 javafc模拟器 的文章

 

随机推荐