0

XNA でゲームを作成していますが、このゲームは多数の音楽ループを互いに重ねて動作しますが、これらのサウンドを同期させることができないようです。

私はいつも数ミリ秒単位で見逃してしまいます。助けてもらえますか?

これは、サウンドを同期する最初の試みです。何十ものサウンドを扱う必要があることに注意してください...

この同期の問題は、サウンドのキャッシュに関連している可能性がありますか?
簡単にするための外部ライブラリはありますか?

    public SoundEffectInstance loop1, loop2;
    public int auxControl = 0;
    public bool auxB = false, auxA = false;

    public void LoadContent()
    {
        SoundEffect temp1 = Game.Content.Load<SoundEffect>("sounds/Synctest_1");

        loop1 = temp1.CreateInstance();
        loop1.IsLooped = true; 

        loop2 = temp1.CreateInstance();
        loop2.IsLooped = true;
    }

    public override void Update(GameTime gameTime)
    {
        // start first sound
        if (auxA == false)
            loop1.Play(); auxA = true;

        // start counting until 2 seconds
        if (auxA)
            auxControl += gameTime.ElapsedGameTime.Milliseconds;

        // if 2 seconds have passed after first sound start second sound
        if (auxControl >= 2000 && auxB == false)
        {
            loop2.Play();
            auxB = true;
        }

        base.Update(gameTime);
    }

ありがとうございました

4

2 に答える 2

1

C# については何も知りませんが、通常、API がサポートしていない場合、これらの種類のものをミリ秒の精度で同期することは困難です。解決策は、それらを自分でミックスし、API を再生のみに使用することです。これにより、いつサウンドが再生され、どのように組み合わされるかを正確に制御できます。

C# にはもっと簡単な解決策があるかもしれませんが、http://www.PortAudio.comまたはその他の多くのインターフェイスを使用して、このようなものを構築できます。Google で Game audio API などを検索することをお勧めします。

于 2012-09-25T03:32:32.337 に答える
0

今のところ、これを達成するための最良の方法は、更新、できればメインの更新内の条件を使用することであると判断したため、検証は可能な限り迅速に行われます。

それでも、音の間に小さな「トゥク」が聞こえることがありますが、ほとんど気付かないため、これは問題を引き起こします。

擬似コードは次のようになります

Update(GameTime gameTime)
{

    if (last sound ended)
    {
        play next;
        decide on the next sound; // implement cache here if needed
    }

}
于 2013-02-27T09:58:28.190 に答える