xna game studio express - aula 03 - audio

32
XNA Game Studio Express XNA Game Studio Express Aula 3 Aula 3 Uso de Audio com XACT Uso de Audio com XACT Alexandre Santos Lobão Alexandre Santos Lobão contato contato @ @ AlexandreLobao AlexandreLobao .com .com P P ó ó s em Desenvolvimento s em Desenvolvimento de de Jogos Eletrônicos Jogos Eletrônicos - - IESB IESB

Upload: guilherme-jose-killingsworth-junior

Post on 15-Jul-2016

226 views

Category:

Documents


0 download

DESCRIPTION

Audio o XNA.

TRANSCRIPT

Page 1: XNA Game Studio Express - Aula 03 - Audio

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

Page 2: XNA Game Studio Express - Aula 03 - Audio

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

Page 3: XNA Game Studio Express - Aula 03 - Audio

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

Page 4: XNA Game Studio Express - Aula 03 - Audio

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

Page 5: XNA Game Studio Express - Aula 03 - Audio

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

}

}

Page 6: XNA Game Studio Express - Aula 03 - Audio

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

Page 7: XNA Game Studio Express - Aula 03 - Audio

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

Page 8: XNA Game Studio Express - Aula 03 - Audio

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

Page 9: XNA Game Studio Express - Aula 03 - Audio

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;

Page 10: XNA Game Studio Express - Aula 03 - Audio

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

Page 11: XNA Game Studio Express - Aula 03 - Audio

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

Page 12: XNA Game Studio Express - Aula 03 - Audio

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”

Page 13: XNA Game Studio Express - Aula 03 - Audio

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”

Page 14: XNA Game Studio Express - Aula 03 - Audio

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”

Page 15: XNA Game Studio Express - Aula 03 - Audio

15

Uso de Audio com XACTUso de Audio com XACT

2. Incluir o arquivo no jogoDa mesma forma como se incluem texturas

Page 16: XNA Game Studio Express - Aula 03 - Audio

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

}

Page 17: XNA Game Studio Express - Aula 03 - Audio

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

Page 18: XNA Game Studio Express - Aula 03 - Audio

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

Page 19: XNA Game Studio Express - Aula 03 - Audio

19

Mais sobre Audio: Compressão

Para comprimir um arquivo:

1. Criar novo “Compression Preset”

Page 20: XNA Game Studio Express - Aula 03 - Audio

20

Mais sobre Audio: Compressão

2. Definir propriedades do Compression preset criado

Page 21: XNA Game Studio Express - Aula 03 - Audio

21

Mais sobre Audio: Compressão

3. Escolher compressão para o arquivo WAV no WaveBank

Page 22: XNA Game Studio Express - Aula 03 - Audio

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

Page 23: XNA Game Studio Express - Aula 03 - Audio

23

Mais sobre Audio: Uso de diversos samples

Basta criar diversos Sounds e arrastar mais de um para a mesma cue

Page 24: XNA Game Studio Express - Aula 03 - Audio

24

Mais sobre Audio: Uso de Variáveis

1. Adicionar nova “Cue instance variable”

Page 25: XNA Game Studio Express - Aula 03 - Audio

25

Mais sobre Audio: Uso de Variáveis

2. Adicionar variável à lista e informar seus detalhes

Page 26: XNA Game Studio Express - Aula 03 - Audio

26

Mais sobre Audio: Uso de Variáveis

3. Adicionar novo RPC (Runtime ParameterControl) Preset

Page 27: XNA Game Studio Express - Aula 03 - Audio

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)

Page 28: XNA Game Studio Express - Aula 03 - Audio

28

Mais sobre Audio: Uso de Variáveis

4. Informar detalhes sobre o RPC PresetVariable: selecionar a variável criada anteriormente

Page 29: XNA Game Studio Express - Aula 03 - Audio

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)

Page 30: XNA Game Studio Express - Aula 03 - Audio

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

Page 31: XNA Game Studio Express - Aula 03 - Audio

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...)

Page 32: XNA Game Studio Express - Aula 03 - Audio

32

Perguntas?Perguntas?