Memainkan Bunyi

Laman dikemaskini :
Tarikh penciptaan halaman :

Ringkasan

Mengimport dan memainkan fail bunyi yang dicipta dalam XACT.

Persekitaran operasi

Prasyarat

Versi XNA yang Disokong
  • 2.0
  • 3.0
Platform yang Disokong
  • Windows (XP SP2 atau lebih baru, Vista)
  • Xbox 360
Versi Vertex Shader yang Diperlukan Windows 1.1
Windows Versi Pixel Shader Diperlukan 1.1

Persekitaran operasi

Platform

Bagaimana untuk bekerja dengan sampel

Papan kekunci kerjapengawal Xbox 360tetikus
Memainkan Bunyi A A -

Bahan

Nota: Petua ini berdasarkan XNA Game Studio 2.0.

Untuk memainkan bunyi, anda perlu mendaftarkan fail yang dibuat dalam "Membuat fail untuk memainkan bunyi dengan XNA" ke projek.


サウンドファイルの登録

Klik kanan folder Kandungan dan pilih Tambah - Item Sedia Ada.


xap ファイルを選択

Itu . Pilih fail "xap" untuk dimuatkan. ("Audio.xap" dalam sampel)


追加された xap ファイル

Fail xap ditambahkan ke folder Kandungan.


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

Seterusnya, alihkan fail gelombang yang anda gunakan untuk mencipta fail xap terus ke folder Kandungan. Satu perkara yang perlu diingat ialah fail WAV mesti diletakkan dalam laluan relatif yang sama seperti semasa fail XAP dibuat.

Dalam kes ini, saya memindahkan fail gelombang terus ke folder, tetapi saya tidak mempunyai sebarang masalah untuk menambahkannya pada projek saya.


Itu sahaja, anda sudah bersedia untuk pergi. Mulai sekarang, ia akan menjadi program.

Bidang

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

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

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

Untuk memainkan bunyi, gunakan tiga perkara: "AudioEngine", "WaveBank" dan "SoundBank". Anda berkemungkinan besar akan menggunakan SoundBanks atau AudioEngines, tetapi anda perlu mencipta ketiga-tiga contoh.

Mencipta Contoh

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

Contoh berkaitan bunyi dicipta dalam kaedah Game.Initialize. Apabila anda mencipta setiap kelas, anda menetapkan hujah kepada . xgs「. xwb「. .xsb", yang dicipta secara automatik berdasarkan fail projek XAP apabila anda membina projek.

Nama fail audio, soundbank dan wavebank mestilah sama dengan nama yang anda tetapkan apabila anda mencipta projek dalam XACT. Juga, memandangkan laluan fail adalah relatif kepada fail boleh laku, adalah perlu untuk memasukkan laluan folder "Kandungan" dalam contoh ini.

AudioEngine **Constructor

Mencipta contoh kelas AudioEngine untuk mengendalikan objek audio.

tetapanFail Rentetan Laluan fail konfigurasi untuk dimuatkan

WaveBank Constructor

Mencipta contoh kelas WaveBank yang mengandungi koleksi fail gelombang.

Enjin audio Enjin Audio WaveBank dan AudioEngine
bukan StreamingWaveBankNama Baik Rentetan Laluan ke fail WaveBank untuk dimuatkan

SoundBank Constructor

Mencipta contoh kelas SoundBank yang mengandungi koleksi baris gilir.

Enjin audio Enjin Audio AudioEngine untuk menyambung ke SoundBank
Nama fail Rentetan Laluan ke fail SoundBank untuk dimuatkan

Memainkan Bunyi

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

Untuk memainkan bunyi, gunakan kaedah SoundBank.PlayCue. Sumber bunyi yang akan dimainkan ditentukan oleh nama "Cue" yang ditetapkan dalam XACT.

Setelah dimainkan, bunyi akan terus mengalir sehingga tamat. Di samping itu, sumber bunyi yang sama boleh dimainkan berulang kali dengan memainkannya beberapa kali.

Dalam sampel, setiap butang A atau kekunci A ditekan untuk dimainkan sekali.

SoundBank.PlayCue Kaedah

Mainkan isyarat.

Nama Rentetan Nama baris gilir untuk bermain

Semua Kod

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