Phát, tạm dừng và dừng lại theo hàng đợi

Trang Cập Nhật :
Ngày tạo trang :

tóm tắt

Sử dụng tín hiệu để phát, tạm dừng và dừng âm thanh.

Môi trường hoạt động

Điều kiện tiên quyết

Các phiên bản XNA được hỗ trợ
  • 2.0
  • 3.0
Nền tảng được hỗ trợ
  • Windows (XP SP2 trở lên, Vista)
  • Xbox 360
Phiên bản Vertex Shader bắt buộc của Windows 1.1
Phiên bản Pixel Shader bắt buộc của Windows 1.1

Môi trường hoạt động

nền tảng

Làm thế nào để làm việc với mẫu

điều khiển Xbox
Bàn phím hoạt độngBộ 360chuột
Phát và tạm dừng âm thanh Một Một -
Dừng âm thanh B B -

chất

Lưu ý: Những mẹo này dựa trên XNA Game Studio 2.0.

trường

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

Bạn đã khai báo một gợi ý mà bạn muốn sử dụng để phát, tạm dừng hoặc dừng âm thanh.

Truy xuất hàng đợi

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

Để truy xuất gợi ý, hãy sử dụng phương pháp GetCue từ SoundBank. Tên được truyền trong đối số chỉ định tên của hàng đợi mà bạn đã thiết lập khi bạn tạo nó trong XACT.

SoundBank.GetCue phương pháp

Lấy một gợi ý từ một soundbank.

Tên xâu Tên của hàng đợi cần truy xuất

Phát âm thanh

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

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

Để phát âm thanh, hãy sử dụng phương pháp "Cue.Play". Tuy nhiên, sau khi phát lại hoàn tất, nó không thể được phát lại bằng phương pháp Cue.Play. Bạn có thể xác định xem quá trình phát lại đã hoàn tất hay chưa bằng cách sử dụng thuộc tính "Cue.IsPrepared", vì vậy nếu quá trình phát lại hoàn tất, hãy sử dụng phương pháp SoundBank.GetCue để truy xuất lại gợi ý.

Cue.Play phương pháp

Bắt đầu phát âm thanh theo gợi ý sẵn sàng.

Tạm dừng âm thanh

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

Để phát âm thanh, hãy sử dụng phương pháp "Cue.Pause". Trong mẫu, chúng ta nhận được thuộc tính "Cue.IsPlaying" để xem nó có đang phát hay không và nếu nó đang phát, chúng ta tạm dừng nó.

Cue.Pause phương pháp

Tạm dừng âm thanh đang phát.

Tiếp tục từ tạm dừng âm thanh

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

Để tiếp tục âm thanh bị tạm dừng từ đầu, hãy sử dụng phương pháp Cue.Resume. Trong mẫu, thuộc tính "Cue.IsPause" được sử dụng để xác định xem nó có bị tạm dừng hay không.

Cue.Resume phương pháp

Tiếp tục hàng đợi bị tạm dừng.

Dừng âm thanh

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

Để dừng âm thanh đang phát, hãy sử dụng phương pháp "Cue.Stop". Phương pháp này có thể được sử dụng trong khi phát lại hoặc tạm dừng. Có hai liệt kê "AudioStopOptions" để vượt qua trong các đối số, nhưng một trong hai có thể được sử dụng.

Cue.Stop phương pháp

Dừng hàng đợi đang phát.

Tùy chọn AudioStopOptions Kiểm soát các thông số để dừng hàng đợi trong khi phát lại.

Tất cả các mã

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);
        }
    }
}