Αναπαραγωγή, παύση και διακοπή στην ουρά

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

περίληψη

Χρησιμοποιήστε υποδείξεις για αναπαραγωγή, παύση και διακοπή ήχων.

Περιβάλλον λειτουργίας

Προϋποθέσεις

Υποστηριζόμενες εκδόσεις XNA
  • 2.0
  • 3.0
Υποστηριζόμενες πλατφόρμες
  • Windows (XP SP2 ή νεότερη έκδοση, Vista)
  • Κονσόλα Xbox 360
Windows Απαιτούμενη έκδοση σκίασης Vertex 1.1
Απαιτούμενη έκδοση Pixel Shader των Windows 1.1

Περιβάλλον λειτουργίας

πλατφόρμα

Πώς να εργαστείτε με το δείγμα

Works πληκτρολόγιοΧειριστήριο Xbox 360ποντίκι
Αναπαραγωγή και παύση ήχου Ένας Ένας -
Σταματήστε τον ήχο B B -

ουσία

Σημείωση: Αυτές οι συμβουλές βασίζονται στο XNA Game Studio 2.0.

αγρός

/// <summary>
/// キュー
/// </summary>
private Cue cue = null;

Έχετε δηλώσει ένα σύνθημα που θέλετε να χρησιμοποιήσετε για αναπαραγωγή, παύση ή διακοπή ενός ήχου.

Ανάκτηση ουρών

// 再生するためのキューを取得します
this.cue = this.soundBank.GetCue("Sample");

Για να ανακτήσετε ένα σύνθημα, χρησιμοποιήστε τη μέθοδο GetCue από την Τράπεζα Ήχου. Το όνομα που μεταβιβάζεται στο όρισμα καθορίζει το όνομα της ουράς που ορίσατε όταν τη δημιουργήσατε στο XACT.

SoundBank.GetCue μέθοδος

Ανακτά ένα σύνθημα από μια τράπεζα ήχων.

Όνομα σειρά Το όνομα της ουράς για ανάκτηση

Αναπαραγωγή ήχων

if (!this.cue.IsPrepared)
{
    // 新しいキューを取得します
    this.cue = this.soundBank.GetCue(cue.Name);
}

// 再生開始
this.cue.Play();

Για αναπαραγωγή του ήχου, χρησιμοποιήστε τη μέθοδο "Cue.Play". Ωστόσο, μετά την ολοκλήρωση της αναπαραγωγής, δεν είναι δυνατή η αναπαραγωγή του με τη μέθοδο Cue.Play. Μπορείτε να προσδιορίσετε εάν η αναπαραγωγή έχει ολοκληρωθεί χρησιμοποιώντας την ιδιότητα "Cue.IsPrepared", επομένως, εάν ολοκληρωθεί η αναπαραγωγή, χρησιμοποιήστε τη μέθοδο SoundBank.GetCue για να ανακτήσετε ξανά το σύνθημα.

Cue.Play μέθοδος

Ξεκινήστε την αναπαραγωγή του ήχου στο έτοιμο σύνθημα.

Παύση του ήχου

else if (this.cue.IsPlaying)
{
    // 一時停止
    this.cue.Pause();
}

Για αναπαραγωγή του ήχου, χρησιμοποιήστε τη μέθοδο "Cue.Pause". Στο δείγμα, λαμβάνουμε την ιδιότητα "Cue.IsPlaying" για να δούμε αν αναπαράγεται και αν αναπαράγεται, την θέτουμε σε παύση.

Cue.Pause μέθοδος

Θέτει σε παύση τον ήχο που αναπαράγεται.

Συνέχιση από παύση ήχου

if (this.cue.IsPaused)
{
    // 一時停止から再開する
    this.cue.Resume();
}

Για να συνεχίσετε έναν ήχο σε παύση από την αρχή, χρησιμοποιήστε τη μέθοδο Cue.Resume. Στο δείγμα, η ιδιότητα "Cue.IsPause" χρησιμοποιείται για να προσδιορίσετε αν έχει τεθεί σε παύση.

Cue.Resume μέθοδος

Συνέχιση μιας ουράς που έχει τεθεί σε παύση.

Σταματήστε τον ήχο

// サウンドを停止します
this.cue.Stop(AudioStopOptions.AsAuthored);

Για να διακόψετε τον ήχο που αναπαράγεται, χρησιμοποιήστε τη μέθοδο "Cue.Stop". Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί κατά την αναπαραγωγή ή την παύση. Υπάρχουν δύο απαριθμήσεις "AudioStopOptions" για να περάσετε στα ορίσματα, αλλά μπορεί να χρησιμοποιηθεί και η μία.

Cue.Stop μέθοδος

Διακόπτει την ουρά που αναπαράγεται.

επιλογές AudioStopOptions Ελέγξτε τις παραμέτρους για τη διακοπή της ουράς κατά την αναπαραγωγή.

Όλοι οι κωδικοί

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace UseCue
{
    /// <summary>
    /// ゲームメインクラス
    /// </summary>
    public class GameMain : Microsoft.Xna.Framework.Game
    {
        /// <summary>
        /// グラフィックデバイス管理クラス
        /// </summary>
        private GraphicsDeviceManager graphics = null;

        /// <summary>
        /// スプライトのバッチ化クラス
        /// </summary>
        private SpriteBatch spriteBatch = null;

        /// <summary>
        /// スプライトでテキストを描画するためのフォント
        /// </summary>
        private SpriteFont font = null;

        /// <summary>
        /// オーディオエンジン
        /// </summary>
        private AudioEngine audioEngine = null;

        /// <summary>
        /// WaveBank
        /// </summary>
        private WaveBank waveBank = null;

        /// <summary>
        /// SoundBank
        /// </summary>
        private SoundBank soundBank = null;

        /// <summary>
        /// キュー
        /// </summary>
        private Cue cue = null;

        /// <summary>
        /// 直線のキーボード入力の状態
        /// </summary>
        private KeyboardState oldKeyboardState = new KeyboardState();

        /// <summary>
        /// 直線のゲームパッド入力の状態
        /// </summary>
        private GamePadState oldGamePadState = new GamePadState();



        /// <summary>
        /// GameMain コンストラクタ
        /// </summary>
        public GameMain()
        {
            // グラフィックデバイス管理クラスの作成
            this.graphics = new GraphicsDeviceManager(this);

            // ゲームコンテンツのルートディレクトリを設定
            this.Content.RootDirectory = "Content";
        }

        /// <summary>
        /// ゲームが始まる前の初期化処理を行うメソッド
        /// グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
        /// </summary>
        protected override void Initialize()
        {
            // オーディオデータの読み込み
            this.audioEngine = new AudioEngine(@"Content\Audio.xgs");
            this.waveBank = new WaveBank(this.audioEngine, @"Content\Wave Bank.xwb");
            this.soundBank = new SoundBank(this.audioEngine, @"Content\Sound Bank.xsb");

            // 再生するためのキューを取得します
            this.cue = this.soundBank.GetCue("Sample");

            // コンポーネントの初期化などを行います
            base.Initialize();
        }

        /// <summary>
        /// ゲームが始まるときに一回だけ呼ばれ
        /// すべてのゲームコンテンツを読み込みます
        /// </summary>
        protected override void LoadContent()
        {
            // テクスチャーを描画するためのスプライトバッチクラスを作成します
            this.spriteBatch = new SpriteBatch(this.GraphicsDevice);

            // フォントをコンテンツパイプラインから読み込む
            this.font = this.Content.Load<SpriteFont>("Font");
        }

        /// <summary>
        /// ゲームが終了するときに一回だけ呼ばれ
        /// すべてのゲームコンテンツをアンロードします
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: ContentManager で管理されていないコンテンツを
            //       ここでアンロードしてください
        }

        /// <summary>
        /// 描画以外のデータ更新等の処理を行うメソッド
        /// 主に入力処理、衝突判定などの物理計算、オーディオの再生など
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Update(GameTime gameTime)
        {
            // キーボードの情報取得
            KeyboardState keyboardState = Keyboard.GetState();

            // ゲームパッドの情報取得
            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);

            // Xbox360 コントローラの BACK ボタンを押したときにゲームを終了させます
            if (gamePadState.Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }

            if ((keyboardState.IsKeyDown(Keys.A) && this.oldKeyboardState.IsKeyUp(Keys.A)) ||
                (gamePadState.Buttons.A == ButtonState.Pressed &&
                    this.oldGamePadState.Buttons.A == ButtonState.Released))
            {
                if (this.cue.IsPaused)
                {
                    // 一時停止から再開する
                    this.cue.Resume();
                }
                else if (this.cue.IsPlaying)
                {
                    // 一時停止
                    this.cue.Pause();
                }
                else
                {
                    if (!this.cue.IsPrepared)
                    {
                        // 新しいキューを取得します
                        this.cue = this.soundBank.GetCue(cue.Name);
                    }

                    // 再生開始
                    this.cue.Play();
                }
            }

            if ((keyboardState.IsKeyDown(Keys.B) && this.oldKeyboardState.IsKeyUp(Keys.B)) ||
                (gamePadState.Buttons.B == ButtonState.Pressed &&
                    this.oldGamePadState.Buttons.B == ButtonState.Released))
            {
                // サウンドを停止します
                this.cue.Stop(AudioStopOptions.AsAuthored);
            }

            // 入力状態を記憶
            this.oldKeyboardState = keyboardState;
            this.oldGamePadState = gamePadState;

            // 登録された GameComponent を更新する
            base.Update(gameTime);
        }

        /// <summary>
        /// 描画処理を行うメソッド
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲー��時間</param>
        protected override void Draw(GameTime gameTime)
        {
            // 画面を指定した色でクリアします
            this.GraphicsDevice.Clear(Color.CornflowerBlue);

            // スプライトの描画準備
            this.spriteBatch.Begin();

            // テキスト描画
            this.spriteBatch.DrawString(this.font,
                "A : Play and Pause \r\n" +
                "B : Stop",
                new Vector2(50.0f, 50.0f), Color.White);

            // スプライトの一括描画
            this.spriteBatch.End();
            
            // 登録された DrawableGameComponent を描画する
            base.Draw(gameTime);
        }
    }
}