Reproducción de sonidos
resumen
Importa y reproduce un archivo de sonido creado en XACT.
Entorno operativo
Prerrequisitos
Versiones de XNA compatibles |
|
Plataformas compatibles |
|
Versión requerida del sombreador de vértices de Windows | 1.1 |
Versión de Pixel Shader requerida para Windows | 1.1 |
Entorno operativo
plataforma |
Cómo trabajar con la muestra
Teclado de trabajoMando Xbox | 360ratón | ||
---|---|---|---|
Reproducción de sonidos | Un | Un | - |
sustancia
Nota: Estos consejos se basan en XNA Game Studio 2.0.
Para reproducir el sonido, debe registrar el archivo creado en "Creación de un archivo para reproducir sonido con XNA" en el proyecto.
Haga clic con el botón derecho en la carpeta Contenido y seleccione Agregar - Elemento existente.
El. Seleccione el archivo "xap" para cargar. ("Audio.xap" en el ejemplo)
El archivo xap se agrega a la carpeta Contenido.
A continuación, mueva el archivo wave que utilizó para crear el archivo xap directamente a la carpeta Contenido. Una cosa a tener en cuenta es que el archivo WAV debe colocarse en la misma ruta relativa que cuando se creó el archivo XAP.
En este caso, estoy moviendo el archivo wave directamente a la carpeta, pero no tengo ningún problema en agregarlo a mi proyecto.
Eso es todo, estás listo para comenzar. A partir de aquí, será un programa.
campo
<summary>
オーディオエンジン
</summary>
private AudioEngine audioEngine = null;
<summary>
WaveBank
</summary>
private WaveBank waveBank = null;
<summary>
SoundBank
</summary>
private SoundBank soundBank = null;
Para reproducir sonidos, use tres cosas: "AudioEngine", "WaveBank" y "SoundBank". Lo más probable es que utilices SoundBanks o AudioEngines, pero tendrás que crear las tres instancias.
Creación de una instancia
<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();
}
Las instancias relacionadas con el sonido se crean en el método Game.Initialize. Al crear cada clase, se establece el argumento en . xgs」「. xwb」「. .xsb", que se crean automáticamente en función del archivo de proyecto xap al compilar el proyecto.
Los nombres de los archivos de audio, banco de sonido y banco de ondas deben ser los mismos que los nombres establecidos al crear el proyecto en XACT. Además, dado que la ruta del archivo es relativa al archivo ejecutable, es necesario incluir la ruta de la carpeta "Contenido" en este ejemplo.
AudioEngine
**Constructor
Crea una instancia de la clase AudioEngine para controlar objetos de audio.
settingsFile | cuerda | Ruta del archivo de configuración a cargar |
WaveBank
constructor
Crea una instancia de la clase WaveBank que contiene una colección de archivos wave.
motor de audio | Motor de audio | WaveBank y AudioEngine |
nonStreamingWaveBankNombre de archivo | cuerda | Ruta al archivo WaveBank que se va a cargar |
SoundBank
constructor
Crea una instancia de la clase SoundBank que contiene una colección de colas.
motor de audio | Motor de audio | AudioEngine para conectarse a SoundBanks |
Nombre | cuerda | Ruta al archivo de SoundBank que se va a cargar |
Reproducción de sonidos
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;
}
Para reproducir un sonido, use el método SoundBank.PlayCue. La fuente de sonido que se va a reproducir se especifica mediante el nombre del conjunto "Cue" en XACT.
Una vez reproducido, el sonido seguirá fluyendo hasta el final. Además, la misma fuente de sonido se puede reproducir una y otra vez reproduciéndola varias veces.
En la muestra, cada botón A o tecla A se presiona para reproducir una vez.
SoundBank.PlayCue
método
Toca el taco.
nombre | cuerda | El nombre de la cola para jugar |
Todos los códigos
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);
}
}
}