Memutar Suara

Halaman Diperbarui :
Tanggal pembuatan halaman :

ringkasan

Mengimpor dan memutar file suara yang dibuat di XACT.

Lingkungan operasi

Prasyarat

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

Lingkungan operasi

balei-balei

Cara bekerja dengan sampel

Berfungsi keyboardXbox 360 controllermouse
Memutar Suara Sebuah Sebuah -

zat

Catatan: Tips ini didasarkan pada XNA Game Studio 2.0.

Untuk memutar suara, Anda perlu mendaftarkan file yang dibuat di "Membuat file untuk memutar suara dengan XNA" ke proyek.


サウンドファイルの登録

Klik kanan folder Konten dan pilih Tambahkan - Item yang Ada.


xap ファイルを選択

Si. Pilih file "xap" untuk dimuat. ("Audio.xap" dalam sampel)


追加された xap ファイル

File xap ditambahkan ke folder Konten.


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

Selanjutnya, pindahkan file gelombang yang Anda gunakan untuk membuat file xap langsung ke folder Konten. Satu hal yang perlu diingat adalah bahwa file WAV harus ditempatkan di jalur relatif yang sama seperti saat file XAP dibuat.

Dalam hal ini, saya memindahkan file gelombang langsung ke folder, tetapi saya tidak memiliki masalah untuk menambahkannya ke proyek saya.


Itu saja, Anda siap untuk pergi. Mulai sekarang, itu akan menjadi program.

kebun

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

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

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

Untuk memutar suara, gunakan tiga hal: "AudioEngine", "WaveBank", dan "SoundBank". Kemungkinan besar Anda akan menggunakan SoundBank atau AudioEngines, tetapi Anda harus membuat ketiga instans tersebut.

Membuat Instans

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

Instans terkait suara dibuat dalam metode Game.Initialize. Saat membuat setiap kelas, Anda mengatur argumen ke . xgs「. xwb「. .xsb", yang secara otomatis dibuat berdasarkan file proyek XAP saat Anda membangun proyek.

Nama file audio, soundbank, dan wavebank harus sama dengan nama yang Anda tetapkan saat membuat proyek di XACT. Selain itu, karena jalur file relatif terhadap file yang dapat dieksekusi, perlu untuk menyertakan jalur folder "Konten" dalam contoh ini.

AudioEngine **Pembangun

Membuat instance class AudioEngine untuk menangani objek audio.

pengaturanFile tali Jalur file konfigurasi yang akan dimuat

WaveBank pembangun

Membuat instans kelas WaveBank yang berisi kumpulan file gelombang.

Mesin audio Mesin Audio WaveBank dan AudioEngine
nonStreamingWaveBankNama File tali Jalur ke file WaveBank untuk dimuat

SoundBank pembangun

Membuat instance kelas SoundBank yang berisi kumpulan antrean.

Mesin audio Mesin Audio AudioEngine untuk terhubung ke SoundBank
Filename tali Jalur ke file SoundBank yang akan dimuat

Memutar Suara

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 memutar suara, gunakan metode SoundBank.PlayCue. Sumber suara yang akan diputar ditentukan oleh nama "Cue" yang diatur di XACT.

Setelah diputar, suara akan terus mengalir hingga akhir. Selain itu, sumber suara yang sama dapat diputar berulang kali dengan memutarnya beberapa kali.

Dalam sampel, setiap tombol A atau tombol A ditekan untuk memutar sekali.

SoundBank.PlayCue Metode

Mainkan isyarat.

Nama tali Nama antrian untuk dimainkan

Semua Kode

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