Как я могу найти положение песни, которая воспроизводится с помощью XACT? - PullRequest
0 голосов
/ 03 мая 2010

Итак, я делаю игру в 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 (они, кстати, Кью), я не могу найти какую-либо игровую позицию в них.

Итак, я предполагаю, что вопрос заключается в следующем: есть ли переменная, которую я могу запросить, чтобы найти эти данные, или мне нужно создать свой собственный класс, который начинает отсчитывать со времени, когда я запускаю песню?

Спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2010

Я не верю, что это возможно. Насколько мне известно, API не предоставляет эту информацию.

0 голосов
/ 11 мая 2010

В зависимости от ваших потребностей, вы можете создавать реплики, которые смешивают различные слои, вместо того, чтобы делать это в коде (возможная задержка в Cue.Play может не помочь в этом случае). Если вам нужно сделать это в коде (например, потому что вы создаете какой-то трекер), то вам нужно выполнить синхронизацию самостоятельно и также хранить метаданные, связанные с синхронизацией, вне XACT.

Можно использовать SoundEffect (который дает вам, по крайней мере, длительность звука и его задержка воспроизведения может быть немного лучше), так как вы все равно загружаете все звуки в память одновременно. * +1007 *

...