MonoGame音频处理
音效SoundEffect 类处理短音频剪辑,例如:
- 碰撞声音。
- 玩家动作反馈(跳跃、射击等)。
- UI 交互(按钮点击、菜单导航)。
- 环境效果(脚步声、环境声音)。
音效的主要特征是: - 完全加载到内存中以便快速访问
- 可以同时播放多个实例:
- 移动平台最多可以同时播放 32 种声音。
- 桌面平台最多可同时播放 256 种声音。
- 控制台和其他平台有自己的约束,你需要参考该平台的SDK文档。
- 更低的延迟播放(非常适合即时反馈)
- 每个实例的单独音量控制。
音乐Song 类处理较长的音频片段,如背景音乐。歌曲的主要特征是:
- 从存储流式传输而不是加载到内存中。
- 一次只能播放一首歌曲。
- 延迟较高,但内存使用量较低。
在本章中,我们将使用这两个类为游戏添加音频反馈;蝙蝠弹跳和被史莱姆吃掉的音效,以及营造氛围的背景音乐。
加载音频内容就像纹理一样,MonoGame 中的音频内容可以通过内容管道加载,从而针对目标平台优化格式。
支持的音频格式
MonoGame 支持多种音频文件格式的音效和音乐:
- .wav:未压缩音频,非常适合短音效
- .mp3:压缩音频,更适合音乐和更长的声音
- .ogg:开源压缩格式,支持所有平台
- .wma:Windows Media 音频格式(不建议用于跨平台游戏)
加载音效
若要加载音效,我们将 ContentManager.Load 与 SoundEffect 类型一起使用:
// 使用内容管道加载SoundEffect
SoundEffect soundEffect = Content.Load
加载音乐
加载音乐类似,只是我们指定了歌曲类型。
// 使用内容管道加载Song
Song song = Content.Load
播放音效
声音效果使用 SoundEffect 类播放。此类提供两种播放声音的方法:
1.使用
SoundEffect.Play 直接播放:
// 使用内容管道加载SoundEffect
SoundEffect soundEffect = Content.Load
// 使用默认设置播放声音效果
soundEffect.Play();
2.使用
SoundEffect.CreateInstance 创建实例:
// 使用内容管道加载SoundEffect
SoundEffect soundEffect = Content.Load
// 创建一个我们可以控制的实例
SoundEffectInstance soundEffectInstance = soundEffect.CreateInstance();
// 根据需要调整实例属性
soundEffectInstance.IsLooped = true; // 是否循环播放
soundEffectInstance.Volume = 0.5f; // 设置半音量\volume是音量
// 使用实例播放音乐
soundEffectInstance.Play();
- 使用 SoundEffect.Play 来获得只想播放一次的简单音效。
- 当需要对音效进行更多控制时,请使用 SoundEffect.CreateInstance
SoundEffectInstance 包含多个可用于控制音效播放方式的属性:
属性类型描述IsLooped\bool声音到达结尾时是否应该循环。
Panf\loat在 -1.0f(左全)和 1.0f(全右)之间进行立体声平移。
Pith\float音高调整在 -1.0f(降低一个八度)和 1.0f(向上一个八度)之间。State\SoundState当前播放状态(正在播放、暂停或停止)。
Volume\float音量水平介于 0.0f(静音)和 1.0f(全音量)之间。
注意SoundEffect实例背后还有更多功能,例如播放3D声音的能力,以及可以构建音频流的动态音效实例的高级功能。但是,这些超出了本初学者指南的范围。如果您想了解更多信息,请查看 MonoGame 文档
播放音乐与音效不同,音乐是通过 MediaPlayer 类播放的。此静态类管理 Song 实例的播放,并提供对音乐播放的全局控制:
// Loading a Song using the content pipeline
Song song = Content.Load
// 设置歌曲完成后是否要重复播放
MediaPlayer.IsRepeating = true;
// 调节音量 (0.0f to 1.0f)
MediaPlayer.Volume = 0.5f;
// 检查播放器的状态是否在播放,如果是,停止播放
if(MediaPlayer.State == MediaState.Playing)
{
MediaPlayer.Stop();
}
// 开始播放音乐
MediaPlayer.Play(song);
浙公网安备 33010602011771号