[翻译]XNA 3.0 Game Programming Recipes之fifty


PS:自己翻译的,转载请著明出处

                                                             7-3 通过XACT播放简单的.wav声音文件
问题
                                  你想加载一个声音效果通过XACT,并且播放它在你的游戏中。
注意:Zune不支持XACT工具;因此,相关内容在7-1节和7-2节去学习如何播放声音在Zune上。
解决方案
                                  通过使用XACT,一个免费的工具,它来自XNA Game Studio3.0,你可以创建一个XACT工程,它包含所有的你准备在游戏中使用的声音文件。你可以使用XACT去可视化的添加/操作效果。你可以导入这个XACT项目到你的XNA工程中,在它可以立即播放声音保存在你的XACT项目中使用一个单一的代码行。
它是如何工作的
                                  首先,确保你打开一个XNA项目并且保存它在你的硬盘上。为了保持这些东西有序,你应该创建一个新的文件夹去保存所有你的声音原料。在XNA项目的解决方案中,找到Content条目,右击它,选择Add-New Folder,并且命名你的文件夹Audio,列如。
                                  现在,打开XACT通过点击Start菜单,然后点击Programs-Microsoft XNA Game Studio3.0-Tools-MicrosoftCross-Platform Audio Creation Tool(XACT)
                                  当你开始XACT,首先的事情你需要去做的是开始一个新的项目通过选择File-New Project.给你的项目一个奇妙的名字,并且浏览到你的XNA的Content\Audio路径保存它。
                                  你将会看到一个空的项目。在左边的树型结构中,找到Wave Banks,它包含waves,它是一个音频文件。右击Wave Banks,并选择New Wave Bank.接下来,创建一个声音bank通过右击Sound Banks并选择New Sound Bank.一个sound bank包含sounds,它是一个对象,他实际上可以在你的XNA项目中播放。一个声音指向一个波形,并且可以随意添加一些波形的效果类型。
                                  你现在可以看见两个长方块在你的窗口右边。点击Wave Bank框体。你应该可以看见它的属性在XACT窗口的底部。找到Name属性,并且改变它从Wave Bank为myWaveBank.接下来,点击Sound Bank框体,并且命名它的Name属性为mySoundBank.这些名字通过它们在你的XNA项目中容易被理解。
                                  你可以使用你的波形bank去保存所有你的.wav文件,所以右击它的框体的某处,并选择Insert WaveFile(s).浏览到.wav文件在你的硬盘中,它是你想在你的游戏中播放的,打开它。你可以看见它已经添加到你的波形bank.它显示为红色,因为你还没有使一个声音在你的声音bank中,它使用波形。
提示:该文件的位置被保存在相对的XACT项目中。这可以导致麻烦如果你改变你的声音或者你的XACT项目的位置,所以你应该首先复制音频文件到Content\Audio路径在导入它们到你的wave bank。
                                  一个波形是一个相关于声音文件在你的硬盘中,不管文件是什么样的格式。一个声音使用一个波形并且允许你去添加一些类型效果到它里面,如处理音量或者pitch。你可以使多个声音来自于一个波形。虽然,程序员使用一个cue去访问这些声音。所以从每个声音中,你需要产生一个cue在你可以从你的XNA代码去访问它时。一个cue可以包含多个声音,所以一个单一的代码行可以播放多个声音。
                                  所以,在你可以从你的游戏中的波形bank播放一个波形之前,你需要去制造一个声音和一个cue,他们用这个波形。你可以通过选择你的波形和拖放它到你的Sound Bank框体的cue地方,如图7-1所显示。
提示:确保你立即拖拉声音到cue表单在Sound Bank框体的底部,不是到声音表单,而在Sound Bank框体的上部。
                                  这波形和声音banks被分为独立的实体,这样你可以使从单一的波形中得到多个声音。这样,你可以添加不同的效果到涉及同一个波形的不同的声音中去。

                                  这是它的XACT工具;确保你通过选择File-Save Project.保存你的项目。到你的XNA项目中,并且导入这个文件到你的XNA项目文件,就象你导入一个图象或者对象文件一样。你可以通过拖拉.xap文件到Content\Audio条目来实现,在你的XNA Game Studio 3.0的解决方案或者通过到你的解决方案浏览器,右击Audio条目,并选择Add-Existing Item.
                                  目前,myXactProject.xap文件应该被列在你的XNA Game Studio3.0程序的解决方案中。
                                  当你编译你的工程,这个XACT项目将会被读并且转化成二进制文件,它将会被写如你的项目输出文件。每个.xapXACT项目文件,你添加到你的XNA项目中,XNA内容管道将创建一个.xgsXNA游戏的声音二进制文件(与XACT项目同名),一个在你项目的每个波形bank.xwb二进制文件和在你的XACT项目的声音bank一个.xsb二进制文件。
                                  在你的XNA项目,你需要去连接三个文件中的每一个成为一个变量,这样,首先声明他们在你的代码的开头:
1  AudioEngine audioEngine;
2  WaveBank waveBank;
3  SoundBank soundBank;
                                  然后连接他们到二进制文件(它将创建/更新当你编译你的项目时).列如,在Initialize方法中:
1  audioEngine = new  AudioEngine( " Content/Audio/MyXACTproject.xgs " );
2  waveBank = new  WaveBank(audioEngine, " Content/Audio/myWaveBank.xwb " );
3  soundBank = new  SoundBank(audioEngine, " Content/Audio/mySoundBank.xsb " );
                                  soundBank变量将包含所有的可演奏的cues.虽然,当你实例化一个新SoundBank,你需要去传递它一个AudioEngine,所以你需要去初始化这个首先。不关你播放一个cue从你的soundBank中,它将查找波形从WaveBank联合它的AudioEngine,所以你同样需要第二行。
注意:myWaveBank和mySoundBank名称将通过你在前面这章的XACT工具来分配。
                                  现在,当你想简单的播放一个声音,所有你不得不去做是调用soundBank变量的PlayCue方法,并且传递它你想播放的cue的名字!
                                 为了确保所有的cues从内存中删除,当它们已经完成时,确保你调用你的audioEngine每一祯的Update方法:
1  audioEngine.Update();

注意:不管你改变到你的XACT项目并且保存它成一个文件,你不能简单运行你的XNA项目的这个.exe,并且期望它去应用这个改变,你在你的XNA项目
中产生的。你首先需要去重新编译(每次按F5完成)你的XNA项目,这样内容管道创建新的二进制文件从你的XACT项目中。

代码
                                 你需要三个全局变量通过它,你可以播放所有你包含的的声音cues在你的XACT项目中:

1  AudioEngine audioEngine;
2  WaveBank waveBank;
3  SoundBank soundBank;
                                 初始化它们在你的项目开始时:

 

1  protected   override   void  Initialize()
2  {
3      audioEngine = new  AudioEngine( " myXactProject.xgs " );
4      waveBank = new  WaveBank(audioEngine, " myWaveBank.xwb " );
5      soundBank = new  SoundBank(audioEngine, " mySoundBank.xsb " );
6       base .Initialize();
7  }
                                 播放声音使用soundBank.PlayCue方法,例如在一个键被压下时,如下面代码所展示。确保调用audioEngine.Update方法每一祯:
 1  protected   override   void  Update(GameTime gameTime)
 2  {
 3         if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
 4                this .Exit();
 5        KeyboardState keyState = Keyboard.GetState();
 6         if (keybState.IsKeyDown(Key.Space))
 7            soundBank.PlayCue( " audio1 " );
 8        audioEngine.Update();
 9         base .Update(gameTime);
10  }
                                 现在当你运行这段代码,这个声音将会在你每次压下空格键后播放。
源代码: http://shiba.hpe.cn/jiaoyanzu/WULI/soft/xna.aspx?classId=4
(完)

转载于:https://www.cnblogs.com/315358525/archive/2009/09/03/1559377.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 伴随着人才教学的关注度越来越高,对于人才的培养也是当今社会发展的最为重要的问题之一。为了进一步的进行人才的培养关工作,许多的学校或者是教育的机构逐步的开展了网络信息化的教学和和管理工作,通过信息化的手段和技术实现网络信息化的教育及管理模式,通过网络信息化的手段实现在线答题在线考试和学生信息在线的管理等操作。这样更加的快捷解决了人才培养之中的问题,也在进一步的促进了网络信息化教学方式的快速的发展工作。相较于之前的人才教育和培养工作之中,存在这许多的问题和局限性。在学生信息管理方面通过线下管理的形式进行学生信息的管理工作,在此过程之中存在着一定的局限性和低效性,往往一些突发的问题导致其中工作出现错误。导致相关的教育工作受到了一定的阻碍。在学生信息和学生成绩的管理方面,往常的教育模式之下都是采用的是人工线下的进行管理和整理工作,在这一过程之中存在这一定的不安全和低效性,面对与学生基数的越来越大,学生的信息管理也在面领着巨大的挑战,管理人员面领着巨大的学生信息的信息量,运用之前的信息管理方式往往会在统计和登记上出现错误的情况的产生,为后续的管理工作造成了一定的困难。然而通过信息化的管理方式进行对学生信息的管理不仅可以避免这些错误情况的产生还可以进一步的简化学生信息管理工作的流程,节约了大量的人力和物力的之处。在线答题系统的实现不仅给学生的信息管理工作和在线考试带来了方便也进一步的促进了教育事业信息化的发展,从而实现高效化的教学工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值