Seslerin çalınması

Sayfa güncel :
Sayfa oluşturma tarihi :

özet

XACT'de oluşturulan bir ses dosyasını içe aktarır ve oynatır.

Çalışma ortamı

Önkoşullar

Desteklenen XNA Sürümleri
  • 2.0
  • 3.0
Desteklenen Platformlar
  • Windows (XP SP2 veya üstü, Vista)
  • Xbox 360 için Oyunlar
Windows Gerekli Köşe Gölgelendiricisi Sürümü 1.1
Windows Gerekli Pixel Shader Sürümü 1.1

Çalışma ortamı

peron

Örnek ile nasıl çalışılır

Çalışıyor klavyeXbox 360 denetleyicisifare
Seslerin çalınması A A -

madde

Not: Bu ipuçları XNA Game Studio 2.0'a dayanmaktadır.

Sesi çalmak için, "XNA ile ses çalmak için bir dosya oluşturma" bölümünde oluşturulan dosyayı projeye kaydetmeniz gerekir.


サウンドファイルの登録

İçerik klasörüne sağ tıklayın ve Ekle - Varolan Öğe'yi seçin.


xap ファイルを選択

Bu . Yüklenecek "xap" dosyasını seçin. (Örnekte "Audio.xap")


追加された xap ファイル

xap dosyası Content klasörüne eklenir.


Wave ファイルを Content フォルダに追加

Ardından, xap dosyasını oluşturmak için kullandığınız wave dosyasını doğrudan İçerik klasörüne taşıyın. Akılda tutulması gereken bir şey, WAV dosyasının, XAP dosyasının oluşturulduğu zamanki aynı göreli yola yerleştirilmesi gerektiğidir.

Bu durumda wave dosyasını direkt olarak klasöre taşıyorum ancak projeme eklerken herhangi bir sorun yaşamıyorum.


İşte bu, gitmeye hazırsın. Bundan sonrası bir program olacak.

alan

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

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

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

Sesleri çalmak için üç şey kullanın: "AudioEngine", "WaveBank" ve "SoundBank". Büyük olasılıkla SoundBanks veya AudioEngines'i kullanacaksınız, ancak üç örneği de oluşturmanız gerekecek.

Örnek Oluşturma

/// <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");

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

Sesle ilgili örnekler Game.Initialize yönteminde oluşturulur. Her sınıfı oluşturduğunuzda, bağımsız değişkeni olarak ayarlarsınız. xgs」「. xwb」「. .xsb" dosyaları, projeyi oluşturduğunuzda XAP proje dosyasına dayalı olarak otomatik olarak oluşturulur.

Ses, ses bankası ve dalga bankası dosyalarının adları, projeyi XACT'de oluştururken ayarladığınız adlarla aynı olmalıdır. Ayrıca, dosyanın yolu yürütülebilir dosyaya göre olduğundan, bu örnekte "İçerik" klasörünün yolunu dahil etmek gerekir.

AudioEngine **Oluşturucu

Ses nesnelerini işlemek için AudioEngine sınıfının bir örneğini oluşturur.

settingsDosya dizgi Yüklenecek yapılandırma dosyasının yolu

WaveBank Oluşturucu

Wave dosyaları koleksiyonunu içeren WaveBank sınıfının bir örneğini oluşturur.

ses motoru Ses Motoru WaveBank ve AudioEngine
nonStreamingWaveBankDosya adı dizgi Yüklenecek WaveBank dosyasının yolu

SoundBank Oluşturucu

Kuyruk koleksiyonu içeren SoundBank sınıfının bir örneğini oluşturur.

ses motoru Ses Motoru SoundBanks'e bağlanmak için AudioEngine
Dosyaadı dizgi Yüklenecek SoundBank dosyasının yolu

Seslerin çalınması

if (keyState.IsKeyDown(Keys.A) || padState.Buttons.A == ButtonState.Pressed)
{
    if (this.pressed == false)
    {
        // サウンドを再生
        this.soundBank.PlayCue("Sample");

        this.pressed = true;
    }
}
else
{
    this.pressed = false;
}

Bir ses çalmak için SoundBank.PlayCue yöntemini kullanın. Çalınacak ses kaynağı, XACT'de ayarlanan "Cue" adıyla belirtilir.

Bir kez çalındıktan sonra, ses sonuna kadar akmaya devam edecektir. Ek olarak, aynı ses kaynağı birden çok kez çalınarak tekrar tekrar çalınabilir.

Örnekte, oynatmak için her A düğmesine veya A tuşuna bir kez basılır.

SoundBank.PlayCue yöntem

İşareti oynatın.

ad dizgi Oynatılacak kuyruğun adı

Tüm Kodlar

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

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

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

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

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

        /// <summary>
        /// キープレスフラグ
        /// </summary>
        private bool pressed = false;


        /// <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");

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

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

            // TODO: this.Content を使用してゲームコンテンツを読み込む
            //       ロジックを書いてください
        }

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

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

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

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

            if (keyState.IsKeyDown(Keys.A) || padState.Buttons.A == ButtonState.Pressed)
            {
                if (this.pressed == false)
                {
                    // サウンドを再生
                    this.soundBank.PlayCue("Sample");

                    this.pressed = true;
                }
            }
            else
            {
                this.pressed = false;
            }

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

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

            // TODO: ここに描画処理を記述します

            // 登録された DrawableGameComponent を描画する
            base.Draw(gameTime);
        }
    }
}