Відтворення звуків

Сторінка оновлюється :
Дата створення сторінки :

зведення

Імпортує та відтворює звуковий файл, створений у форматі XACT.

Робоче середовище

Передумови

Підтримувані версії XNA
  • 2.0
  • 3.0
Підтримувані платформи
  • Windows (XP SP2 або пізнішої версії, Vista)
  • Xbox 360
Потрібна версія Vertex Shader для Windows 1.1
Потрібна версія піксельного шейдера Windows 1.1

Робоче середовище

платформа

Як працювати зі зразком

Працює клавіатураXbox 360 контролермиші
Відтворення звуків A A -

речовина

Примітка: Ці поради базуються на XNA Game Studio 2.0.

Для того, щоб відтворити звук, потрібно прописати в проекті файл, створений в "Створення файлу для відтворення звуку з XNA".


サウンドファイルの登録

Клацніть правою кнопкою миші папку «Контент» і виберіть «Додати - Існуючий елемент».


xap ファイルを選択

Файл . Виберіть файл "xap" для завантаження. ("Audio.xap" у зразку)


追加された xap ファイル

Файл xap буде додано до папки «Контент».


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

Далі перемістіть файл wave, який ви використовували для створення файлу xap, безпосередньо в папку «Контент». Слід пам'ятати, що файл WAV має бути розміщений за тим самим відносним шляхом, що й під час створення файлу XAP.

У цьому випадку я переміщую файл wave безпосередньо в папку, але у мене немає жодних проблем з додаванням його до мого проекту.


Ось і все, ви готові до роботи. Відтепер це буде програма.

поле

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

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

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

Для відтворення звуків використовуйте три речі: «AudioEngine», «WaveBank» і «SoundBank». Швидше за все, ви будете використовувати SoundBank або AudioEngines, але вам потрібно буде створити всі три екземпляри.

Створення інстансу

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

Екземпляри, пов'язані зі звуком, створюються в методі Game.Initialize. Коли ви створюєте кожен клас, ви встановлюєте аргумент . xgs」「. xwb」「. .xsb», які автоматично створюються на основі файлу проекту xap під час створення проекту.

Назви файлів audio, soundbank і wavebank повинні збігатися з іменами, які ви встановили при створенні проекту в XACT. Крім того, оскільки шлях до файлу знаходиться відносно виконуваного файлу, в цей приклад необхідно включити шлях до папки «Контент».

AudioEngine **Будівник

Створює екземпляр класу AudioEngine для роботи з аудіооб'єктами.

налаштуванняФайл Рядок Шлях до файлу конфігурації для завантаження

WaveBank будівник

Створює екземпляр класу WaveBank, який містить колекцію файлів wave.

audioEngine Аудіодвигун WaveBank і AudioEngine
nonStreamingWaveBankІм'я файлу Рядок Шлях до файлу WaveBank для завантаження

SoundBank будівник

Створює екземпляр класу SoundBank, який містить колекцію черг.

audioEngine Аудіодвигун AudioEngine для підключення до SoundBank
Файлу Рядок Шлях до файлу SoundBank для завантаження

Відтворення звуків

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

Щоб відтворити звук, використовуйте метод SoundBank.PlayCue. Джерело звуку, яке буде відтворюватися, вказується назвою «Cue», встановленого в XACT.

Після відтворення звук буде продовжувати текти до кінця. Крім того, одне і те ж джерело звуку можна відтворювати знову і знову, відтворюючи його кілька разів.

У зразку кожна кнопка A або клавіша A натискається для відтворення один раз.

SoundBank.PlayCue метод

Грайте в кий.

Ім'я Рядок Назва черги на гру

Всі коди

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