xna game studio express - aula 03 - audio
DESCRIPTION
Audio o XNA.TRANSCRIPT
XNA Game Studio ExpressXNA Game Studio ExpressAula 3Aula 3
Uso de Audio com XACTUso de Audio com XACT
Alexandre Santos LobãoAlexandre Santos Lobãocontatocontato@@AlexandreLobaoAlexandreLobao.com.com
PPóós em Desenvolvimento s em Desenvolvimento de de Jogos EletrônicosJogos Eletrônicos -- IESB IESB
2
Agenda: Aula 3Agenda: Aula 3
Revisão Revisão -- DesenhoDesenho de de objetos objetos 2D2D
Uso de Audio com XACTUso de Audio com XACT
3
RevisãoRevisão: XNA Framework: XNA Framework
PlataformaPlataforma
CoreCore
FrameworkFramework
ExtendedExtended
FrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CCóódigodigo ConteConteúúdodo ComponentesComponentes
Legenda XNA ProvidesXNA Provides NNóós criamoss criamos ComunidadeComunidade
4
ArquiteturaArquitetura de umde um programaprograma XNAXNA
Ao Ao se se criar criar um um projetoprojeto, , são gerados dois arquivossão gerados dois arquivos::
Program.cs
Game1.cs
5
ArquiteturaArquitetura de umde um programaprograma XNAXNA
Program.cs
static void Main(string[] args)
{
using (Game1 game = new Game1())
{
game.Run(); -> Executa o Game Loop
}
}
6
ArquiteturaArquitetura de umde um programaprograma XNAXNA
Métodos chamados pela classe GameInitialize()
Onde se inicializam os recursos não gráficos
Chamados sempre que é necessário
LoadGraphicsContent(bool loadAllContent)
Onde se carregam os recursos gráficos
UnloadGraphicsContent(bool unloadAllContent)
Onde se libera, os recursos gráficos
Chamados a cada game loop
Update(GameTime gameTime)
Onde se coloca a lógica principal do jogo (cálculos)
Draw(GameTime gameTime)
Onde se colocam as rotinas de desenho do jogo
7
DesenhoDesenho dede objetosobjetos 2D2D
Na classe game 1:private Texture2D textura;
private SpriteBatch Renderizador2D;
No Método LoadGraphicsContent:textura = content.Load<Texture2D>("xna_thumbnail");
Renderizador2D = new SpriteBatch(graphics.GraphicsDevice);
No Método UnloadGraphicsContent:textura.Dispose();
Renderizador2D.Dispose();
No Método Draw:Renderizador2D.Begin(SpriteBlendMode.AlphaBlend);
Renderizador2D.Draw(textura, Vector2.One, Color.White);
Renderizador2D.End();
8
““ComponentsComponents”” de um gamede um game
1. Criar uma classe derivada de GameComponentclass clsSprite : GameComponent
{
public clsSprite(Game game, ...) : base(game)
..
public override void Update(GameTime gameTime)
..
}
2. Adicionar o objeto à lista de componentes do jogoprivate clsSprite Desenho2D;
Desenho2D = new clsSprite(this, ...)
this.Components.Add(Desenho2D);
9
TratamentoTratamento de input do de input do usuusuááriorio
1. Uso do GamePadGamePadState gamePad = GamePad.GetState(PlayerIndex.One);
novaPosicao.Y -= gamePad.ThumbSticks.Left.Y;
2. Uso do TecladoKeyboardState keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Up))
novaPosicao.Y -= 1;
3. Uso do MouseMouseState mouse = Mouse.GetState();
novaPosicao.X = mouse.X;
10
Uso de Audio com XACTUso de Audio com XACT
Para que o som seja utilizável tanto no Windows quanto no Xbox 360, é necessário converter os sons em “Sound banks”,
Cada “Sound bank” é composto por “Wave banks”
Cada “Wave Bank” arnazena diversos arquivos (formato WAV ou AIF apenas)
Formatos mais “profissionais”, sem perda de informação como o MP3
11
Uso de Audio com XACTUso de Audio com XACT
Para incluir um som no jogo:
1. Gerar o arquivo de som XACT
2. Incluir o arquivo no jogo
3. Utilizar o som via Content Pipeline
12
Uso de Audio com XACTUso de Audio com XACT
1. Gerar o arquivo de som XACTcriar novo projeto no XACT
Inserir novo “Wave Bank” e novo “Sound Bank”
13
Uso de Audio com XACTUso de Audio com XACT
1. Gerar o arquivo de som XACTClicar com botão da direita no “Wave Bank”
Inserir arquivos WAV ou AIF no “Wave Bank”
14
Uso de Audio com XACTUso de Audio com XACT
1. Gerar o arquivo de som XACTArrastar sons do “Wave Bank” para o “Sound bank”
Setar propriedades do som a ser tocado (ex: “loop event” do evento “Play Wave”
15
Uso de Audio com XACTUso de Audio com XACT
2. Incluir o arquivo no jogoDa mesma forma como se incluem texturas
16
Uso de Audio com XACTUso de Audio com XACT3. Utilizar o som via Content Pipeline
Criação dos objetos// Audio objects
AudioEngine audioEngine;
WaveBank waveBank;
SoundBank soundBank;
protected override void Initialize()
{
audioEngine = new AudioEngine("MySounds.xgs");
// Assume the default names for the wave and sound bank.
// To change these names, change properties in XACT.
waveBank = new WaveBank(audioEngine, "Wave Bank.xwb");
soundBank = new SoundBank(audioEngine, "Sound Bank.xsb");
base.Initialize();
}
17
Uso de Audio com XACTUso de Audio com XACT
3. Utilizar o som via Content Pipeline
Gerar um efeito sonoro (som sem loop)soundBank.PlayCue("chord");
Tocar música de fundo (som com loop)// Iniciar a música
myLoopingSound = soundBank.GetCue("notify");
myLoopingSound.Play();
// Parar ou continuar a música
if (myLoopingSound.IsPaused)
myLoopingSound.Resume();
else
myLoopingSound.Pause();
18
Mais sobre Audio: Compressão
Por default, arquivos não são comprimidos pelo XACT – mas felizmente podemos comprimi-los!
Fonte:Professional XNA Game Programming: For Xbox 360 and Windows by Benjamin Nitschke
19
Mais sobre Audio: Compressão
Para comprimir um arquivo:
1. Criar novo “Compression Preset”
20
Mais sobre Audio: Compressão
2. Definir propriedades do Compression preset criado
21
Mais sobre Audio: Compressão
3. Escolher compressão para o arquivo WAV no WaveBank
22
Mais sobre Audio: Compressão
Exemplo de tipos de compressão
Compression File Size Compression
Rate
Uncompressed 36 MB 100%
MP3 with 192kbit 4.8 MB 13%
MP3 with 128kbit 3.1 MB 8.5%
AccPlus with 48kbit, similar to MP3 192kbit 1.2 MB 3%
AccPlus with 24kbit, similar to MP3 96kbit 0.6 MB 1.6%
OGG with 160kbit 3.8 MB 11%
XACT ADPCM 32 samples per block 12.5 MB 34%
XACT ADPCM 128 samples per block (default) 9.9 MB 27%
XACT ADPCM 512 samples per block 9.3 MB 26%
XACT XMA 100% Quality 14.3 MB 40%
XACT XMA 90% Quality 8.9 MB 25%
XACT XMA 75% Quality 5.5 MB 15%
XACT XMA 60% Quality (default) 4.7 MB 13%
XACT XMA 30% Quality 3.5 MB 10%
XACT XMA 10% Quality 2.9 MB 8%
Fonte:Professional XNA Game Programming: For Xbox 360 and Windows by Benjamin Nitschke
23
Mais sobre Audio: Uso de diversos samples
Basta criar diversos Sounds e arrastar mais de um para a mesma cue
24
Mais sobre Audio: Uso de Variáveis
1. Adicionar nova “Cue instance variable”
25
Mais sobre Audio: Uso de Variáveis
2. Adicionar variável à lista e informar seus detalhes
26
Mais sobre Audio: Uso de Variáveis
3. Adicionar novo RPC (Runtime ParameterControl) Preset
27
Mais sobre Audio: Uso de Variáveis
4. Informar detalhes sobre o RPC PresetParâmetro: Só pode controlar, na versão atual, Volume, Pitch (velocidade com que o som é tocado) e Reverberação (eco)
28
Mais sobre Audio: Uso de Variáveis
4. Informar detalhes sobre o RPC PresetVariable: selecionar a variável criada anteriormente
29
Mais sobre Audio: Uso de Variáveis
4. Informar detalhes sobre o RPC PresetAjustar gráfico de como a variável se relaciona ao parâmetro (de forma linear, na figura abaixo)
30
Mais sobre Audio: Uso de Variáveis
Uso no Programa:
SomMotor = soundBank.GetCue(“Motor");
SomMotor.Play();
...
// Aumentando a velocidade do som, ele parece
// mais agudo (como se o carro acelerasse)
// Velocidade 50 é a “padrão” do som
SomMotor.SetVariable(“Aceleracao", 75);
31
Desafio 1: Incluindo som no jogo
Pegar exemplo da aula um (com uso de input do usuário e detecção de colisão)
incluir música de fundo
Incluir som ao colidir
ATENÇÃO: Som só deve tocar uma vez “por colisão”(não repetir enquanto objetos estiverem colidindo / sobrepostos...)
32
Perguntas?Perguntas?