0

そのため、XNA でゲームを作成しており、曲には (メディア プレーヤーではなく) XACT を使用する必要があります。XACT を使用する必要があるのは、各曲を同時に再生すると結合する複数のレイヤー (ベース、リード、ドラム) などがあるためです。メディア プレーヤーは一度に 1 つの曲しか再生できないため、メディア プレーヤーを使用できません。

とにかく、プロジェクトで次のコードを使用して 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 のものです) を見ると、それらの中で再生位置を見つけることができないようです。

質問は次のとおりだと思います: そのデータを見つけるためにクエリできる変数はありますか? それとも、曲を開始した時点からカウントアップを開始する独自のクラスを作成する必要がありますか?

ありがとう

4

2 に答える 2

1

これが可能だとは思いません。私が知る限り、API はこの情報を提供しません。

于 2010-05-03T15:24:06.743 に答える
0

必要に応じて、コードで実行する代わりに、さまざまなレイヤーを混合するキューを作成できる場合があります (Cue.Playいずれにせよ、このシナリオでは潜在的な待ち時間は役に立たない可能性があります)。コードで実行する必要がある場合 (たとえば、ある種のトラッカーを作成するため)、タイミングを自分で行い、タイミング関連のメタデータも XACT の外部に保存する必要があります。

いずれにせよ、すべてのサウンドを一度にメモリにロードするため、オプションを使用SoundEffectすることもできます (これにより、少なくともサウンドの持続時間が得られ、再生レイテンシが少し改善される可能性があります)。

于 2010-05-11T14:17:10.583 に答える