Memainkan Bunyi
Ringkasan
Mengimport dan memainkan fail bunyi yang dicipta dalam XACT.
Persekitaran operasi
Prasyarat
Versi XNA yang Disokong |
|
Platform yang Disokong |
|
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.
Itu . Pilih fail "xap" untuk dimuatkan. ("Audio.xap" dalam sampel)
Fail xap ditambahkan ke folder Kandungan.
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);
}
}
}