【问题标题】:How can I find the song position of a song being played with XACT?如何找到正在使用 XACT 播放的歌曲的歌曲位置?
【发布时间】:2010-05-02 23:06:14
【问题描述】:

所以我在 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 的 btw)时,我似乎无法在其中找到任何播放位置。

所以我想问题是:我可以查询一个变量来查找该数据,还是我需要创建自己的类,从我开始播放歌曲时开始计数?

谢谢

【问题讨论】:

    标签: c# audio xna xact


    【解决方案1】:

    我不相信这是可能的。据我所知,API 没有提供这些信息。

    【讨论】:

      【解决方案2】:

      根据您的需要,您可能能够创作混合不同层的提示,而不是在代码中进行(Cue.Play 中的可能延迟在这种情况下可能无济于事)。如果您需要在代码中执行此操作(例如,因为您正在创建某种跟踪器),那么您需要自己进行计时并将与计时相关的元数据存储在 XACT 之外。

      使用SoundEffect 可能是一种选择(至少可以为您提供声音的持续时间,并且它的播放延迟可能会更好一些),因为无论如何您都会一次将所有声音加载到内存中。

      【讨论】:

        猜你喜欢
        • 2014-09-05
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2014-08-12
        • 1970-01-01
        相关资源
        最近更新 更多