7.1 播放并控制简单的.wav声音文件

问题

你想有一个快速播放音效的方法。

解决方案

在XNA3.0中,你可以直接从XNA中加载和播放声音,而无需使用Xact加载它们。虽然这个方法移除了一些Xact的高级功能,但可以让播放音效变得非常容易。

工作原理

首先在项目中添加音效文件,方法与在项目中添加一张图像是一样的,可参见教程3-1。最简单的方法是将一个.wav文件拖动到解决方案的Content文件夹上。

将.wav文件添加到项目中之后,在代码顶部声明一个SoundEffect变量,它将链接到之后的音效文件:

SoundEffect myEffect; 

在LoadContent方法中,添加以下代码加载一个.wav文件:

myEffect=Content.Load<SoundEffect>(“effect”); 

当你想播放声音时,可以使用以下代码:

myEffect.Play(); 

SoundEffect.Play()重载方法

SoundEffect.Play()方法有很多重载方法,可以提供更多的控制。最复杂的重载方法有四个参数:

控制音效

前面的代码已经足以播放音效了,但XNA还提供了SoundEffectInstance类,你可以使用这个类暂停或停止音效,改变音量等,首先要在代码顶部添加一个变量:

SoundEffectInstance myEffectInstance; 

当调用SoundEffectInstance的Play方法时,SoundEffect对象会自动转换为一个SoundEffectInstance对象。

现在你可以访问SoundEffectInstance对象,你可以使用这个对象改变音高和音量或者检查它是否已经停止播放:

if (myEffectInstance != null) 
{
    myEffectInstance.Volume *= 0.9f; 
    
    if (myEffectInstance.State == SoundState.Stopped) 
    {
        myEffectInstance.Dispose(); 
        myEffectInstance = null; 
    }
} 

这个代码会持续地降低音量,当停止播放时会移除对这个对象的引用。

注意:Zune可以同时播放16个SoundEffectInstance,但加载的SoundEffectInstance数量没有限制。Xbox360可以同时播放300个SoundEffectInstance,但一次只能加载300个SoundEffectInstance。在PC上没有限制。但提醒一点,在写本书的时候,SoundEffectInstance.Play方法有一个bug,它会在使用SoundEffectInstance.Resume方法时被忽略。


发布时间:2009/10/13 上午11:24:52  阅读次数:7113

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号