0

これが私が現在ローリングしているセットアップです。これを考えると、_BGMusic SoundEfectがいつ終了したかをどのように知ることができますか?私は1秒間に数回循環するゲームループを実行していますが、最終的にはこの曲をループさせたいと思っています。

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;

    SoundEffect _BGMUSIC;

    public Page1() {
     ...

     LoadSound("sfx/piano.wav", out _BGMUSIC);
     ...
    }

    private void LoadSound(String SoundFilePath, out SoundEffect Sound) {
        // For error checking, assume we'll fail to load the file.
        Sound = null;
        try {
            // Holds informations about a file stream.
            StreamResourceInfo SoundFileInfo =
                    App.GetResourceStream(new Uri(SoundFilePath, UriKind.Relative));
            // Create the SoundEffect from the Stream
            Sound = SoundEffect.FromStream(SoundFileInfo.Stream);
            FrameworkDispatcher.Update();
        } catch (NullReferenceException) {
            // Display an error message
            MessageBox.Show("Couldn't load sound " + SoundFilePath);
        }
    }
4

2 に答える 2

0

このコードから、サウンドを保存したように見えますが、メソッドSoundを実装する場所は示されていませんSound.Play()Sound.IsPlaying問題を解決する可能性のあるブール値はありませんがSound.Duration、特に問題を解決するために使用できるプロパティがあります。これをTimer(と組み合わせて使用​​して、フラグを設定するかどうかを示すことができます)。音が鳴っていません。

また、私が一度も使用したことはないが、見つけたばかりのものはSound.IsDisposedプロパティです。それはあなたが探しているものにぴったりかもしれないので、私は間違いなくこれも調べます。

于 2013-03-02T18:29:55.810 に答える
0

さて、この質問への答えは実際には非常に単純で、MicrosoftのMSDNページで非常にうまく概説されています(一度だけ)。

私が現在上に持っているものでそれを実装するには、あなたは以下をする必要があります。

グローバルSoundEffectInstanceを作成します

 SoundEffectInstance _BGMUSICINSTANCE;

私の例では、メインメソッドでSoundEffectを初期化するので、その下でSoundEffectInstanceを初期化します。

_BGMUSICINSTANCE = _BGMUSIC.CreateInstance();

インスタンスがロードされて準備ができたので、ループプロパティをtrueに設定できます。これは、mainメソッドまたは任意の場所でも実行できます。それはグローバルです

 _BGMUSICINSTANCE.IsLooped = true;

最後に曲を再生します

 _BGMUSICINSTANCE.Play();

リファレンスページ http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.31).aspx

于 2013-03-09T20:29:38.490 に答える