所以我在XNA上制作游戏,我需要将XACT用于我的歌曲(而不是媒体播放器)。我需要使用XACT,因为每首歌曲会有多个层次同时播放(低音,低音,鼓)等。我不能使用媒体播放器,因为媒体播放器一次只能播放一首歌。
无论如何,让我说我的项目中有一首使用以下代码的XACT播放的歌曲
public SongController()
{
audioEngine = new AudioEngine(@"Content\Song1\Song1.xgs");
waveBank = new WaveBank(audioEngine, @"Content\Song1\Layers.xwb");
soundBank = new SoundBank(audioEngine, @"Content\Song1\SongLayers.xsb");
songTime = new PlayTime();
Vox = soundBank.GetCue("Vox");
BG = soundBank.GetCue("BG");
Bass = soundBank.GetCue("Bass");
Lead = soundBank.GetCue("Lead");
Other = soundBank.GetCue("Other");
Vox.SetVariable("CueVolume", 100.0f);
BG.SetVariable("CueVolume", 100.0f);
Bass.SetVariable("CueVolume", 100.0f);
Lead.SetVariable("CueVolume", 100.0f);
Other.SetVariable("CueVolume", 100.0f);
_bassVol = 100.0f;
_voxVol = 100.0f;
_leadVol = 100.0f;
_otherVol = 100.0f;
Vox.Play();
BG.Play();
Bass.Play();
Lead.Play();
Other.Play(); }
所以,当我看到Vox中的变量,或BG(他们是Cue的顺便说一句)时,我似乎无法找到任何游戏位置。
所以我想问题是:是否有一个变量我可以查询以查找该数据,还是我需要创建自己的类,从我开始播放歌曲开始计数?
由于
答案 0 :(得分:1)
我不相信这是可能的。据我所知,API并未提供此信息。
答案 1 :(得分:0)
根据您的需要,您可能能够创建混合各个层而不是在代码中执行此操作的提示(Cue.Play
中可能的延迟在此方案中可能没有帮助)。如果您需要在代码中执行此操作(例如,因为您正在创建某种跟踪器),那么您需要自己进行计时并在XACT之外存储与时序相关的元数据。
使用SoundEffect
可能是一个选项(至少可以提供声音的持续时间,并且其播放延迟可能会更好一些),因为您无论如何都会立即将所有声音加载到内存中。